diff --git a/AppCenter-Demo.sln b/AppCenter-Demo.sln
index 301476b71..5d94cad25 100644
--- a/AppCenter-Demo.sln
+++ b/AppCenter-Demo.sln
@@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Contoso.UtilClassLibrary",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contoso.UWP.Demo", "Apps\Contoso.UWP.Demo\Contoso.UWP.Demo.csproj", "{612D30FE-E1F1-4CEE-8256-911C03A16890}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contoso.Forms.Demo.MacOS", "Apps\Contoso.Forms.Demo\Contoso.Forms.Demo.MacOS\Contoso.Forms.Demo.MacOS.csproj", "{85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@@ -517,6 +519,76 @@ Global
{612D30FE-E1F1-4CEE-8256-911C03A16890}.Release|x86.ActiveCfg = Release|x86
{612D30FE-E1F1-4CEE-8256-911C03A16890}.Release|x86.Build.0 = Release|x86
{612D30FE-E1F1-4CEE-8256-911C03A16890}.Release|x86.Deploy.0 = Release|x86
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|ARM64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|ARM64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|x64.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.AppStore|x86.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|ARM.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|x64.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Debug|x86.Build.0 = Debug|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|ARM.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|ARM.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|ARM64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|ARM64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|iPhone.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|iPhone.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|iPhoneSimulator.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|ARM.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|ARM.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|ARM64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|iPhone.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|x64.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|x64.Build.0 = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|x86.ActiveCfg = Release|Any CPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -529,6 +601,7 @@ Global
{665362D9-5EE2-45DE-A907-25DC86999A68} = {91CEE2C9-F64C-45C9-9353-B1EC87D13C6D}
{2AF3281C-D928-4886-9C68-775DADA56789} = {274AB35C-68B4-4EFA-803B-8A7CFEC25EFC}
{612D30FE-E1F1-4CEE-8256-911C03A16890} = {274AB35C-68B4-4EFA-803B-8A7CFEC25EFC}
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6} = {91CEE2C9-F64C-45C9-9353-B1EC87D13C6D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9EE1C1FD-607B-470D-A253-43AD8A10A033}
diff --git a/AppCenter-Mac.sln b/AppCenter-Mac.sln
index 1b73a48d6..0eac3cc56 100644
--- a/AppCenter-Mac.sln
+++ b/AppCenter-Mac.sln
@@ -79,6 +79,22 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.AppCenter.Shared.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contoso.UtilClassLibrary", "Apps\Contoso.UtilClassLibrary\Contoso.UtilClassLibrary.csproj", "{D0FC73E2-AE97-495B-B41B-61CD422A8AE9}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.MacOS", "SDK\AppCenter\Microsoft.AppCenter.MacOS\Microsoft.AppCenter.MacOS.csproj", "{727A9E5A-566A-4DC5-B62B-8F7CA17661B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.MacOS.Bindings", "SDK\AppCenter\Microsoft.AppCenter.MacOS.Bindings\Microsoft.AppCenter.MacOS.Bindings.csproj", "{E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Analytics.MacOS", "SDK\AppCenterAnalytics\Microsoft.AppCenter.Analytics.MacOS\Microsoft.AppCenter.Analytics.MacOS.csproj", "{EE438174-EE11-432E-9225-5B4EA80A7917}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Analytics.MacOS.Bindings", "SDK\AppCenterAnalytics\Microsoft.AppCenter.Analytics.MacOS.Bindings\Microsoft.AppCenter.Analytics.MacOS.Bindings.csproj", "{D00918DD-BAC4-4AD4-A866-056CBE780AB2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Crashes.MacOS", "SDK\AppCenterCrashes\Microsoft.AppCenter.Crashes.MacOS\Microsoft.AppCenter.Crashes.MacOS.csproj", "{0635DC94-08B3-458F-B466-3524132601EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Crashes.MacOS.Bindings", "SDK\AppCenterCrashes\Microsoft.AppCenter.Crashes.MacOS.Bindings\Microsoft.AppCenter.Crashes.MacOS.Bindings.csproj", "{85C929EF-7FF4-4C43-967E-DFA816EFF5E4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contoso.MacOS.Puppet", "Apps\Contoso.MacOS.Puppet\Contoso.MacOS.Puppet.csproj", "{83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contoso.Forms.Puppet.MacOS", "Apps\Contoso.Forms.Puppet\Contoso.Forms.Puppet.MacOS\Contoso.Forms.Puppet.MacOS.csproj", "{C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SDK\AppCenter\Microsoft.AppCenter.Shared\Microsoft.AppCenter.Shared.projitems*{119c1730-e109-4bc9-aa89-9dca2c50bfd5}*SharedItemsImports = 4
@@ -1559,6 +1575,438 @@ Global
{D0FC73E2-AE97-495B-B41B-61CD422A8AE9}.GooglePlay|x64.Build.0 = Release|Any CPU
{D0FC73E2-AE97-495B-B41B-61CD422A8AE9}.GooglePlay|x86.ActiveCfg = Release|Any CPU
{D0FC73E2-AE97-495B-B41B-61CD422A8AE9}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|ARM.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhone.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x64.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x86.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|ARM.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhone.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x64.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x64.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x86.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x86.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|ARM.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|ARM.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhone.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x64.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x64.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x86.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x86.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|ARM.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhone.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x64.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x64.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x86.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x86.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|ARM.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|ARM.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhone.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x64.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x64.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x86.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x86.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|ARM.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhone.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x64.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x64.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x86.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x86.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|x64.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.AppStore|x86.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|x64.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Debug|x86.Build.0 = Debug|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|ARM.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|iPhone.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|x64.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|x64.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|x86.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.Release|x86.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}.GooglePlay|x86.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|x64.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.AppStore|x86.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|ARM.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|x64.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Debug|x86.Build.0 = Debug|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|ARM.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|ARM.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|iPhone.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|x64.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|x64.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|x86.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.Release|x86.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|Any CPU.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|Any CPU.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|x64.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|x64.Build.0 = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|x86.ActiveCfg = Release|Any CPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}.GooglePlay|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1600,6 +2048,14 @@ Global
{CAE55C79-1601-400D-86BF-03AB8CC5B8B9} = {7FAAA086-4453-4B62-AD9A-2E2ED216E3C4}
{7076E711-FE72-4EC0-8335-045EEFC1100C} = {13744327-9529-490B-A970-06A1D3144117}
{D0FC73E2-AE97-495B-B41B-61CD422A8AE9} = {274AB35C-68B4-4EFA-803B-8A7CFEC25EFC}
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8} = {13744327-9529-490B-A970-06A1D3144117}
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4} = {13744327-9529-490B-A970-06A1D3144117}
+ {EE438174-EE11-432E-9225-5B4EA80A7917} = {C4C63221-60D5-412B-92CC-D59A8EA62E23}
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2} = {C4C63221-60D5-412B-92CC-D59A8EA62E23}
+ {0635DC94-08B3-458F-B466-3524132601EB} = {7FAAA086-4453-4B62-AD9A-2E2ED216E3C4}
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4} = {7FAAA086-4453-4B62-AD9A-2E2ED216E3C4}
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8} = {274AB35C-68B4-4EFA-803B-8A7CFEC25EFC}
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481} = {088DA4BA-0AFB-4690-A639-7559BE14D0C8}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
diff --git a/AppCenter-SDK-Build-Mac.sln b/AppCenter-SDK-Build-Mac.sln
index 63af0c0e7..08cc85180 100644
--- a/AppCenter-SDK-Build-Mac.sln
+++ b/AppCenter-SDK-Build-Mac.sln
@@ -61,6 +61,18 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.AppCenter.Crashes
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.AppCenter.Shared.Xamarin", "SDK\AppCenter\Microsoft.AppCenter.Shared.Xamarin\Microsoft.AppCenter.Shared.Xamarin.shproj", "{7076E711-FE72-4EC0-8335-045EEFC1100C}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.MacOS", "SDK\AppCenter\Microsoft.AppCenter.MacOS\Microsoft.AppCenter.MacOS.csproj", "{727A9E5A-566A-4DC5-B62B-8F7CA17661B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.MacOS.Bindings", "SDK\AppCenter\Microsoft.AppCenter.MacOS.Bindings\Microsoft.AppCenter.MacOS.Bindings.csproj", "{E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Analytics.MacOS", "SDK\AppCenterAnalytics\Microsoft.AppCenter.Analytics.MacOS\Microsoft.AppCenter.Analytics.MacOS.csproj", "{EE438174-EE11-432E-9225-5B4EA80A7917}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Analytics.MacOS.Bindings", "SDK\AppCenterAnalytics\Microsoft.AppCenter.Analytics.MacOS.Bindings\Microsoft.AppCenter.Analytics.MacOS.Bindings.csproj", "{D00918DD-BAC4-4AD4-A866-056CBE780AB2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Crashes.MacOS", "SDK\AppCenterCrashes\Microsoft.AppCenter.Crashes.MacOS\Microsoft.AppCenter.Crashes.MacOS.csproj", "{0635DC94-08B3-458F-B466-3524132601EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AppCenter.Crashes.MacOS.Bindings", "SDK\AppCenterCrashes\Microsoft.AppCenter.Crashes.MacOS.Bindings\Microsoft.AppCenter.Crashes.MacOS.Bindings.csproj", "{85C929EF-7FF4-4C43-967E-DFA816EFF5E4}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SDK\AppCenter\Microsoft.AppCenter.Shared\Microsoft.AppCenter.Shared.projitems*{119c1730-e109-4bc9-aa89-9dca2c50bfd5}*SharedItemsImports = 4
@@ -1062,6 +1074,294 @@ Global
{41FEBC72-C12B-47E1-B6F6-51D50158C825}.Release|x64.Build.0 = Release|Any CPU
{41FEBC72-C12B-47E1-B6F6-51D50158C825}.Release|x86.ActiveCfg = Release|Any CPU
{41FEBC72-C12B-47E1-B6F6-51D50158C825}.Release|x86.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.AppStore|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Debug|x86.Build.0 = Debug|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|ARM.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhone.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x64.Build.0 = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}.Release|x86.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.AppStore|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x64.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Debug|x86.Build.0 = Debug|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|ARM.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhone.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x64.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x64.Build.0 = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x86.ActiveCfg = Release|Any CPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}.Release|x86.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.AppStore|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|ARM.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x64.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Debug|x86.Build.0 = Debug|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|ARM.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|ARM.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhone.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x64.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x64.Build.0 = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x86.ActiveCfg = Release|Any CPU
+ {EE438174-EE11-432E-9225-5B4EA80A7917}.Release|x86.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.AppStore|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|ARM.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x64.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Debug|x86.Build.0 = Debug|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|ARM.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhone.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x64.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x64.Build.0 = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x86.ActiveCfg = Release|Any CPU
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}.Release|x86.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.AppStore|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|ARM.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x64.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Debug|x86.Build.0 = Debug|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|ARM.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|ARM.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhone.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x64.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x64.Build.0 = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x86.ActiveCfg = Release|Any CPU
+ {0635DC94-08B3-458F-B466-3524132601EB}.Release|x86.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.AppStore|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x64.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Debug|x86.Build.0 = Debug|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|ARM.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhone.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x64.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x64.Build.0 = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x86.ActiveCfg = Release|Any CPU
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1095,6 +1395,12 @@ Global
{60241627-33BB-45F9-A1B6-6F1CB2BF2C4A} = {B0562DBB-3784-4F1C-A355-61CFD44ED963}
{41FEBC72-C12B-47E1-B6F6-51D50158C825} = {B0562DBB-3784-4F1C-A355-61CFD44ED963}
{7076E711-FE72-4EC0-8335-045EEFC1100C} = {13744327-9529-490B-A970-06A1D3144117}
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8} = {13744327-9529-490B-A970-06A1D3144117}
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4} = {13744327-9529-490B-A970-06A1D3144117}
+ {EE438174-EE11-432E-9225-5B4EA80A7917} = {C4C63221-60D5-412B-92CC-D59A8EA62E23}
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2} = {C4C63221-60D5-412B-92CC-D59A8EA62E23}
+ {0635DC94-08B3-458F-B466-3524132601EB} = {7FAAA086-4453-4B62-AD9A-2E2ED216E3C4}
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4} = {7FAAA086-4453-4B62-AD9A-2E2ED216E3C4}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
diff --git a/Apps/Contoso.Android.Puppet/Constants.cs b/Apps/Contoso.Android.Puppet/Constants.cs
index c840a814e..70711ba91 100644
--- a/Apps/Contoso.Android.Puppet/Constants.cs
+++ b/Apps/Contoso.Android.Puppet/Constants.cs
@@ -11,5 +11,6 @@ public static class Constants
public const string Warning = "Warning";
public const string Error = "Error";
public const string StorageSizeKey = "StorageSizeKey";
+ public const string EnableManualSessionTrackerKey = "EnableManualSessionTrackerKey";
}
}
diff --git a/Apps/Contoso.Android.Puppet/Contoso.Android.Puppet.csproj b/Apps/Contoso.Android.Puppet/Contoso.Android.Puppet.csproj
index b9a9aac53..34631f85f 100644
--- a/Apps/Contoso.Android.Puppet/Contoso.Android.Puppet.csproj
+++ b/Apps/Contoso.Android.Puppet/Contoso.Android.Puppet.csproj
@@ -1,5 +1,6 @@
+
Debug
@@ -16,7 +17,7 @@
true
Resources\Resource.Designer.cs
Off
- v9.0
+ v11.0
Properties\AndroidManifest.xml
@@ -43,7 +44,6 @@
False
Full
true
- Xamarin.Android.Support.v7.AppCompat;Xamarin.Android.Support.Design
r8
@@ -56,7 +56,6 @@
False
Full
true
- Xamarin.Android.Support.v7.AppCompat;Xamarin.Android.Support.Design
r8
@@ -66,53 +65,128 @@
-
- ..\..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Annotations.dll
+
+ ..\..\packages\Xamarin.AndroidX.Annotation.Experimental.1.1.0.1\lib\monoandroid90\Xamarin.AndroidX.Annotation.Experimental.dll
-
- ..\..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\lib\MonoAndroid80\Xamarin.Android.Arch.Core.Common.dll
+
+
+
+
+ ..\..\packages\Xamarin.AndroidX.MultiDex.2.0.1.5\lib\monoandroid90\Xamarin.AndroidX.MultiDex.dll
-
- ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.dll
+
+ ..\..\packages\Xamarin.AndroidX.Annotation.1.2.0.1\lib\monoandroid90\Xamarin.AndroidX.Annotation.dll
-
- ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.dll
+
+ ..\..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.9\lib\monoandroid90\Xamarin.AndroidX.Arch.Core.Common.dll
-
- ..\..\packages\Xamarin.Android.Support.Compat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Compat.dll
+
+ ..\..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.9\lib\monoandroid90\Xamarin.AndroidX.Arch.Core.Runtime.dll
-
- ..\..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Core.UI.dll
+
+ ..\..\packages\Xamarin.AndroidX.Collection.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.Collection.dll
-
- ..\..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Core.Utils.dll
+
+ ..\..\packages\Xamarin.AndroidX.Lifecycle.Common.2.3.1.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.Common.dll
-
- ..\..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Fragment.dll
+
+ ..\..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.3.1.2\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.Runtime.dll
-
- ..\..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Media.Compat.dll
+
+ ..\..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.8\lib\monoandroid90\Xamarin.AndroidX.VersionedParcelable.dll
-
- ..\..\packages\Xamarin.Android.Support.Transition.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Transition.dll
+
+ ..\..\packages\Xamarin.AndroidX.Core.1.6.0.1\lib\monoandroid90\Xamarin.AndroidX.Core.dll
-
- ..\..\packages\Xamarin.Android.Support.v4.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v4.dll
+
+ ..\..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.3.1.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.LiveData.Core.dll
-
- ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.dll
+
+ ..\..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.3.1.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.ViewModel.dll
-
- ..\..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.dll
+
+ ..\..\packages\Xamarin.AndroidX.SavedState.1.1.0.2\lib\monoandroid90\Xamarin.AndroidX.SavedState.dll
-
- ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll
+
+ ..\..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.3.1.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.dll
-
- ..\..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.dll
+
+ ..\..\packages\Xamarin.AndroidX.Tracing.Tracing.1.0.0.1\lib\monoandroid90\Xamarin.AndroidX.Tracing.Tracing.dll
-
- ..\..\packages\Xamarin.Android.Support.Design.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Design.dll
+
+ ..\..\packages\Xamarin.AndroidX.Activity.1.3.1\lib\monoandroid90\Xamarin.AndroidX.Activity.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Loader.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.Loader.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.CustomView.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.CustomView.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.ViewPager.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.ViewPager.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Fragment.1.3.6.1\lib\monoandroid90\Xamarin.AndroidX.Fragment.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Interpolator.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.Interpolator.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.CursorAdapter.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.CursorAdapter.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.RecyclerView.1.2.1.1\lib\monoandroid90\Xamarin.AndroidX.RecyclerView.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.DrawerLayout.1.1.1.3\lib\monoandroid90\Xamarin.AndroidX.DrawerLayout.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.VectorDrawable.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.VectorDrawable.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.VectorDrawable.Animated.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.VectorDrawable.Animated.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.AppCompat.AppCompatResources.1.3.1.1\lib\monoandroid90\Xamarin.AndroidX.AppCompat.AppCompatResources.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.AppCompat.1.3.1.1\lib\monoandroid90\Xamarin.AndroidX.AppCompat.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.CoordinatorLayout.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.CoordinatorLayout.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.ConstraintLayout.Core.1.0.0\lib\monoandroid90\Xamarin.AndroidX.ConstraintLayout.Core.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.ConstraintLayout.2.1.0\lib\monoandroid90\Xamarin.AndroidX.ConstraintLayout.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.CardView.1.0.0.9\lib\monoandroid90\Xamarin.AndroidX.CardView.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.DocumentFile.1.0.1.8\lib\monoandroid90\Xamarin.AndroidX.DocumentFile.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.LocalBroadcastManager.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.LocalBroadcastManager.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Print.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.Print.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Legacy.Support.Core.Utils.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.Legacy.Support.Core.Utils.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.DynamicAnimation.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.DynamicAnimation.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.Transition.1.4.1.1\lib\monoandroid90\Xamarin.AndroidX.Transition.dll
+
+
+ ..\..\packages\Xamarin.AndroidX.ViewPager2.1.0.0.10\lib\monoandroid90\Xamarin.AndroidX.ViewPager2.dll
+
+
+ ..\..\packages\Xamarin.Google.Android.Material.1.4.0.2\lib\monoandroid90\Xamarin.Google.Android.Material.dll
@@ -150,6 +224,10 @@
+
+
+
+
@@ -208,6 +286,7 @@
+
@@ -220,21 +299,49 @@
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Android.Puppet/MainActivity.cs b/Apps/Contoso.Android.Puppet/MainActivity.cs
index f48d6a3db..ffaa23db8 100644
--- a/Apps/Contoso.Android.Puppet/MainActivity.cs
+++ b/Apps/Contoso.Android.Puppet/MainActivity.cs
@@ -2,24 +2,25 @@
// Licensed under the MIT License.
using System.Linq;
-using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
-using Android.Support.Design.Widget;
-using Android.Support.V4.View;
-using Android.Support.V7.App;
+using Android.App;
+using AndroidX.AppCompat.App;
using Microsoft.AppCenter;
using Microsoft.AppCenter.Analytics;
using Microsoft.AppCenter.Crashes;
using Microsoft.AppCenter.Distribute;
+using Google.Android.Material.BottomNavigation;
+using Android.Views;
namespace Contoso.Android.Puppet
{
- using AlertDialog = global::Android.Support.V7.App.AlertDialog;
+ using AlertDialog = global::Android.App.AlertDialog;
[Activity(Label = "SXPuppet", Icon = "@drawable/icon", Theme = "@style/PuppetTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
- public class MainActivity : AppCompatActivity
+ [System.Obsolete]
+ public class MainActivity : AppCompatActivity, BottomNavigationView.IOnNavigationItemSelectedListener
{
const string LogTag = "AppCenterXamarinPuppet";
@@ -30,13 +31,10 @@ protected override void OnCreate(Bundle savedInstanceState)
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
- // Get the ViewPager and set it's PagerAdapter so that it can display items
- var viewPager = FindViewById(Resource.Id.viewpager) as ViewPager;
- viewPager.Adapter = new PagerAdapter(SupportFragmentManager, this);
-
- // Give the TabLayout the ViewPager
- var tabLayout = FindViewById(Resource.Id.tablayout) as TabLayout;
- tabLayout.SetupWithViewPager(viewPager);
+ // Init bottom menu.
+ BottomNavigationView navigation = FindViewById(Resource.Id.bottom_navigation);
+ navigation.SetOnNavigationItemSelectedListener(this);
+ UpdateFragment(new AppCenterFragment(), Resource.String.AppCenterTitle);
// App Center integration
AppCenterLog.Assert(LogTag, "AppCenter.LogLevel=" + AppCenter.LogLevel);
@@ -62,6 +60,10 @@ protected override void OnCreate(Bundle savedInstanceState)
{
AppCenter.SetMaxStorageSizeAsync(storageSizeValue);
}
+ if (prefs.GetBoolean(Constants.EnableManualSessionTrackerKey, false))
+ {
+ Analytics.EnableManualSessionTracker();
+ }
Distribute.SetInstallUrl("https://install.portal-server-core-integration.dev.avalanch.es");
Distribute.SetApiUrl("https://asgard-int.trafficmanager.net/api/v0.1");
AppCenter.Start("bff0949b-7970-439d-9745-92cdc59b10fe", typeof(Analytics), typeof(Crashes), typeof(Distribute));
@@ -158,5 +160,33 @@ bool OnReleaseAvailable(ReleaseDetails releaseDetails)
}
return custom;
}
+
+ public bool OnNavigationItemSelected(IMenuItem item)
+ {
+ switch (item.ItemId)
+ {
+ case Resource.Id.navigation_core:
+ UpdateFragment(new AppCenterFragment(), Resource.String.AppCenterTitle);
+ return true;
+ case Resource.Id.navigation_analytics:
+ UpdateFragment(new AnalyticsFragment(), Resource.String.AnalyticsTitle);
+ return true;
+ case Resource.Id.navigation_crashes:
+ UpdateFragment(new CrashesFragment(), Resource.String.CrashesTitle);
+ return true;
+ case Resource.Id.navigation_other:
+ UpdateFragment(new OthersFragment(), Resource.String.OthersTitle);
+ return true;
+ }
+ return false;
+ }
+
+ private void UpdateFragment(PageFragment page, int titleId)
+ {
+ Title = Resources.GetString(titleId);
+ SupportFragmentManager.BeginTransaction()
+ .Replace(Resource.Id.content_frame, page)
+ .Commit();
+ }
}
}
diff --git a/Apps/Contoso.Android.Puppet/ModulePages/AnalyticsFragment.cs b/Apps/Contoso.Android.Puppet/ModulePages/AnalyticsFragment.cs
index 6471c5410..440bb63aa 100644
--- a/Apps/Contoso.Android.Puppet/ModulePages/AnalyticsFragment.cs
+++ b/Apps/Contoso.Android.Puppet/ModulePages/AnalyticsFragment.cs
@@ -13,17 +13,19 @@
namespace Contoso.Android.Puppet
{
- using AlertDialog = global::Android.Support.V7.App.AlertDialog;
+ using AlertDialog = global::Android.App.AlertDialog;
public class AnalyticsFragment : PageFragment
{
private readonly IDictionary mEventProperties = new Dictionary();
private Switch AnalyticsEnabledSwitch;
+ private Switch EnableManualSessionTrackerSwitch;
private EditText EventNameText;
private TextView PropertiesCountLabel;
private Button AddPropertyButton;
private Button TrackEventButton;
+ private Button StartSessionButton;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
@@ -36,16 +38,20 @@ public override void OnViewCreated(View view, Bundle savedInstanceState)
// Find views.
AnalyticsEnabledSwitch = view.FindViewById(Resource.Id.enabled_analytics) as Switch;
+ EnableManualSessionTrackerSwitch = view.FindViewById(Resource.Id.enable_manual_session_tracker_switch) as Switch;
EventNameText = view.FindViewById(Resource.Id.event_name) as EditText;
PropertiesCountLabel = view.FindViewById(Resource.Id.properties_count) as TextView;
AddPropertyButton = view.FindViewById(Resource.Id.add_property) as Button;
TrackEventButton = view.FindViewById(Resource.Id.track_event) as Button;
+ StartSessionButton = view.FindViewById(Resource.Id.start_session_button) as Button;
// Subscribe to events.
AnalyticsEnabledSwitch.CheckedChange += UpdateEnabled;
+ EnableManualSessionTrackerSwitch.CheckedChange += EnableManualSessionUpdate;
((View)PropertiesCountLabel.Parent).Click += Properties;
AddPropertyButton.Click += AddProperty;
TrackEventButton.Click += TrackEvent;
+ StartSessionButton.Click += StartSessionButtonClick;
UpdateState();
}
@@ -57,6 +63,12 @@ protected override async void UpdateState()
AnalyticsEnabledSwitch.Checked = await Analytics.IsEnabledAsync();
AnalyticsEnabledSwitch.Enabled = await AppCenter.IsEnabledAsync();
AnalyticsEnabledSwitch.CheckedChange += UpdateEnabled;
+ EnableManualSessionTrackerSwitch.CheckedChange -= EnableManualSessionUpdate;
+
+ // Set manual session tracker value.
+ var prefs = Context.GetSharedPreferences("AppCenter", FileCreationMode.Private);
+ EnableManualSessionTrackerSwitch.Checked = prefs.GetBoolean(Constants.EnableManualSessionTrackerKey, false);
+ EnableManualSessionTrackerSwitch.CheckedChange += EnableManualSessionUpdate;
PropertiesCountLabel.Text = mEventProperties.Count.ToString();
}
@@ -103,5 +115,18 @@ private void TrackEvent(object sender, EventArgs e)
mEventProperties.Clear();
PropertiesCountLabel.Text = mEventProperties.Count.ToString();
}
+
+ private void EnableManualSessionUpdate(object sender, CompoundButton.CheckedChangeEventArgs e)
+ {
+ var prefs = Context.GetSharedPreferences("AppCenter", FileCreationMode.Private);
+ var prefEditor = prefs.Edit();
+ prefEditor.PutBoolean(Constants.EnableManualSessionTrackerKey, e.IsChecked);
+ prefEditor.Commit();
+ }
+
+ private void StartSessionButtonClick(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.Android.Puppet/ModulePages/PageFragment.cs b/Apps/Contoso.Android.Puppet/ModulePages/PageFragment.cs
index 232b42a12..7a01fb5ba 100644
--- a/Apps/Contoso.Android.Puppet/ModulePages/PageFragment.cs
+++ b/Apps/Contoso.Android.Puppet/ModulePages/PageFragment.cs
@@ -1,7 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
-using Android.Support.V4.App;
+using AndroidX.Fragment.App;
namespace Contoso.Android.Puppet
{
diff --git a/Apps/Contoso.Android.Puppet/PagerAdapter.cs b/Apps/Contoso.Android.Puppet/PagerAdapter.cs
index b2f4a358c..ed51d6a25 100644
--- a/Apps/Contoso.Android.Puppet/PagerAdapter.cs
+++ b/Apps/Contoso.Android.Puppet/PagerAdapter.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT License.
using Android.Content;
-using Android.Support.V4.App;
+using AndroidX.Fragment.App;
using Java.Lang;
namespace Contoso.Android.Puppet
diff --git a/Apps/Contoso.Android.Puppet/Properties/AndroidManifest.xml b/Apps/Contoso.Android.Puppet/Properties/AndroidManifest.xml
index 655d6bfd4..2fdb6f689 100644
--- a/Apps/Contoso.Android.Puppet/Properties/AndroidManifest.xml
+++ b/Apps/Contoso.Android.Puppet/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/Apps/Contoso.Android.Puppet/Properties/AssemblyInfo.cs b/Apps/Contoso.Android.Puppet/Properties/AssemblyInfo.cs
index da3e1965e..fb58e0ea1 100644
--- a/Apps/Contoso.Android.Puppet/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Android.Puppet/Properties/AssemblyInfo.cs
@@ -28,5 +28,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
diff --git a/Apps/Contoso.Android.Puppet/Resources/layout/Analytics.axml b/Apps/Contoso.Android.Puppet/Resources/layout/Analytics.axml
index bc3e6f0a9..6979cf08c 100644
--- a/Apps/Contoso.Android.Puppet/Resources/layout/Analytics.axml
+++ b/Apps/Contoso.Android.Puppet/Resources/layout/Analytics.axml
@@ -14,6 +14,7 @@
android:orientation="vertical"
android:padding="8dp">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Android.Puppet/Resources/layout/Main.axml b/Apps/Contoso.Android.Puppet/Resources/layout/Main.axml
index 153908079..58dbcc8fb 100644
--- a/Apps/Contoso.Android.Puppet/Resources/layout/Main.axml
+++ b/Apps/Contoso.Android.Puppet/Resources/layout/Main.axml
@@ -1,31 +1,25 @@
-
-
-
-
-
-
+
+
-
\ No newline at end of file
+ android:layout_height="wrap_content"
+ android:background="?android:attr/windowBackground"
+ android:layout_alignParentBottom="true"
+ app:menu="@menu/navigation" />
+
\ No newline at end of file
diff --git a/Apps/Contoso.Android.Puppet/Resources/menu/navigation.xml b/Apps/Contoso.Android.Puppet/Resources/menu/navigation.xml
new file mode 100644
index 000000000..868a3867f
--- /dev/null
+++ b/Apps/Contoso.Android.Puppet/Resources/menu/navigation.xml
@@ -0,0 +1,28 @@
+
\ No newline at end of file
diff --git a/Apps/Contoso.Android.Puppet/Resources/values/Strings.xml b/Apps/Contoso.Android.Puppet/Resources/values/Strings.xml
index 542a8b21b..ee2ae77e2 100644
--- a/Apps/Contoso.Android.Puppet/Resources/values/Strings.xml
+++ b/Apps/Contoso.Android.Puppet/Resources/values/Strings.xml
@@ -41,4 +41,6 @@
Cancel
Save
Change Storage Size
+ Enable Manual Session Tracker
+ Start Session
\ No newline at end of file
diff --git a/Apps/Contoso.Android.Puppet/Resources/values/styles.xml b/Apps/Contoso.Android.Puppet/Resources/values/styles.xml
index 694283d1d..5832b859e 100644
--- a/Apps/Contoso.Android.Puppet/Resources/values/styles.xml
+++ b/Apps/Contoso.Android.Puppet/Resources/values/styles.xml
@@ -4,10 +4,6 @@
-
diff --git a/Apps/Contoso.Android.Puppet/packages.config b/Apps/Contoso.Android.Puppet/packages.config
index 45a8d4e67..c23bbb36e 100644
--- a/Apps/Contoso.Android.Puppet/packages.config
+++ b/Apps/Contoso.Android.Puppet/packages.config
@@ -3,18 +3,46 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Contoso.Forms.Demo.Droid.csproj b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Contoso.Forms.Demo.Droid.csproj
index b42805055..9db88cc17 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Contoso.Forms.Demo.Droid.csproj
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Contoso.Forms.Demo.Droid.csproj
@@ -42,7 +42,7 @@
4
true
Full
- Xamarin.Android.Support.v7.AppCompat;Xamarin.Android.Support.Core.UI;Microsoft.AppCenter.Crashes
+ Microsoft.AppCenter.Crashes
true
armeabi-v7a;x86;arm64-v8a;x86_64
true
@@ -70,15 +70,15 @@
-
+
-
+
-
-
-
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AndroidManifest.xml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AndroidManifest.xml
index d49f5ec1d..188611f6e 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AndroidManifest.xml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AssemblyInfo.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AssemblyInfo.cs
index a93663106..3ab55c4d3 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Properties/AssemblyInfo.cs
@@ -22,8 +22,8 @@
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Tabbar.axml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Tabbar.axml
index 0bc7e9db6..6c8a9d134 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Tabbar.axml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Tabbar.axml
@@ -1,2 +1,2 @@
-
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Toolbar.axml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Toolbar.axml
index d685cbadb..8c1bf7e63 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Toolbar.axml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.Droid/Resources/layout/Toolbar.axml
@@ -1,2 +1,2 @@
-
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/AppDelegate.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/AppDelegate.cs
new file mode 100644
index 000000000..985896765
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/AppDelegate.cs
@@ -0,0 +1,46 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+using Foundation;
+using Xamarin.Forms.Platform.MacOS;
+
+namespace Contoso.Forms.Demo.MacOS
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : FormsApplicationDelegate, IClearCrashClick
+ {
+ private const string CrashesUserConfirmationStorageKey = "MSAppCenterCrashesUserConfirmation";
+ private const string ApplicationCrashOnExceptionsKey = "NSApplicationCrashOnExceptions";
+
+ NSPanel window;
+ public AppDelegate()
+ {
+ var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;
+ var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
+ window = new NSPanel(rect, style, NSBackingStore.Buffered, false);
+ window.Title = "App Center Xamarin.Forms on Mac!";
+ window.TitleVisibility = NSWindowTitleVisibility.Hidden;
+ var plist = NSUserDefaults.StandardUserDefaults;
+ var dictionary = new NSDictionary(NSObject.FromObject(true), new NSString(ApplicationCrashOnExceptionsKey));
+ plist.RegisterDefaults(dictionary);
+ }
+
+ public override NSWindow MainWindow
+ {
+ get { return window; }
+ }
+
+ public override void DidFinishLaunching(NSNotification notification)
+ {
+ Xamarin.Forms.Forms.Init();
+ LoadApplication(new App());
+ base.DidFinishLaunching(notification);
+ }
+
+ public void ClearCrashButton()
+ {
+ NSUserDefaults.StandardUserDefaults.RemoveObject(CrashesUserConfirmationStorageKey);
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
new file mode 100644
index 000000000..d0b5a8098
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
new file mode 100644
index 000000000..ebb5a0fe4
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
new file mode 100644
index 000000000..412d6ca9b
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
new file mode 100644
index 000000000..e99022ae8
Binary files /dev/null and b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..6b2854529
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images": [
+ {
+ "filename": "AppIcon-16.png",
+ "size": "16x16",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-16@2x.png",
+ "size": "16x16",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32.png",
+ "size": "32x32",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32@2x.png",
+ "size": "32x32",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128.png",
+ "size": "128x128",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128@2x.png",
+ "size": "128x128",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256.png",
+ "size": "256x256",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256@2x.png",
+ "size": "256x256",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512.png",
+ "size": "512x512",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512@2x.png",
+ "size": "512x512",
+ "scale": "2x",
+ "idiom": "mac"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/Contents.json b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/Contents.json
new file mode 100644
index 000000000..4caf392f9
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Contoso.Forms.Demo.MacOS.csproj b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Contoso.Forms.Demo.MacOS.csproj
new file mode 100644
index 000000000..4303a848e
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Contoso.Forms.Demo.MacOS.csproj
@@ -0,0 +1,131 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {85B05946-0E5A-4AFE-88E8-079D6AA9D3D6}
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Exe
+ Contoso.Forms.Demo.MacOS
+ Contoso.Forms.Demo.MacOS
+ v2.0
+ Xamarin.Mac
+ Resources
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ Mac Developer
+ false
+ false
+ false
+ true
+ true
+ true
+
+
+
+ pdbonly
+ true
+ bin\Release
+
+ prompt
+ 4
+ false
+ true
+ false
+ true
+ true
+ true
+ Entitlements.plist
+ SdkOnly
+
+
+
+
+
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2125\lib\Xamarin.Mac\Xamarin.Forms.Core.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2125\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2125\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2125\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.Crashes.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.Crashes.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.Analytics.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.Analytics.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.MacOS.Bindings.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.Analytics.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.Analytics.MacOS.Bindings.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.Crashes.4.4.1-r0007-917b739\lib\Xamarin.Mac\Microsoft.AppCenter.Crashes.MacOS.Bindings.dll
+
+
+ ..\..\..\packages\Microsoft.AppCenter.DistributePlay.4.4.1-r0007-917b739\lib\netstandard1.0\Microsoft.AppCenter.Distribute.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ViewController.cs
+
+
+
+
+
+
+
+
+ {8E7B51FC-8A9B-49F7-A40D-4D12BBF893B6}
+ Contoso.Forms.Demo
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Entitlements.plist b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Entitlements.plist
new file mode 100644
index 000000000..9ae599370
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/FilePicker.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/FilePicker.cs
new file mode 100644
index 000000000..5e10d83d3
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/FilePicker.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Contoso.Forms.Demo.MacOS;
+using Foundation;
+using MobileCoreServices;
+using Xamarin.Forms;
+
+// Make this class visible to the DependencyService manager.
+[assembly: Dependency(typeof(FilePicker))]
+
+namespace Contoso.Forms.Demo.MacOS
+{
+ public class FilePicker : IFilePicker
+ {
+ private string mockUri = "file://mock.url";
+
+ public FilePicker()
+ {
+ }
+
+ public string GetFileDescription(string file)
+ {
+ if (string.IsNullOrEmpty(file))
+ {
+ return null;
+ }
+ var fileSize = file.Length;
+ return NSByteCountFormatter.Format(fileSize, NSByteCountFormatterCountStyle.Binary);
+ }
+
+ public async Task PickFile()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+ taskCompletionSource.SetResult(mockUri);
+ return await taskCompletionSource.Task;
+ }
+
+ public Tuple ReadFile(string file)
+ {
+ var dataUti = file;
+ var data = new NSData(file, NSDataBase64DecodingOptions.None);
+ var extension = "txt";
+ var uti = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
+ var mime = UTType.GetPreferredTag(uti, UTType.TagClassMIMEType);
+ var dataBytes = new byte[data.Length];
+ Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
+ var result = new Tuple(dataBytes, dataUti, mime);
+ return result;
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Info.plist b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Info.plist
new file mode 100644
index 000000000..adea040c5
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleName
+ Contoso.Forms.Demo.MacOS
+ CFBundleIdentifier
+ com.microsoft.appcenter.Contoso-Forms-Demo-MacOS
+ CFBundleShortVersionString
+ 4.5.0
+ CFBundleVersion
+ 4.5.0
+ LSMinimumSystemVersion
+ 10.14
+ CFBundleDevelopmentRegion
+ en
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ NSHumanReadableCopyright
+ ${AuthorCopyright:HtmlEncode}
+ NSPrincipalClass
+ NSApplication
+ NSMainStoryboardFile
+ Main
+ XSAppIconAssets
+ Assets.xcassets/AppIcon.appiconset
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.cs
new file mode 100644
index 000000000..27ef00964
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+
+namespace Contoso.Forms.Demo.MacOS
+{
+ static class MainClass
+ {
+ static void Main(string[] args)
+ {
+ NSApplication.Init();
+ NSApplication.SharedApplication.Delegate = new AppDelegate(); // add this line
+ NSApplication.Main(args);
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.storyboard b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.storyboard
new file mode 100644
index 000000000..7562e1f6e
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/Main.storyboard
@@ -0,0 +1,719 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.cs
new file mode 100644
index 000000000..44cc84bbb
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.cs
@@ -0,0 +1,37 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+
+using AppKit;
+using Foundation;
+
+namespace Contoso.Forms.Demo.MacOS
+{
+ public partial class ViewController : NSViewController
+ {
+ public ViewController(IntPtr handle) : base(handle)
+ {
+ }
+
+ public override void ViewDidLoad()
+ {
+ base.ViewDidLoad();
+
+ // Do any additional setup after loading the view.
+ }
+
+ public override NSObject RepresentedObject
+ {
+ get
+ {
+ return base.RepresentedObject;
+ }
+ set
+ {
+ base.RepresentedObject = value;
+ // Update the view, if already loaded.
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.designer.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.designer.cs
new file mode 100644
index 000000000..7134d1cbb
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/ViewController.designer.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+
+namespace Contoso.Forms.Demo.MacOS
+{
+ [Register("ViewController")]
+ partial class ViewController
+ {
+ void ReleaseDesignerOutlets()
+ {
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/packages.config b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/packages.config
new file mode 100644
index 000000000..fce798afd
--- /dev/null
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.MacOS/packages.config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Contoso.Forms.Demo.UWP.csproj b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Contoso.Forms.Demo.UWP.csproj
index d3f11baab..5df92200f 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Contoso.Forms.Demo.UWP.csproj
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Contoso.Forms.Demo.UWP.csproj
@@ -135,9 +135,9 @@
-
-
-
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Package.appxmanifest b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Package.appxmanifest
index 55a2135e4..19df8894e 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Package.appxmanifest
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Package.appxmanifest
@@ -1,6 +1,6 @@
-
+
AppCenter-Contoso.Forms.Demo.UWP
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Properties/AssemblyInfo.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Properties/AssemblyInfo.cs
index db29932c5..63840250c 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.UWP/Properties/AssemblyInfo.cs
@@ -27,5 +27,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
[assembly: ComVisible(false)]
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Contoso.Forms.Demo.iOS.csproj b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Contoso.Forms.Demo.iOS.csproj
index b14f226cb..90d832d22 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Contoso.Forms.Demo.iOS.csproj
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Contoso.Forms.Demo.iOS.csproj
@@ -87,10 +87,10 @@
-
-
-
-
+
+
+
+
@@ -120,7 +120,6 @@
-
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Info.plist b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Info.plist
index 4c6749a17..5a77834da 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Info.plist
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Info.plist
@@ -5,7 +5,7 @@
CFBundleIdentifier
com.microsoft.appcenter.xamarin.forms.ios.demo
CFBundleVersion
- 4.4.0
+ 4.5.0
LSRequiresIPhoneOS
MinimumOSVersion
@@ -39,7 +39,7 @@
CFBundleName
ACFDemo
CFBundleShortVersionString
- 4.4.0
+ 4.5.0
CFBundleURLTypes
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Resources/customProperties@2x.png b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Resources/customProperties@2x.png
deleted file mode 100644
index 8c5e50b5f..000000000
Binary files a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo.iOS/Resources/customProperties@2x.png and /dev/null differ
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/AddPropertyContentPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/AddPropertyContentPage.xaml
index d517f34b4..e17756524 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/AddPropertyContentPage.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/AddPropertyContentPage.xaml
@@ -2,16 +2,16 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/App.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/App.xaml.cs
index 9dbf81899..00723aa93 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/App.xaml.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/App.xaml.cs
@@ -22,6 +22,7 @@ public interface IClearCrashClick
public partial class App
{
public const string LogTag = "AppCenterXamarinDemo";
+ private Task dialog = null;
// OneCollector secrets
static readonly IReadOnlyDictionary OneCollectorTokens = new Dictionary
@@ -34,7 +35,8 @@ public partial class App
{
{ XamarinDevice.UWP, "5bce20c8-f00b-49ca-8580-7a49d5705d4c" },
{ XamarinDevice.Android, "987b5941-4fac-4968-933e-98a7ff29237c" },
- { XamarinDevice.iOS, "fe2bf05d-f4f9-48a6-83d9-ea8033fbb644" }
+ { XamarinDevice.iOS, "fe2bf05d-f4f9-48a6-83d9-ea8033fbb644" },
+ { XamarinDevice.macOS, "f4b8380f-710c-40b9-a494-f351510e3123" }
};
public App()
@@ -65,6 +67,21 @@ protected override void OnStart()
Crashes.SentErrorReport += SentErrorReportHandler;
Crashes.FailedToSendErrorReport += FailedToSendErrorReportHandler;
+ // Country code.
+ if (Current.Properties.ContainsKey(Constants.CountryCode)
+ && Current.Properties[Constants.CountryCode] is string countryCode)
+ {
+ AppCenter.SetCountryCode(countryCode);
+ }
+
+ // Manual session tracker.
+ if (Current.Properties.ContainsKey(Constants.EnableManualSessionTracker)
+ && Current.Properties[Constants.EnableManualSessionTracker] is bool isEnabled
+ && isEnabled)
+ {
+ Analytics.EnableManualSessionTracker();
+ }
+
AppCenterLog.Assert(LogTag, "AppCenter.Configured=" + AppCenter.Configured);
var updateTrack = TrackUpdateUtils.GetPersistedUpdateTrack();
@@ -112,7 +129,7 @@ private string GetOneCollectorTokenString()
private string GetAppCenterTokenString()
{
- return $"uwp={AppSecrets[XamarinDevice.UWP]};android={AppSecrets[XamarinDevice.Android]};ios={AppSecrets[XamarinDevice.iOS]}";
+ return $"uwp={AppSecrets[XamarinDevice.UWP]};android={AppSecrets[XamarinDevice.Android]};ios={AppSecrets[XamarinDevice.iOS]};macos={AppSecrets[XamarinDevice.macOS]}";
}
private string GetTokensString()
@@ -154,7 +171,15 @@ bool ConfirmationHandler()
{
XamarinDevice.BeginInvokeOnMainThread(() =>
{
- Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", null, null, "Send", "Always Send", "Don't Send").ContinueWith((arg) =>
+ if (XamarinDevice.RuntimePlatform == XamarinDevice.macOS)
+ {
+ dialog = Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", "Send", "Always Send");
+ }
+ else
+ {
+ Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", null, null, "Send", "Always Send", "Don't Send");
+ }
+ dialog.ContinueWith((arg) =>
{
var answer = arg.Result;
UserConfirmation userConfirmationSelection;
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Constants.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Constants.cs
index 3538294e1..54babd80e 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Constants.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Constants.cs
@@ -11,5 +11,7 @@ public static class Constants
public const string UpdateTrackKey = "update-track";
public const string AutomaticUpdateCheckKey = "automatic-update-check";
public const string StorageMaxSize = "storage-max-size";
+ public const string EnableManualSessionTracker = "enable-manual-session-tracker";
+ public const string CountryCode = "country-code";
}
}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Contoso.Forms.Demo.csproj b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Contoso.Forms.Demo.csproj
index 0803ef3a8..469388004 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Contoso.Forms.Demo.csproj
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Contoso.Forms.Demo.csproj
@@ -4,9 +4,9 @@
netstandard2.0
Microsoft Corp. All rights reserved.
Microsoft Corporation
- 4.4.0
+ 4.5.0
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
Debug;Release;GooglePlay
@@ -20,16 +20,16 @@
false
-
+
-
+
-
-
+
+
-
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/MainDemoPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/MainDemoPage.xaml
index d93120e4e..691042c4b 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/MainDemoPage.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/MainDemoPage.xaml
@@ -7,6 +7,5 @@
-
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml
index c58ba8296..f4d656484 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml
@@ -3,24 +3,38 @@
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Contoso.Forms.Demo.AnalyticsContentPage">
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml.cs
index 04b39cb8d..86360c62e 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AnalyticsContentPage.xaml.cs
@@ -30,8 +30,18 @@ public AnalyticsContentPage()
protected override async void OnAppearing()
{
base.OnAppearing();
- EnabledSwitchCell.On = await Analytics.IsEnabledAsync();
+ EnabledSwitchCell.IsToggled = await Analytics.IsEnabledAsync();
EnabledSwitchCell.IsEnabled = await AppCenter.IsEnabledAsync();
+ if (Application.Current.Properties.ContainsKey(Constants.CountryCode)
+ && Application.Current.Properties[Constants.CountryCode] is string countryCode)
+ {
+ CountryCodeText.Text = countryCode;
+ }
+ if (Application.Current.Properties.ContainsKey(Constants.EnableManualSessionTracker)
+ && Application.Current.Properties[Constants.EnableManualSessionTracker] is bool isEnabled)
+ {
+ EnableManualSessionTrackerSwitch.IsToggled = isEnabled;
+ }
}
async void AddProperty(object sender, EventArgs e)
@@ -83,5 +93,22 @@ void RefreshPropCount()
{
NumPropertiesLabel.Text = EventProperties.Count.ToString();
}
+
+ void EnableManualSessionTrackerCellEnabled(object sender, ToggledEventArgs e)
+ {
+ Application.Current.Properties[Constants.EnableManualSessionTracker] = e.Value;
+ _ = Application.Current.SavePropertiesAsync();
+ }
+
+ void StartSessionButton_Clicked(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
+
+ void SaveCountryCode_Clicked(object sender, EventArgs e)
+ {
+ Application.Current.Properties[Constants.CountryCode] = CountryCodeText.Text;
+ _ = Application.Current.SavePropertiesAsync();
+ }
}
}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml
index a572804b4..17540ce49 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml
@@ -1,33 +1,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml.cs
index b8b107531..e85337d94 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/AppCenterContentPage.xaml.cs
@@ -32,8 +32,8 @@ public AppCenterContentPage()
protected override async void OnAppearing()
{
base.OnAppearing();
- AppCenterEnabledSwitchCell.On = await AppCenter.IsEnabledAsync();
- AllowedNetworkRequestSwitchCell.On = AppCenter.IsNetworkRequestsAllowed;
+ AppCenterEnabledSwitchCell.IsToggled = await AppCenter.IsEnabledAsync();
+ AllowedNetworkRequestSwitchCell.IsToggled = AppCenter.IsNetworkRequestsAllowed;
if (Application.Current.Properties.ContainsKey(Constants.UserId) && Application.Current.Properties[Constants.UserId] is string id)
{
UserIdEntry.Text = id;
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml
index 5088c5f5b..d281d4fd1 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml
@@ -1,72 +1,49 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml.cs
index 35fb36c3b..067d9d3fe 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CrashesContentPage.xaml.cs
@@ -119,7 +119,7 @@ async void PropertiesCellTapped(object sender, EventArgs e)
async void RefreshEnabled()
{
- CrashesEnabledSwitchCell.On = await Crashes.IsEnabledAsync();
+ CrashesEnabledSwitchCell.IsToggled = await Crashes.IsEnabledAsync();
CrashesEnabledSwitchCell.IsEnabled = await AppCenter.IsEnabledAsync();
}
@@ -134,7 +134,7 @@ void HandleOrThrow(Action action)
{
action();
}
- catch (Exception e) when (HandleExceptionsSwitchCell.On)
+ catch (Exception e) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(e);
}
@@ -229,7 +229,7 @@ public async void AsyncException(object sender, EventArgs e)
{
await FakeService.DoStuffInBackground();
}
- catch (Exception ex) when (HandleExceptionsSwitchCell.On)
+ catch (Exception ex) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(ex);
}
@@ -241,7 +241,7 @@ public void ClassLibException(object sender, EventArgs e)
{
CrashUtils.BackgroundExceptionTask().RunSynchronously();
}
- catch (Exception ex) when (HandleExceptionsSwitchCell.On)
+ catch (Exception ex) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(ex);
}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml
deleted file mode 100644
index 432385a5d..000000000
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml.cs
deleted file mode 100644
index 86fcf3b00..000000000
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/ModulePages/CustomPropertiesContentPage.xaml.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Microsoft.AppCenter;
-using Xamarin.Forms;
-
-namespace Contoso.Forms.Demo
-{
- [Android.Runtime.Preserve(AllMembers = true)]
- public partial class CustomPropertiesContentPage : ContentPage
- {
- public CustomPropertiesContentPage()
- {
- InitializeComponent();
- if (Xamarin.Forms.Device.RuntimePlatform == Xamarin.Forms.Device.iOS)
- {
- Icon = "customProperties.png";
- }
- AddNewProperty();
- }
-
- public void AddNewProperty()
- {
- PropertiesContainer.Children.Add(new CustomPropertyView());
- }
-
- private void AddProperty_Clicked(object sender, EventArgs e)
- {
- AddNewProperty();
- }
-
- private void Send_Clicked(object sender, EventArgs e)
- {
- CustomProperties customProperties = new CustomProperties();
- foreach(var customProperty in PropertiesContainer.Children)
- {
- (customProperty as CustomPropertyView).AddCustomProperty(customProperties);
- }
- AppCenter.SetCustomProperties(customProperties);
- }
- }
-}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml
deleted file mode 100644
index d0c4b4bc0..000000000
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml.cs b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml.cs
deleted file mode 100644
index 544c87964..000000000
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/CustomPropertyView.xaml.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Microsoft.AppCenter;
-using Xamarin.Forms;
-
-namespace Contoso.Forms.Demo
-{
- [Android.Runtime.Preserve(AllMembers = true)]
- public partial class CustomPropertyView : ContentView
- {
- private enum PropertyTypes { Clear = 0, Boolean, Number, DateTime, String };
-
- private DatePicker DatePicker;
- private TimePicker TimePicker;
-
- public CustomPropertyView()
- {
- InitializeComponent();
- InitializePropertyType();
- }
-
- public void AddCustomProperty(CustomProperties properties)
- {
- if ((PropertyTypes)PropertyType.SelectedIndex == PropertyTypes.Clear)
- {
- properties.Clear(PropertyKey.Text);
- }
- else
- {
- View view = PropertyValueHolder.Children[0];
- switch ((PropertyTypes)PropertyType.SelectedIndex)
- {
- case PropertyTypes.Boolean:
- properties.Set(PropertyKey.Text, (view as Switch).IsToggled);
- break;
- case PropertyTypes.Number:
- if (!string.IsNullOrWhiteSpace((view as Editor).Text))
- {
- properties.Set(PropertyKey.Text, long.Parse((view as Editor).Text));
- }
- break;
- case PropertyTypes.DateTime:
- DateTime date = new DateTime(DatePicker.Date.Year, DatePicker.Date.Month, DatePicker.Date.Day,
- TimePicker.Time.Hours, TimePicker.Time.Minutes, TimePicker.Time.Seconds);
- properties.Set(PropertyKey.Text, date);
- break;
- case PropertyTypes.String:
- properties.Set(PropertyKey.Text, (view as Editor).Text);
- break;
- }
- }
- }
-
- private void InitializePropertyType()
- {
- foreach (PropertyTypes propertyType in Enum.GetValues(typeof(PropertyTypes)))
- {
- PropertyType.Items.Add(propertyType.ToString());
- }
- PropertyType.SelectedIndex = 0;
- }
-
- private void PropertyType_SelectedIndexChanged(object sender, EventArgs e)
- {
- PropertyValueHolder.Children.Clear();
- PropertyValue.IsVisible = false;
- switch ((PropertyTypes) PropertyType.SelectedIndex)
- {
- case PropertyTypes.Boolean:
- PropertyValueHolder.Children.Add(new Switch());
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.Number:
- Editor NumberEditor = new Editor() { Keyboard = Keyboard.Numeric };
- NumberEditor.TextChanged += NumberEditor_TextChanged;
- PropertyValueHolder.Children.Add(NumberEditor);
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.DateTime:
- StackLayout DateTimeLayout = new StackLayout() { Orientation = StackOrientation.Vertical };
- DatePicker = new DatePicker() { Date = DateTime.Now };
- DateTimeLayout.Children.Add(DatePicker);
- TimePicker = new TimePicker() { Time = DateTime.Now.TimeOfDay };
- DateTimeLayout.Children.Add(TimePicker);
- PropertyValueHolder.Children.Add(DateTimeLayout);
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.String:
- PropertyValueHolder.Children.Add(new Editor());
- PropertyValue.IsVisible = true;
- break;
- }
- }
-
- private void NumberEditor_TextChanged(object sender, TextChangedEventArgs e)
- {
- if (string.IsNullOrWhiteSpace(e.NewTextValue))
- {
- return;
- }
- long newValue;
- if (!long.TryParse(e.NewTextValue, out newValue))
- {
- ((Editor)sender).Text = e.OldTextValue;
- }
- }
- }
-}
diff --git a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/TextAttachmentView.xaml b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/TextAttachmentView.xaml
index 7f15b99cb..990cad8da 100644
--- a/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/TextAttachmentView.xaml
+++ b/Apps/Contoso.Forms.Demo/Contoso.Forms.Demo/Views/TextAttachmentView.xaml
@@ -2,14 +2,14 @@
-
-
+
+
-
-
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Contoso.Forms.Puppet.Droid.csproj b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Contoso.Forms.Puppet.Droid.csproj
index f8366cf21..e065f40cd 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Contoso.Forms.Puppet.Droid.csproj
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Contoso.Forms.Puppet.Droid.csproj
@@ -1,5 +1,6 @@
+
@@ -10,7 +11,7 @@
Library
Contoso.Forms.Puppet.Droid
Contoso.Forms.Puppet.Droid
- v9.0
+ v11.0
True
Resources\Resource.designer.cs
Resource
@@ -43,7 +44,7 @@
4
true
Full
- Xamarin.Android.Support.v7.AppCompat;Xamarin.Android.Support.Core.UI;Microsoft.AppCenter.Crashes
+ Microsoft.AppCenter.Crashes
true
armeabi-v7a;x86;arm64-v8a;x86_64
true
@@ -58,7 +59,7 @@
4
true
Full
- Xamarin.Android.Support.v7.AppCompat;Xamarin.Android.Support.Core.UI;Microsoft.AppCenter.Crashes
+ Microsoft.AppCenter.Crashes
true
armeabi-v7a;x86;arm64-v8a;x86_64
true
@@ -92,116 +93,173 @@
..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll
+
+ ..\..\..\packages\Xamarin.Google.AutoValue.Annotations.1.6.5\lib\monoandroid80\Xamarin.Google.AutoValue.Annotations.dll
+
+
+ ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Annotation.Experimental.1.0.0.9\lib\monoandroid90\Xamarin.AndroidX.Annotation.Experimental.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.MultiDex.2.0.1.5\lib\monoandroid90\Xamarin.AndroidX.MultiDex.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Annotation.1.1.0.9\lib\monoandroid90\Xamarin.AndroidX.Annotation.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.8\lib\monoandroid90\Xamarin.AndroidX.Arch.Core.Common.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.7\lib\monoandroid90\Xamarin.AndroidX.Arch.Core.Runtime.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.CardView.1.0.0.6\lib\monoandroid90\Xamarin.AndroidX.CardView.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Collection.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.Collection.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.CursorAdapter.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.CursorAdapter.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.DocumentFile.1.0.1.7\lib\monoandroid90\Xamarin.AndroidX.DocumentFile.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Interpolator.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.Interpolator.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.Common.2.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.Common.dll
-
- ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.LiveData.Core.dll
-
- ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.LiveData.2.2.0.4\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.LiveData.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.Runtime.dll
-
- ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.ViewModel.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.LocalBroadcastManager.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.LocalBroadcastManager.dll
-
- ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Navigation.Common.2.3.3\lib\monoandroid90\Xamarin.AndroidX.Navigation.Common.dll
-
- ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Print.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.Print.dll
-
- ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.SavedState.1.1.0.1\lib\monoandroid90\Xamarin.AndroidX.SavedState.dll
-
- ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.dll
-
- ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.7\lib\monoandroid90\Xamarin.AndroidX.VersionedParcelable.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Core.1.3.2.3\lib\monoandroid90\Xamarin.AndroidX.Core.dll
-
- ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Activity.1.2.0.1\lib\monoandroid90\Xamarin.AndroidX.Activity.dll
-
- ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.AsyncLayoutInflater.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.AsyncLayoutInflater.dll
-
- ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.CustomView.1.1.0.6\lib\monoandroid90\Xamarin.AndroidX.CustomView.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.CoordinatorLayout.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.CoordinatorLayout.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.DrawerLayout.1.1.1.2\lib\monoandroid90\Xamarin.AndroidX.DrawerLayout.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Loader.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.Loader.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Legacy.Support.Core.Utils.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.Legacy.Support.Core.Utils.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Media.1.2.1.2\lib\monoandroid90\Xamarin.AndroidX.Media.dll
-
- ..\..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Navigation.Runtime.2.3.3\lib\monoandroid90\Xamarin.AndroidX.Navigation.Runtime.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.RecyclerView.1.1.0.8\lib\monoandroid90\Xamarin.AndroidX.RecyclerView.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.SlidingPaneLayout.1.1.0.2\lib\monoandroid90\Xamarin.AndroidX.SlidingPaneLayout.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.SwipeRefreshLayout.1.1.0.2\lib\monoandroid90\Xamarin.AndroidX.SwipeRefreshLayout.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.VectorDrawable.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.VectorDrawable.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.VectorDrawable.Animated.1.1.0.7\lib\monoandroid90\Xamarin.AndroidX.VectorDrawable.Animated.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.AppCompat.AppCompatResources.1.2.0.7\lib\monoandroid90\Xamarin.AndroidX.AppCompat.AppCompatResources.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.ViewPager.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.ViewPager.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Fragment.1.3.0.1\lib\monoandroid90\Xamarin.AndroidX.Fragment.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.AppCompat.1.2.0.7\lib\monoandroid90\Xamarin.AndroidX.AppCompat.dll
-
- ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Legacy.Support.Core.UI.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.Legacy.Support.Core.UI.dll
-
- ..\..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll
+
+ ..\..\..\packages\Xamarin.AndroidX.Legacy.Support.V4.1.0.0.7\lib\monoandroid90\Xamarin.AndroidX.Legacy.Support.V4.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Preference.1.1.1.8\lib\monoandroid90\Xamarin.AndroidX.Preference.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Transition.1.3.1.6\lib\monoandroid90\Xamarin.AndroidX.Transition.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.ViewPager2.1.0.0.8\lib\monoandroid90\Xamarin.AndroidX.ViewPager2.dll
+
+
+ ..\..\..\packages\Xamarin.Google.Android.Material.1.2.1.1\lib\monoandroid90\Xamarin.Google.Android.Material.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Navigation.UI.2.3.2.1\lib\monoandroid90\Xamarin.AndroidX.Navigation.UI.dll
+
+
+ ..\..\..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.2\lib\monoandroid50\Xamarin.Google.Guava.ListenableFuture.dll
+
+
+ ..\..\..\packages\Xamarin.AndroidX.Browser.1.3.0.5\lib\monoandroid90\Xamarin.AndroidX.Browser.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\MonoAndroid10.0\FormsViewGroup.dll
- ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Core.dll
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\MonoAndroid10.0\Xamarin.Forms.Core.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\MonoAndroid10.0\Xamarin.Forms.Platform.Android.dll
- ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Platform.dll
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\MonoAndroid10.0\Xamarin.Forms.Platform.dll
- ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\netstandard2.0\Xamarin.Forms.Xaml.dll
-
-
- ..\..\..\packages\Xamarin.Google.AutoValue.Annotations.1.6.5\lib\monoandroid80\Xamarin.Google.AutoValue.Annotations.dll
-
-
- ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\MonoAndroid10.0\Xamarin.Forms.Xaml.dll
@@ -281,37 +339,55 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AndroidManifest.xml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AndroidManifest.xml
index 9c9287a7a..714e1dcc9 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AndroidManifest.xml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AndroidManifest.xml
@@ -1,7 +1,5 @@
-
-
-
-
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AssemblyInfo.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AssemblyInfo.cs
index 68a38ceac..9825fe1c3 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Properties/AssemblyInfo.cs
@@ -22,8 +22,8 @@
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Tabbar.axml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Tabbar.axml
index 0bc7e9db6..6c8a9d134 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Tabbar.axml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Tabbar.axml
@@ -1,2 +1,2 @@
-
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Toolbar.axml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Toolbar.axml
index d685cbadb..8c1bf7e63 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Toolbar.axml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/Resources/layout/Toolbar.axml
@@ -1,2 +1,2 @@
-
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/packages.config b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/packages.config
index dc571255e..bdb4d7e06 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/packages.config
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.Droid/packages.config
@@ -8,39 +8,57 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/AppDelegate.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/AppDelegate.cs
new file mode 100644
index 000000000..921a495f6
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/AppDelegate.cs
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+using Contoso.Forms.Puppet.MacOS;
+using Foundation;
+using Microsoft.AppCenter;
+using Microsoft.AppCenter.Analytics.MacOS.Bindings;
+using Xamarin.Forms;
+
+[assembly: Dependency(typeof(AppDelegate))]
+namespace Contoso.Forms.Puppet.MacOS
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate, IClearCrashClick
+ {
+ private const string CrashesUserConfirmationStorageKey = "MSAppCenterCrashesUserConfirmation";
+ private const string ApplicationCrashOnExceptionsKey = "NSApplicationCrashOnExceptions";
+
+ NSPanel window;
+ public AppDelegate()
+ {
+ var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;
+ var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
+ window = new NSPanel(rect, style, NSBackingStore.Buffered, false);
+ window.Title = "App Center Xamarin.Forms on Mac!";
+ window.TitleVisibility = NSWindowTitleVisibility.Hidden;
+ var plist = NSUserDefaults.StandardUserDefaults;
+ var dictionary = new NSDictionary(NSObject.FromObject(true), new NSString(ApplicationCrashOnExceptionsKey));
+ plist.RegisterDefaults(dictionary);
+ }
+
+ public override NSWindow MainWindow
+ {
+ get { return window; }
+ }
+
+ public void ClearCrashButton()
+ {
+ NSUserDefaults.StandardUserDefaults.RemoveObject(CrashesUserConfirmationStorageKey);
+ }
+
+ public override void DidFinishLaunching(NSNotification notification)
+ {
+ Xamarin.Forms.Forms.Init();
+ MSACAnalytics.SetDelegate(new AnalyticsDelegate());
+ LoadApplication(new App());
+ base.DidFinishLaunching(notification);
+ }
+
+ public class AnalyticsDelegate : MSACAnalyticsDelegate
+ {
+ public override void WillSendEventLog(MSACAnalytics analytics, MSACEventLog eventLog)
+ {
+ AppCenterLog.Debug(App.LogTag, "Will send event");
+ }
+
+ public override void DidSucceedSendingEventLog(MSACAnalytics analytics, MSACEventLog eventLog)
+ {
+ AppCenterLog.Debug(App.LogTag, "Did send event");
+ }
+
+ public override void DidFailSendingEventLog(MSACAnalytics analytics, MSACEventLog eventLog, NSError error)
+ {
+ AppCenterLog.Debug(App.LogTag, "Failed to send event with error: " + error);
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
new file mode 100644
index 000000000..d0b5a8098
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
new file mode 100644
index 000000000..ebb5a0fe4
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
new file mode 100644
index 000000000..412d6ca9b
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
new file mode 100644
index 000000000..e99022ae8
Binary files /dev/null and b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..6b2854529
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images": [
+ {
+ "filename": "AppIcon-16.png",
+ "size": "16x16",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-16@2x.png",
+ "size": "16x16",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32.png",
+ "size": "32x32",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32@2x.png",
+ "size": "32x32",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128.png",
+ "size": "128x128",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128@2x.png",
+ "size": "128x128",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256.png",
+ "size": "256x256",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256@2x.png",
+ "size": "256x256",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512.png",
+ "size": "512x512",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512@2x.png",
+ "size": "512x512",
+ "scale": "2x",
+ "idiom": "mac"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/Contents.json b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/Contents.json
new file mode 100644
index 000000000..4caf392f9
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Contoso.Forms.Puppet.MacOS.csproj b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Contoso.Forms.Puppet.MacOS.csproj
new file mode 100644
index 000000000..13571be91
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Contoso.Forms.Puppet.MacOS.csproj
@@ -0,0 +1,134 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {C5B1AC34-F9F1-4C05-AF7A-CB84C16C5481}
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Exe
+ Contoso.Forms.Puppet.MacOS
+ Contoso.Forms.Puppet.MacOS
+ v2.0
+ Xamarin.Mac
+ Resources
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ Mac Developer
+ false
+ false
+ false
+ true
+ true
+ true
+
+
+
+ pdbonly
+ true
+ bin\Release
+
+ prompt
+ 4
+ false
+ true
+ false
+ true
+ true
+ true
+ Entitlements.plist
+ SdkOnly
+
+
+
+
+
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\Xamarin.Mac\Xamarin.Forms.Core.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll
+
+
+ ..\..\..\packages\Xamarin.Forms.5.0.0.2012\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ViewController.cs
+
+
+
+
+
+
+
+
+ {92313C69-3BC4-4276-A1C8-100C86183F12}
+ Contoso.Forms.Puppet
+
+
+ {EE438174-EE11-432E-9225-5B4EA80A7917}
+ Microsoft.AppCenter.Analytics.MacOS
+
+
+ {D00918DD-BAC4-4AD4-A866-056CBE780AB2}
+ Microsoft.AppCenter.Analytics.MacOS.Bindings
+
+
+ {0635DC94-08B3-458F-B466-3524132601EB}
+ Microsoft.AppCenter.Crashes.MacOS
+
+
+ {85C929EF-7FF4-4C43-967E-DFA816EFF5E4}
+ Microsoft.AppCenter.Crashes.MacOS.Bindings
+
+
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}
+ Microsoft.AppCenter.MacOS
+
+
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}
+ Microsoft.AppCenter.MacOS.Bindings
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Entitlements.plist b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Entitlements.plist
new file mode 100644
index 000000000..9ae599370
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/FilePicker.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/FilePicker.cs
new file mode 100644
index 000000000..990f251c1
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/FilePicker.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Contoso.Forms.Puppet.MacOS;
+using Foundation;
+using MobileCoreServices;
+using Xamarin.Forms;
+
+// Make this class visible to the DependencyService manager.
+[assembly: Dependency(typeof(FilePicker))]
+
+namespace Contoso.Forms.Puppet.MacOS
+{
+ public class FilePicker : IFilePicker
+ {
+ private string mockUri = "file://mock.url";
+
+ public FilePicker()
+ {
+ }
+
+ public string GetFileDescription(string file)
+ {
+ if (string.IsNullOrEmpty(file))
+ {
+ return null;
+ }
+ var fileSize = file.Length;
+ return NSByteCountFormatter.Format(fileSize, NSByteCountFormatterCountStyle.Binary);
+ }
+
+ public async Task PickFile()
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+ taskCompletionSource.SetResult(mockUri);
+ return await taskCompletionSource.Task;
+ }
+
+ public Tuple ReadFile(string file)
+ {
+ var dataUti = file;
+ var data = new NSData(file, NSDataBase64DecodingOptions.None);
+ var extension = "txt";
+ var uti = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
+ var mime = UTType.GetPreferredTag(uti, UTType.TagClassMIMEType);
+ var dataBytes = new byte[data.Length];
+ Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
+ var result = new Tuple(dataBytes, dataUti, mime);
+ return result;
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Info.plist b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Info.plist
new file mode 100644
index 000000000..aaaabf517
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleName
+ Contoso.Forms.Puppet.MacOS
+ CFBundleIdentifier
+ com.microsoft.appcenter.Contoso-Forms-Puppet-MacOS
+ CFBundleShortVersionString
+ 4.5.0
+ CFBundleVersion
+ 4.5.0
+ LSMinimumSystemVersion
+ 10.14
+ CFBundleDevelopmentRegion
+ en
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ NSHumanReadableCopyright
+ ${AuthorCopyright:HtmlEncode}
+ NSPrincipalClass
+ NSApplication
+ NSMainStoryboardFile
+ Main
+ XSAppIconAssets
+ Assets.xcassets/AppIcon.appiconset
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.cs
new file mode 100644
index 000000000..cbd83a1d4
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+
+namespace Contoso.Forms.Puppet.MacOS
+{
+ static class MainClass
+ {
+ static void Main(string[] args)
+ {
+ NSApplication.Init();
+ NSApplication.SharedApplication.Delegate = new AppDelegate();
+ NSApplication.Main(args);
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.storyboard b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.storyboard
new file mode 100644
index 000000000..c8613936b
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/Main.storyboard
@@ -0,0 +1,719 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+
+
+
+ Left to Right
+
+
+
+
+
+
+ Right to Left
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+
+
+
+ Left to Right
+
+
+
+
+
+
+ Right to Left
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.cs
new file mode 100644
index 000000000..65fd88005
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.cs
@@ -0,0 +1,37 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+
+using AppKit;
+using Foundation;
+
+namespace Contoso.Forms.Puppet.MacOS
+{
+ public partial class ViewController : NSViewController
+ {
+ public ViewController(IntPtr handle) : base(handle)
+ {
+ }
+
+ public override void ViewDidLoad()
+ {
+ base.ViewDidLoad();
+
+ // Do any additional setup after loading the view.
+ }
+
+ public override NSObject RepresentedObject
+ {
+ get
+ {
+ return base.RepresentedObject;
+ }
+ set
+ {
+ base.RepresentedObject = value;
+ // Update the view, if already loaded.
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.designer.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.designer.cs
new file mode 100644
index 000000000..5c6964154
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/ViewController.designer.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+
+namespace Contoso.Forms.Puppet.MacOS
+{
+ [Register("ViewController")]
+ partial class ViewController
+ {
+ void ReleaseDesignerOutlets()
+ {
+ }
+ }
+}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/packages.config b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/packages.config
new file mode 100644
index 000000000..639443105
--- /dev/null
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.MacOS/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Package.appxmanifest b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Package.appxmanifest
index 51ab04f37..d9604fe6f 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Package.appxmanifest
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Package.appxmanifest
@@ -1,6 +1,6 @@
-
+
AppCenter-Contoso.Forms.Puppet.UWP
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Properties/AssemblyInfo.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Properties/AssemblyInfo.cs
index 8f1e4d96e..fcd2b380f 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.UWP/Properties/AssemblyInfo.cs
@@ -27,5 +27,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
[assembly: ComVisible(false)]
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Contoso.Forms.Puppet.iOS.csproj b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Contoso.Forms.Puppet.iOS.csproj
index ce4359d46..717686a4b 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Contoso.Forms.Puppet.iOS.csproj
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Contoso.Forms.Puppet.iOS.csproj
@@ -128,7 +128,6 @@
-
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Info.plist b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Info.plist
index ca2763f8e..3cdb58f57 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Info.plist
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Info.plist
@@ -5,9 +5,9 @@
CFBundleIdentifier
com.microsoft.appcenter.xamarin.forms.ios.puppet
CFBundleShortVersionString
- 4.4.0
+ 4.5.0
CFBundleVersion
- 4.4.0
+ 4.5.0
LSRequiresIPhoneOS
MinimumOSVersion
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Resources/customProperties@2x.png b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Resources/customProperties@2x.png
deleted file mode 100644
index 8c5e50b5f..000000000
Binary files a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet.iOS/Resources/customProperties@2x.png and /dev/null differ
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/AddPropertyContentPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/AddPropertyContentPage.xaml
index bf2bb31fe..ecbc4a5f0 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/AddPropertyContentPage.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/AddPropertyContentPage.xaml
@@ -2,16 +2,16 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/App.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/App.xaml.cs
index 9f620aa53..a5e1eeb07 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/App.xaml.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/App.xaml.cs
@@ -21,12 +21,14 @@ public interface IClearCrashClick
public partial class App
{
public const string LogTag = "AppCenterXamarinPuppet";
+ private Task dialog = null;
static readonly IReadOnlyDictionary AppSecrets = new Dictionary
{
{ XamarinDevice.UWP, "a678b499-1912-4a94-9d97-25b569284d3a" },
{ XamarinDevice.Android, "bff0949b-7970-439d-9745-92cdc59b10fe" },
- { XamarinDevice.iOS, "b889c4f2-9ac2-4e2e-ae16-dae54f2c5899" }
+ { XamarinDevice.iOS, "b889c4f2-9ac2-4e2e-ae16-dae54f2c5899" },
+ { XamarinDevice.macOS, "2b06eb3f-70c9-4b31-b74b-a84fd2d01f51" }
};
// OneCollector secrets
@@ -64,6 +66,21 @@ protected override void OnStart()
Crashes.SentErrorReport += SentErrorReportHandler;
Crashes.FailedToSendErrorReport += FailedToSendErrorReportHandler;
+ // Country code.
+ if (Current.Properties.ContainsKey(Constants.CountryCode)
+ && Current.Properties[Constants.CountryCode] is string countryCode)
+ {
+ AppCenter.SetCountryCode(countryCode);
+ }
+
+ // Manual session tracker.
+ if (Current.Properties.ContainsKey(Constants.EnableManualSessionTracker)
+ && Current.Properties[Constants.EnableManualSessionTracker] is bool isEnabled
+ && isEnabled)
+ {
+ Analytics.EnableManualSessionTracker();
+ }
+
AppCenterLog.Assert(LogTag, "AppCenter.Configured=" + AppCenter.Configured);
if (!StartType.OneCollector.Equals(StartTypeUtils.GetPersistedStartType()))
@@ -118,7 +135,7 @@ private string GetOneCollectorTokenString()
private string GetAppCenterTokenString()
{
- return $"uwp={AppSecrets[XamarinDevice.UWP]};android={AppSecrets[XamarinDevice.Android]};ios={AppSecrets[XamarinDevice.iOS]}";
+ return $"uwp={AppSecrets[XamarinDevice.UWP]};android={AppSecrets[XamarinDevice.Android]};ios={AppSecrets[XamarinDevice.iOS]};macos={AppSecrets[XamarinDevice.macOS]}";
}
private string GetTokensString()
@@ -160,7 +177,15 @@ bool ConfirmationHandler()
{
XamarinDevice.BeginInvokeOnMainThread(() =>
{
- Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", null, null, "Send", "Always Send", "Don't Send").ContinueWith((arg) =>
+ if (XamarinDevice.RuntimePlatform == XamarinDevice.macOS)
+ {
+ dialog = Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", "Send", "Always Send");
+ }
+ else
+ {
+ Current.MainPage.DisplayActionSheet("Crash detected. Send anonymous crash report?", null, null, "Send", "Always Send", "Don't Send");
+ }
+ dialog.ContinueWith((arg) =>
{
var answer = arg.Result;
UserConfirmation userConfirmationSelection;
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Constants.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Constants.cs
index 704e61316..02891d8b4 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Constants.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Constants.cs
@@ -11,5 +11,7 @@ public static class Constants
public const string UpdateTrackKey = "update-track";
public const string AutomaticUpdateCheckKey = "automatic-update-check";
public const string StorageMaxSize = "storage-max-size";
+ public const string EnableManualSessionTracker = "enable-manual-session-tracker";
+ public const string CountryCode = "country-code";
}
}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Contoso.Forms.Puppet.csproj b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Contoso.Forms.Puppet.csproj
index 9ec3dd973..31529b1c3 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Contoso.Forms.Puppet.csproj
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Contoso.Forms.Puppet.csproj
@@ -52,9 +52,6 @@
MSBuild:Compile
-
- MSBuild:Compile
-
MSBuild:Compile
@@ -64,9 +61,6 @@
MSBuild:Compile
-
- MSBuild:Compile
-
MSBuild:Compile
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml
index a211595cd..77e8c9da1 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml
@@ -7,6 +7,5 @@
-
-
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml.cs
index 4a2288625..4848659c9 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/MainPuppetPage.xaml.cs
@@ -10,6 +10,11 @@ public partial class MainPuppetPage : TabbedPage
public MainPuppetPage ()
{
InitializeComponent();
+ if ((Device.RuntimePlatform == Device.macOS || Device.RuntimePlatform == Device.UWP)
+ && Children.Contains(DistributeContentPage))
+ {
+ Children.Remove(DistributeContentPage);
+ }
}
}
}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml
index 83ec952d0..c4627845d 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml
@@ -1,26 +1,40 @@
-
-
-
-
-
-
-
-
-
-
-
+ x:Class="Contoso.Forms.Puppet.AnalyticsContentPage" Padding="16">
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml.cs
index 03b995797..74e1953f8 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AnalyticsContentPage.xaml.cs
@@ -30,8 +30,18 @@ public AnalyticsContentPage()
protected override async void OnAppearing()
{
base.OnAppearing();
- EnabledSwitchCell.On = await Analytics.IsEnabledAsync();
+ EnabledSwitchCell.IsToggled = await Analytics.IsEnabledAsync();
EnabledSwitchCell.IsEnabled = await AppCenter.IsEnabledAsync();
+ if (Application.Current.Properties.ContainsKey(Constants.CountryCode)
+ && Application.Current.Properties[Constants.CountryCode] is string countryCode)
+ {
+ CountryCodeText.Text = countryCode;
+ }
+ if (Application.Current.Properties.ContainsKey(Constants.EnableManualSessionTracker)
+ && Application.Current.Properties[Constants.EnableManualSessionTracker] is bool isEnabled)
+ {
+ EnableManualSessionTrackerSwitch.IsToggled = isEnabled;
+ }
}
async void AddProperty(object sender, EventArgs e)
@@ -83,5 +93,22 @@ void RefreshPropCount()
{
NumPropertiesLabel.Text = EventProperties.Count.ToString();
}
+
+ void EnableManualSessionTrackerCellEnabled(object sender, ToggledEventArgs e)
+ {
+ Application.Current.Properties[Constants.EnableManualSessionTracker] = e.Value;
+ _ = Application.Current.SavePropertiesAsync();
+ }
+
+ void StartSessionButton_Clicked(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
+
+ void SaveCountryCode_Clicked(object sender, EventArgs e)
+ {
+ Application.Current.Properties[Constants.CountryCode] = CountryCodeText.Text;
+ _ = Application.Current.SavePropertiesAsync();
+ }
}
}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml
index 4e79eec9d..7a3295a1f 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml
@@ -1,33 +1,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml.cs
index 9943a0561..fbc9b575e 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/AppCenterContentPage.xaml.cs
@@ -32,8 +32,8 @@ public AppCenterContentPage()
protected override async void OnAppearing()
{
base.OnAppearing();
- AppCenterEnabledSwitchCell.On = await AppCenter.IsEnabledAsync();
- AllowedNetworkRequestSwitchCell.On = AppCenter.IsNetworkRequestsAllowed;
+ AppCenterEnabledSwitchCell.IsToggled = await AppCenter.IsEnabledAsync();
+ AllowedNetworkRequestSwitchCell.IsToggled = AppCenter.IsNetworkRequestsAllowed;
if (Application.Current.Properties.ContainsKey(Constants.UserId) && Application.Current.Properties[Constants.UserId] is string id)
{
UserIdEntry.Text = id;
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml
index 9d86109e8..4a980dc90 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml
@@ -1,72 +1,49 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml.cs
index 2f37259a8..0fdc85459 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CrashesContentPage.xaml.cs
@@ -119,7 +119,7 @@ async void PropertiesCellTapped(object sender, EventArgs e)
async void RefreshEnabled()
{
- CrashesEnabledSwitchCell.On = await Crashes.IsEnabledAsync();
+ CrashesEnabledSwitchCell.IsToggled = await Crashes.IsEnabledAsync();
CrashesEnabledSwitchCell.IsEnabled = await AppCenter.IsEnabledAsync();
}
@@ -134,7 +134,7 @@ void HandleOrThrow(Action action)
{
action();
}
- catch (Exception e) when (HandleExceptionsSwitchCell.On)
+ catch (Exception e) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(e);
}
@@ -229,7 +229,7 @@ public async void AsyncException(object sender, EventArgs e)
{
await FakeService.DoStuffInBackground();
}
- catch (Exception ex) when (HandleExceptionsSwitchCell.On)
+ catch (Exception ex) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(ex);
}
@@ -241,7 +241,7 @@ public void ClassLibException(object sender, EventArgs e)
{
CrashUtils.BackgroundExceptionTask().RunSynchronously();
}
- catch (Exception ex) when (HandleExceptionsSwitchCell.On)
+ catch (Exception ex) when (HandleExceptionsSwitchCell.IsToggled)
{
TrackException(ex);
}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml
deleted file mode 100644
index 4139439f9..000000000
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml.cs
deleted file mode 100644
index e974d569b..000000000
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/ModulePages/CustomPropertiesContentPage.xaml.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Microsoft.AppCenter;
-using Xamarin.Forms;
-
-namespace Contoso.Forms.Puppet
-{
- [Android.Runtime.Preserve(AllMembers = true)]
- public partial class CustomPropertiesContentPage : ContentPage
- {
- public CustomPropertiesContentPage()
- {
- InitializeComponent();
- if (Xamarin.Forms.Device.RuntimePlatform == Xamarin.Forms.Device.iOS)
- {
- Icon = "customProperties.png";
- }
- AddNewProperty();
- }
-
- public void AddNewProperty()
- {
- PropertiesContainer.Children.Add(new CustomPropertyView());
- }
-
- private void AddProperty_Clicked(object sender, EventArgs e)
- {
- AddNewProperty();
- }
-
- private void Send_Clicked(object sender, EventArgs e)
- {
- CustomProperties customProperties = new CustomProperties();
- foreach(var customProperty in PropertiesContainer.Children)
- {
- (customProperty as CustomPropertyView).AddCustomProperty(customProperties);
- }
- AppCenter.SetCustomProperties(customProperties);
- }
- }
-}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Properties/AssemblyInfo.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Properties/AssemblyInfo.cs
index 76670dc47..f9f714b7f 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Properties/AssemblyInfo.cs
@@ -20,8 +20,8 @@
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml
deleted file mode 100644
index cf18f9627..000000000
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml.cs b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml.cs
deleted file mode 100644
index 6e338d4f2..000000000
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/CustomPropertyView.xaml.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Microsoft.AppCenter;
-using Xamarin.Forms;
-
-namespace Contoso.Forms.Puppet
-{
- [Android.Runtime.Preserve(AllMembers = true)]
- public partial class CustomPropertyView : ContentView
- {
- private enum PropertyTypes { Clear = 0, Boolean, Number, DateTime, String };
-
- private DatePicker DatePicker;
- private TimePicker TimePicker;
-
- public CustomPropertyView()
- {
- InitializeComponent();
- InitializePropertyType();
- }
-
- public void AddCustomProperty(CustomProperties properties)
- {
- if ((PropertyTypes)PropertyType.SelectedIndex == PropertyTypes.Clear)
- {
- properties.Clear(PropertyKey.Text);
- }
- else
- {
- View view = PropertyValueHolder.Children[0];
- switch ((PropertyTypes)PropertyType.SelectedIndex)
- {
- case PropertyTypes.Boolean:
- properties.Set(PropertyKey.Text, (view as Switch).IsToggled);
- break;
- case PropertyTypes.Number:
- if (!string.IsNullOrWhiteSpace((view as Editor).Text))
- {
- properties.Set(PropertyKey.Text, long.Parse((view as Editor).Text));
- }
- break;
- case PropertyTypes.DateTime:
- DateTime date = new DateTime(DatePicker.Date.Year, DatePicker.Date.Month, DatePicker.Date.Day,
- TimePicker.Time.Hours, TimePicker.Time.Minutes, TimePicker.Time.Seconds);
- properties.Set(PropertyKey.Text, date);
- break;
- case PropertyTypes.String:
- properties.Set(PropertyKey.Text, (view as Editor).Text);
- break;
- }
- }
- }
-
- private void InitializePropertyType()
- {
- foreach (PropertyTypes propertyType in Enum.GetValues(typeof(PropertyTypes)))
- {
- PropertyType.Items.Add(propertyType.ToString());
- }
- PropertyType.SelectedIndex = 0;
- }
-
- private void PropertyType_SelectedIndexChanged(object sender, EventArgs e)
- {
- PropertyValueHolder.Children.Clear();
- PropertyValue.IsVisible = false;
- switch ((PropertyTypes) PropertyType.SelectedIndex)
- {
- case PropertyTypes.Boolean:
- PropertyValueHolder.Children.Add(new Switch());
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.Number:
- Editor NumberEditor = new Editor() { Keyboard = Keyboard.Numeric};
- NumberEditor.TextChanged += NumberEditor_TextChanged;
- PropertyValueHolder.Children.Add(NumberEditor);
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.DateTime:
- StackLayout DateTimeLayout = new StackLayout() { Orientation = StackOrientation.Vertical};
- DatePicker = new DatePicker() { Date = DateTime.Now };
- DateTimeLayout.Children.Add(DatePicker);
- TimePicker = new TimePicker() { Time = DateTime.Now.TimeOfDay };
- DateTimeLayout.Children.Add(TimePicker);
- PropertyValueHolder.Children.Add(DateTimeLayout);
- PropertyValue.IsVisible = true;
- break;
- case PropertyTypes.String:
- PropertyValueHolder.Children.Add(new Editor());
- PropertyValue.IsVisible = true;
- break;
- }
- }
-
- private void NumberEditor_TextChanged(object sender, TextChangedEventArgs e)
- {
- if (string.IsNullOrWhiteSpace(e.NewTextValue))
- {
- return;
- }
- long newValue;
- if (!long.TryParse(e.NewTextValue, out newValue))
- {
- ((Editor)sender).Text = e.OldTextValue;
- }
- }
- }
-}
diff --git a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/TextAttachmentView.xaml b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/TextAttachmentView.xaml
index 0131f9d0a..d85a3a200 100644
--- a/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/TextAttachmentView.xaml
+++ b/Apps/Contoso.Forms.Puppet/Contoso.Forms.Puppet/Views/TextAttachmentView.xaml
@@ -2,14 +2,14 @@
-
-
+
+
-
-
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/AppDelegate.cs b/Apps/Contoso.MacOS.Puppet/AppDelegate.cs
new file mode 100644
index 000000000..3ec28a7ca
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/AppDelegate.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+using Foundation;
+using Microsoft.AppCenter;
+using Microsoft.AppCenter.Analytics;
+using Microsoft.AppCenter.Crashes;
+
+namespace Contoso.MacOS.Puppet
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : NSApplicationDelegate
+ {
+ const string LogTag = "AppCenterXamarinPuppet";
+ private const string ApplicationCrashOnExceptionsKey = "NSApplicationCrashOnExceptions";
+
+ public AppDelegate()
+ {
+ }
+
+ [Export("applicationDidFinishLaunching:")]
+ public override void DidFinishLaunching(NSNotification notification)
+ {
+ // Configure App Center.
+ AppCenter.LogLevel = LogLevel.Verbose;
+ AppCenter.SetLogUrl("https://in-integration.dev.avalanch.es");
+ var plist = NSUserDefaults.StandardUserDefaults;
+ var storageSizeValue = plist.IntForKey(Constants.StorageSizeKey);
+ if (storageSizeValue > 0)
+ {
+ AppCenter.SetMaxStorageSizeAsync(storageSizeValue);
+ }
+ if (plist.BoolForKey(Constants.EnableManualSessionTrackerKey))
+ {
+ Analytics.EnableManualSessionTracker();
+ }
+ var dictionary = new NSDictionary(NSObject.FromObject(true), new NSString(ApplicationCrashOnExceptionsKey));
+ plist.RegisterDefaults(dictionary);
+ AppCenter.Start("2b06eb3f-70c9-4b31-b74b-a84fd2d01f51", typeof(Analytics), typeof(Crashes));
+ }
+
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
new file mode 100644
index 000000000..d0b5a8098
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
new file mode 100644
index 000000000..ebb5a0fe4
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
new file mode 100644
index 000000000..f4c8d2904
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
new file mode 100644
index 000000000..0986d31be
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
new file mode 100644
index 000000000..412d6ca9b
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
new file mode 100644
index 000000000..a142c83fb
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
new file mode 100644
index 000000000..e99022ae8
Binary files /dev/null and b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/Contents.json b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..6b2854529
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images": [
+ {
+ "filename": "AppIcon-16.png",
+ "size": "16x16",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-16@2x.png",
+ "size": "16x16",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32.png",
+ "size": "32x32",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-32@2x.png",
+ "size": "32x32",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128.png",
+ "size": "128x128",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-128@2x.png",
+ "size": "128x128",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256.png",
+ "size": "256x256",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-256@2x.png",
+ "size": "256x256",
+ "scale": "2x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512.png",
+ "size": "512x512",
+ "scale": "1x",
+ "idiom": "mac"
+ },
+ {
+ "filename": "AppIcon-512@2x.png",
+ "size": "512x512",
+ "scale": "2x",
+ "idiom": "mac"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.MacOS.Puppet/Assets.xcassets/Contents.json b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/Contents.json
new file mode 100644
index 000000000..4caf392f9
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Apps/Contoso.MacOS.Puppet/Constants.cs b/Apps/Contoso.MacOS.Puppet/Constants.cs
new file mode 100644
index 000000000..20844720d
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Constants.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace Contoso.MacOS.Puppet
+{
+ public class Constants
+ {
+ public const string Verbose = "Verbose";
+ public const string Debug = "Debug";
+ public const string Info = "Info";
+ public const string Warning = "Warning";
+ public const string Error = "Error";
+ public const string StorageSizeKey = "AppCenterStorageSizeKey";
+ public const string EnableManualSessionTrackerKey = "EnableManualSessionTrackerKey";
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/Contoso.MacOS.Puppet.csproj b/Apps/Contoso.MacOS.Puppet/Contoso.MacOS.Puppet.csproj
new file mode 100644
index 000000000..7aa5fb985
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Contoso.MacOS.Puppet.csproj
@@ -0,0 +1,138 @@
+
+
+
+ Debug
+ AnyCPU
+ {83AAE9C7-04A6-447E-AE5F-07C8E0A509A8}
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Exe
+ Contoso.MacOS.Puppet
+ Contoso.MacOS.Puppet
+ v2.0
+ Xamarin.Mac
+ Resources
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ Mac Developer
+ false
+ false
+ false
+ true
+ true
+ true
+
+
+
+ pdbonly
+ true
+ bin\Release
+
+ prompt
+ 4
+ false
+ true
+ false
+ true
+ true
+ true
+ Entitlements.plist
+ SdkOnly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ViewController.cs
+
+
+
+
+
+ AppCenter.cs
+
+
+ AppCenterController.cs
+
+
+
+
+ Analytics.cs
+
+
+ AnalyticsController.cs
+
+
+
+
+ Crashes.cs
+
+
+ CrashesController.cs
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft.AppCenter.Crashes.MacOS
+
+
+ Microsoft.AppCenter.Analytics.MacOS
+
+
+ Microsoft.AppCenter.MacOS
+
+
+ Microsoft.AppCenter.Analytics.MacOS.Bindings
+
+
+ Microsoft.AppCenter.Crashes.MacOS.Bindings
+
+
+ Microsoft.AppCenter.MacOS.Bindings
+
+
+
+
\ No newline at end of file
diff --git a/Apps/Contoso.MacOS.Puppet/Entitlements.plist b/Apps/Contoso.MacOS.Puppet/Entitlements.plist
new file mode 100644
index 000000000..9ae599370
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/FakeService.cs b/Apps/Contoso.MacOS.Puppet/FakeService.cs
new file mode 100644
index 000000000..9330b7c78
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/FakeService.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.IO;
+using System.Threading.Tasks;
+
+namespace Contoso.MacOS.Puppet
+{
+ static class FakeService
+ {
+ internal async static Task DoStuffInBackground()
+ {
+ await Task.Run(() => { throw new IOException("Server did not respond"); });
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/Info.plist b/Apps/Contoso.MacOS.Puppet/Info.plist
new file mode 100644
index 000000000..812b77320
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleIdentifier
+ com.microsoft.appcenter.Contoso-MacOS-Puppet
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Contoso.MacOS.Puppet
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 4.5.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 4.5.0
+ LSMinimumSystemVersion
+ 10.15
+ NSHumanReadableCopyright
+ ${AuthorCopyright:HtmlEncode}
+ NSMainStoryboardFile
+ Main
+ NSPrincipalClass
+ NSApplication
+ XSAppIconAssets
+ Assets.xcassets/AppIcon.appiconset
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/Main.cs b/Apps/Contoso.MacOS.Puppet/Main.cs
new file mode 100644
index 000000000..ff6ccffba
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Main.cs
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using AppKit;
+
+namespace Contoso.MacOS.Puppet
+{
+ static class MainClass
+ {
+ static void Main(string[] args)
+ {
+ NSApplication.Init();
+ NSApplication.Main(args);
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/Main.storyboard b/Apps/Contoso.MacOS.Puppet/Main.storyboard
new file mode 100644
index 000000000..62c6088c7
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/Main.storyboard
@@ -0,0 +1,1104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+
+
+
+ Left to Right
+
+
+
+
+
+
+ Right to Left
+
+
+
+
+
+
+
+
+
+
+ Default
+
+
+
+
+
+
+ Left to Right
+
+
+
+
+
+
+ Right to Left
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.cs
new file mode 100644
index 000000000..1354c8ee6
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Foundation;
+using AppKit;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class Analytics : AppKit.NSView
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public Analytics(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public Analytics(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.designer.cs
new file mode 100644
index 000000000..9e4748ec2
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.designer.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+
+ // Should subclass AppKit.NSView
+ [Foundation.Register("Analytics")]
+ public partial class Analytics
+ {
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.xib b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.xib
new file mode 100644
index 000000000..1cc2826a2
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Analytics.xib
@@ -0,0 +1,166 @@
+
+
+
+ 1060
+ 10D573
+ 762
+ 1038.29
+ 460.00
+
+
+
+
+
+ YES
+
+ AnalyticsController
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+
+ 268
+ {470, 296}
+
+ Analytics
+
+
+
+
+ YES
+
+
+ view
+
+
+
+ 17
+
+
+
+
+ YES
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 4
+
+
+ YES
+
+
+
+
+
+
+ YES
+
+ YES
+ -1.IBPluginDependency
+ -2.IBPluginDependency
+ -3.IBPluginDependency
+ 4.IBEditorWindowLastContentRect
+ 4.IBPluginDependency
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{380, 424}, {470, 296}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+ YES
+
+
+ YES
+
+
+
+
+ YES
+
+
+ YES
+
+
+
+ 17
+
+
+
+ YES
+
+ Analytics
+ NSView
+
+ IBUserSource
+
+
+
+
+ AnalyticsController
+ NSViewController
+
+ IBUserSource
+
+
+
+
+
+ 0
+ IBCocoaFramework
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+
+ 3
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.cs
new file mode 100644
index 000000000..26facdf65
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.cs
@@ -0,0 +1,101 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Foundation;
+using AppKit;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class AnalyticsController : AppKit.NSViewController
+ {
+ private bool hasTrackEventPropery = false;
+ private const string On = "1";
+ private const string Off = "0";
+ private NSUserDefaults plist = NSUserDefaults.StandardUserDefaults;
+
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public AnalyticsController(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public AnalyticsController(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Call to load from the XIB/NIB file
+ public AnalyticsController() : base("Analytics", NSBundle.MainBundle)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+
+ public override void ViewDidAppear()
+ {
+ base.ViewDidAppear();
+ isAnalyticsEnabledSwitch.StringValue = Microsoft.AppCenter.Analytics.Analytics.IsEnabledAsync().Result ? On : Off;
+ isAnalyticsEnabledSwitch.Enabled = Microsoft.AppCenter.AppCenter.IsEnabledAsync().Result;
+ var isEnabled = plist.BoolForKey(Constants.EnableManualSessionTrackerKey);
+ ManualSessionTrackerSwitch.StringValue = isEnabled ? On : Off;
+ }
+
+ partial void AnalyticsSwitchEnabled(NSSwitch sender)
+ {
+ var isAnalyticsEnabled = sender.AccessibilityValue.ToLower().Equals("on");
+ Microsoft.AppCenter.Analytics.Analytics.SetEnabledAsync(isAnalyticsEnabled).Wait();
+ isAnalyticsEnabledSwitch.StringValue = Microsoft.AppCenter.Analytics.Analytics.IsEnabledAsync().Result ? On : Off;
+ }
+
+ partial void HasTrackErrorProperties(NSButton sender)
+ {
+ hasTrackEventPropery = !hasTrackEventPropery;
+ }
+
+ partial void ManualSessionTrackerUpdate(NSSwitch sender)
+ {
+ plist.SetBool(sender.AccessibilityValue.ToLower().Equals("on"), Constants.EnableManualSessionTrackerKey);
+ }
+
+ partial void StartSession(NSObject sender)
+ {
+ Microsoft.AppCenter.Analytics.Analytics.StartSession();
+ }
+
+ partial void SendTrackEvent(NSButton sender)
+ {
+ var trackEvent = trackEventName.AccessibilityValue;
+ if (hasTrackEventPropery)
+ {
+ var properties = new Dictionary();
+ properties.Add("property1", "key1");
+ properties.Add("property2", "key2");
+ Microsoft.AppCenter.Analytics.Analytics.TrackEvent(trackEvent, properties);
+ return;
+ }
+ Microsoft.AppCenter.Analytics.Analytics.TrackEvent(trackEvent);
+ }
+
+ //strongly typed view accessor
+ public new Analytics View
+ {
+ get
+ {
+ return (Analytics)base.View;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.designer.cs
new file mode 100644
index 000000000..135e09391
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AnalyticsController.designer.cs
@@ -0,0 +1,54 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+using System.CodeDom.Compiler;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ [Register ("AnalyticsController")]
+ partial class AnalyticsController
+ {
+ [Outlet]
+ AppKit.NSSwitch isAnalyticsEnabledSwitch { get; set; }
+
+ [Outlet]
+ AppKit.NSSwitch ManualSessionTrackerSwitch { get; set; }
+
+ [Outlet]
+ AppKit.NSTextField trackEventName { get; set; }
+
+ [Action ("AnalyticsSwitchEnabled:")]
+ partial void AnalyticsSwitchEnabled (AppKit.NSSwitch sender);
+
+ [Action ("HasTrackErrorProperties:")]
+ partial void HasTrackErrorProperties (AppKit.NSButton sender);
+
+ [Action ("ManualSessionTrackerUpdate:")]
+ partial void ManualSessionTrackerUpdate (AppKit.NSSwitch sender);
+
+ [Action ("SendTrackEvent:")]
+ partial void SendTrackEvent (AppKit.NSButton sender);
+
+ [Action ("StartSession:")]
+ partial void StartSession (Foundation.NSObject sender);
+
+ void ReleaseDesignerOutlets ()
+ {
+ if (isAnalyticsEnabledSwitch != null) {
+ isAnalyticsEnabledSwitch.Dispose ();
+ isAnalyticsEnabledSwitch = null;
+ }
+
+ if (trackEventName != null) {
+ trackEventName.Dispose ();
+ trackEventName = null;
+ }
+
+ if (ManualSessionTrackerSwitch != null) {
+ ManualSessionTrackerSwitch.Dispose ();
+ ManualSessionTrackerSwitch = null;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.cs
new file mode 100644
index 000000000..15092636e
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Foundation;
+using AppKit;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class AppCenter : AppKit.NSView
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public AppCenter(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public AppCenter(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.designer.cs
new file mode 100644
index 000000000..95083dfdf
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.designer.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+
+ // Should subclass AppKit.NSView
+ [Foundation.Register("AppCenter")]
+ public partial class AppCenter
+ {
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.xib b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.xib
new file mode 100644
index 000000000..f4a9a5f95
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenter.xib
@@ -0,0 +1,166 @@
+
+
+
+ 1060
+ 10D573
+ 762
+ 1038.29
+ 460.00
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ 762
+
+
+ YES
+
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ AppCenterController
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+
+ 268
+ {470, 296}
+
+ AppCenter
+
+
+
+
+ YES
+
+
+ view
+
+
+
+ 17
+
+
+
+
+ YES
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 4
+
+
+ YES
+
+
+
+
+
+
+ YES
+
+ YES
+ -1.IBPluginDependency
+ -2.IBPluginDependency
+ -3.IBPluginDependency
+ 4.IBEditorWindowLastContentRect
+ 4.IBPluginDependency
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{380, 424}, {470, 296}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+ YES
+
+
+ YES
+
+
+
+
+ YES
+
+
+ YES
+
+
+
+ 17
+
+
+
+ YES
+
+ AppCenter
+ NSView
+
+ IBUserSource
+
+
+
+
+ AppCenterController
+ NSViewController
+
+ IBUserSource
+
+
+
+
+
+ 0
+ IBCocoaFramework
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+
+ 3
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.cs
new file mode 100644
index 000000000..a4feb2da9
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.cs
@@ -0,0 +1,103 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using Foundation;
+using AppKit;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class AppCenterController : AppKit.NSViewController
+ {
+ private const string LogTag = "XamarinMacOS";
+ private const string On = "1";
+ private const string Off = "0";
+ private NSUserDefaults plist = NSUserDefaults.StandardUserDefaults;
+
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public AppCenterController(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public AppCenterController(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Call to load from the XIB/NIB file
+ public AppCenterController() : base("AppCenter", NSBundle.MainBundle)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+
+ public override void ViewDidAppear()
+ {
+ base.ViewDidAppear();
+ IsAppCenterEnabledSwitch.StringValue = Microsoft.AppCenter.AppCenter.IsEnabledAsync().Result ? On : Off;
+ isNetworkRequestAllowedSwitch.StringValue = Microsoft.AppCenter.AppCenter.IsNetworkRequestsAllowed ? On : Off;
+
+ // Set max storage size value.
+ plist = NSUserDefaults.StandardUserDefaults;
+ var storageSizeValue = plist.IntForKey(Constants.StorageSizeKey);
+ if (storageSizeValue > 0)
+ {
+ MaxStorageSizeText.StringValue = storageSizeValue.ToString();
+ }
+ }
+
+ partial void IsAppCenterEnabled(NSSwitch sender)
+ {
+ var IsAppCenterEnabled = sender.StringValue.ToLower().Equals(On);
+ Microsoft.AppCenter.AppCenter.SetEnabledAsync(IsAppCenterEnabled).Wait();
+ IsAppCenterEnabledSwitch.StringValue = Microsoft.AppCenter.AppCenter.IsEnabledAsync().Result ? On : Off;
+ }
+
+ partial void IsNetworkRequestsAllowed(NSSwitch sender)
+ {
+ var isNetworkAllowed = sender.StringValue.ToLower().Equals(On);
+ Microsoft.AppCenter.AppCenter.IsNetworkRequestsAllowed = isNetworkAllowed;
+ }
+
+ partial void SaveMaxStorageSizeText(NSButton sender)
+ {
+ var size = MaxStorageSizeText.AccessibilityValue;
+ int.TryParse(size, out var result);
+ if (result != 0)
+ {
+ Microsoft.AppCenter.AppCenter.SetMaxStorageSizeAsync(result).Wait();
+ plist.SetInt(result, Constants.StorageSizeKey);
+ }
+ else
+ {
+ Microsoft.AppCenter.AppCenterLog.Error(LogTag, "Wrong number value for the max storage size.");
+ }
+ }
+
+ partial void UserIdTextChanged(NSTextField sender)
+ {
+ var userId = string.IsNullOrEmpty(sender.AccessibilityValue) ? null : sender.AccessibilityValue;
+ Microsoft.AppCenter.AppCenter.SetUserId(userId);
+ }
+
+ //strongly typed view accessor
+ public new AppCenter View
+ {
+ get
+ {
+ return (AppCenter)base.View;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.designer.cs
new file mode 100644
index 000000000..058ce0875
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/AppCenterController.designer.cs
@@ -0,0 +1,59 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+using System.CodeDom.Compiler;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ [Register ("AppCenterController")]
+ partial class AppCenterController
+ {
+ [Outlet]
+ AppKit.NSSwitch IsAppCenterEnabledSwitch { get; set; }
+
+ [Outlet]
+ AppKit.NSSwitch isNetworkRequestAllowedSwitch { get; set; }
+
+ [Outlet]
+ AppKit.NSTextField MaxStorageSizeText { get; set; }
+
+ [Outlet]
+ AppKit.NSTextField UserIdText { get; set; }
+
+ [Action ("IsAppCenterEnabled:")]
+ partial void IsAppCenterEnabled (AppKit.NSSwitch sender);
+
+ [Action ("IsNetworkRequestsAllowed:")]
+ partial void IsNetworkRequestsAllowed (AppKit.NSSwitch sender);
+
+ [Action ("SaveMaxStorageSizeText:")]
+ partial void SaveMaxStorageSizeText (AppKit.NSButton sender);
+
+ [Action ("UserIdTextChanged:")]
+ partial void UserIdTextChanged (AppKit.NSTextField sender);
+
+ void ReleaseDesignerOutlets ()
+ {
+ if (IsAppCenterEnabledSwitch != null) {
+ IsAppCenterEnabledSwitch.Dispose ();
+ IsAppCenterEnabledSwitch = null;
+ }
+
+ if (isNetworkRequestAllowedSwitch != null) {
+ isNetworkRequestAllowedSwitch.Dispose ();
+ isNetworkRequestAllowedSwitch = null;
+ }
+
+ if (MaxStorageSizeText != null) {
+ MaxStorageSizeText.Dispose ();
+ MaxStorageSizeText = null;
+ }
+
+ if (UserIdText != null) {
+ UserIdText.Dispose ();
+ UserIdText = null;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.cs
new file mode 100644
index 000000000..9bedfdb67
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Foundation;
+using AppKit;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class Crashes : AppKit.NSView
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public Crashes(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public Crashes(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.designer.cs
new file mode 100644
index 000000000..8a355325b
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.designer.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+
+ // Should subclass AppKit.NSView
+ [Foundation.Register("Crashes")]
+ public partial class Crashes
+ {
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.xib b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.xib
new file mode 100644
index 000000000..91d99a883
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/Crashes.xib
@@ -0,0 +1,166 @@
+
+
+
+ 1060
+ 10D573
+ 762
+ 1038.29
+ 460.00
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ 762
+
+
+ YES
+
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ YES
+
+ CrashesController
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+
+ 268
+ {470, 296}
+
+ Crashes
+
+
+
+
+ YES
+
+
+ view
+
+
+
+ 17
+
+
+
+
+ YES
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 4
+
+
+ YES
+
+
+
+
+
+
+ YES
+
+ YES
+ -1.IBPluginDependency
+ -2.IBPluginDependency
+ -3.IBPluginDependency
+ 4.IBEditorWindowLastContentRect
+ 4.IBPluginDependency
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{380, 424}, {470, 296}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+ YES
+
+
+ YES
+
+
+
+
+ YES
+
+
+ YES
+
+
+
+ 17
+
+
+
+ YES
+
+ Crashes
+ NSView
+
+ IBUserSource
+
+
+
+
+ CrashesController
+ NSViewController
+
+ IBUserSource
+
+
+
+
+
+ 0
+ IBCocoaFramework
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+
+ 3
+
+
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.cs
new file mode 100644
index 000000000..4572cfb06
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.cs
@@ -0,0 +1,162 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Foundation;
+using AppKit;
+using System.IO;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ public partial class CrashesController : AppKit.NSViewController
+ {
+ private const string On = "1";
+ private const string Off = "0";
+
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public CrashesController(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public CrashesController(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Call to load from the XIB/NIB file
+ public CrashesController() : base("Crashes", NSBundle.MainBundle)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+
+ public override void ViewDidAppear()
+ {
+ base.ViewDidAppear();
+ IsCrashesEnabledSwitch.StringValue = Microsoft.AppCenter.Crashes.Crashes.IsEnabledAsync().Result ? On : Off;
+ IsCrashesEnabledSwitch.Enabled = Microsoft.AppCenter.AppCenter.IsEnabledAsync().Result;
+ }
+
+ partial void IsCrashesEnabled(NSSwitch sender)
+ {
+ var isAnalyticsEnabled = sender.AccessibilityValue.ToLower().Equals("on");
+ Microsoft.AppCenter.Crashes.Crashes.SetEnabledAsync(isAnalyticsEnabled).Wait();
+ IsCrashesEnabledSwitch.StringValue = Microsoft.AppCenter.Crashes.Crashes.IsEnabledAsync().Result ? On : Off;
+ }
+
+ partial void TestCrash(NSButton sender)
+ {
+ Microsoft.AppCenter.Crashes.Crashes.GenerateTestCrash();
+ }
+
+ partial void DivideByZero(NSButton sender)
+ {
+ /* This is supposed to cause a crash, so we don't care that the variable 'x' is never used */
+#pragma warning disable CS0219
+ int x = (42 / int.Parse("0"));
+#pragma warning restore CS0219
+ }
+
+ partial void CatchNullReferenceException(NSButton sender)
+ {
+ try
+ {
+ TriggerNullReferenceException();
+ }
+ catch (NullReferenceException e)
+ {
+ Microsoft.AppCenter.Crashes.Crashes.TrackError(e);
+ }
+ }
+
+ partial void CrashWithNullReferenceException(NSButton sender)
+ {
+ TriggerNullReferenceException();
+ }
+
+ void TriggerNullReferenceException()
+ {
+ string[] values = { "one", null, "two" };
+ for (int ctr = 0; ctr <= values.GetUpperBound(0); ctr++)
+ {
+ var val = values[ctr].Trim();
+ var separator = ctr == values.GetUpperBound(0) ? "" : ", ";
+ System.Diagnostics.Debug.WriteLine("{0}{1}", val, separator);
+ }
+ System.Diagnostics.Debug.WriteLine("");
+ }
+
+ partial void CrashWithAggregateException(NSButton sender)
+ {
+ throw PrepareException();
+ }
+
+ static Exception PrepareException()
+ {
+ try
+ {
+ throw new AggregateException(SendHttp(), new ArgumentException("Invalid parameter", ValidateLength()));
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ }
+
+ static Exception SendHttp()
+ {
+ try
+ {
+ throw new IOException("Network down");
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ }
+
+ static Exception ValidateLength()
+ {
+ try
+ {
+ throw new ArgumentOutOfRangeException(null, "It's over 9000!");
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+ }
+
+ async partial void CrashAsync(NSButton sender)
+ {
+ await FakeService.DoStuffInBackground();
+ }
+
+ partial void NativeCrash(NSButton sender)
+ {
+ NSNull.Null.PerformSelector(new ObjCRuntime.Selector("isEqualToString:"));
+ }
+
+ //strongly typed view accessor
+ public new Crashes View
+ {
+ get
+ {
+ return (Crashes)base.View;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.designer.cs b/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.designer.cs
new file mode 100644
index 000000000..1ef6af94e
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ModulePages/CrashesController.designer.cs
@@ -0,0 +1,47 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+using System.CodeDom.Compiler;
+
+namespace Contoso.MacOS.Puppet.ModulePages
+{
+ [Register ("CrashesController")]
+ partial class CrashesController
+ {
+ [Outlet]
+ AppKit.NSSwitch IsCrashesEnabledSwitch { get; set; }
+
+ [Action ("CatchNullReferenceException:")]
+ partial void CatchNullReferenceException (AppKit.NSButton sender);
+
+ [Action ("CrashAsync:")]
+ partial void CrashAsync (AppKit.NSButton sender);
+
+ [Action ("CrashWithAggregateException:")]
+ partial void CrashWithAggregateException (AppKit.NSButton sender);
+
+ [Action ("CrashWithNullReferenceException:")]
+ partial void CrashWithNullReferenceException (AppKit.NSButton sender);
+
+ [Action ("DivideByZero:")]
+ partial void DivideByZero (AppKit.NSButton sender);
+
+ [Action ("IsCrashesEnabled:")]
+ partial void IsCrashesEnabled (AppKit.NSSwitch sender);
+
+ [Action ("NativeCrash:")]
+ partial void NativeCrash (AppKit.NSButton sender);
+
+ [Action ("TestCrash:")]
+ partial void TestCrash (AppKit.NSButton sender);
+
+ void ReleaseDesignerOutlets ()
+ {
+ if (IsCrashesEnabledSwitch != null) {
+ IsCrashesEnabledSwitch.Dispose ();
+ IsCrashesEnabledSwitch = null;
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ViewController.cs b/Apps/Contoso.MacOS.Puppet/ViewController.cs
new file mode 100644
index 000000000..a18c108e1
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ViewController.cs
@@ -0,0 +1,37 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System;
+
+using AppKit;
+using Foundation;
+
+namespace Contoso.MacOS.Puppet
+{
+ public partial class ViewController : NSViewController
+ {
+ public ViewController(IntPtr handle) : base(handle)
+ {
+ }
+
+ public override void ViewDidLoad()
+ {
+ base.ViewDidLoad();
+
+ // Do any additional setup after loading the view.
+ }
+
+ public override NSObject RepresentedObject
+ {
+ get
+ {
+ return base.RepresentedObject;
+ }
+ set
+ {
+ base.RepresentedObject = value;
+ // Update the view, if already loaded.
+ }
+ }
+ }
+}
diff --git a/Apps/Contoso.MacOS.Puppet/ViewController.designer.cs b/Apps/Contoso.MacOS.Puppet/ViewController.designer.cs
new file mode 100644
index 000000000..42e8f648d
--- /dev/null
+++ b/Apps/Contoso.MacOS.Puppet/ViewController.designer.cs
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Foundation;
+
+namespace Contoso.MacOS.Puppet
+{
+ [Register("ViewController")]
+ partial class ViewController
+ {
+ void ReleaseDesignerOutlets()
+ {
+ }
+ }
+}
diff --git a/Apps/Contoso.UWP.Demo/Contoso.UWP.Demo.csproj b/Apps/Contoso.UWP.Demo/Contoso.UWP.Demo.csproj
index b99209188..c1f313867 100644
--- a/Apps/Contoso.UWP.Demo/Contoso.UWP.Demo.csproj
+++ b/Apps/Contoso.UWP.Demo/Contoso.UWP.Demo.csproj
@@ -149,8 +149,8 @@
-
-
+
+
diff --git a/Apps/Contoso.UWP.Demo/Package.appxmanifest b/Apps/Contoso.UWP.Demo/Package.appxmanifest
index 59736baba..b44c36ac6 100644
--- a/Apps/Contoso.UWP.Demo/Package.appxmanifest
+++ b/Apps/Contoso.UWP.Demo/Package.appxmanifest
@@ -1,6 +1,6 @@
-
+
AppCenter-Contoso.UWP.Demo
diff --git a/Apps/Contoso.UWP.Demo/Properties/AssemblyInfo.cs b/Apps/Contoso.UWP.Demo/Properties/AssemblyInfo.cs
index c033935d4..bf6381b4c 100644
--- a/Apps/Contoso.UWP.Demo/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.UWP.Demo/Properties/AssemblyInfo.cs
@@ -27,5 +27,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/Apps/Contoso.UWP.Puppet/Package.appxmanifest b/Apps/Contoso.UWP.Puppet/Package.appxmanifest
index eec9e05e3..f2a1a5ceb 100644
--- a/Apps/Contoso.UWP.Puppet/Package.appxmanifest
+++ b/Apps/Contoso.UWP.Puppet/Package.appxmanifest
@@ -1,6 +1,6 @@
-
+
AppCenter-Contoso.UWP.Puppet
diff --git a/Apps/Contoso.UWP.Puppet/Properties/AssemblyInfo.cs b/Apps/Contoso.UWP.Puppet/Properties/AssemblyInfo.cs
index d2eed7e4e..ccaf9ef36 100644
--- a/Apps/Contoso.UWP.Puppet/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.UWP.Puppet/Properties/AssemblyInfo.cs
@@ -27,5 +27,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/App.xaml.cs b/Apps/Contoso.WPF.Demo.DotNetCore/App.xaml.cs
index e004beaa4..946b12140 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/App.xaml.cs
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/App.xaml.cs
@@ -22,6 +22,9 @@ protected override void OnStartup(StartupEventArgs e)
{
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetCountryCode(string.IsNullOrEmpty(Settings.Default.CountryCode) ? null : Settings.Default.CountryCode);
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldAwaitUserConfirmation = ConfirmationHandler;
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/Contoso.WPF.Demo.DotNetCore.csproj b/Apps/Contoso.WPF.Demo.DotNetCore/Contoso.WPF.Demo.DotNetCore.csproj
index b7354e4a7..404d7ecd0 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/Contoso.WPF.Demo.DotNetCore.csproj
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/Contoso.WPF.Demo.DotNetCore.csproj
@@ -4,13 +4,13 @@
WinExe
netcoreapp3.0
true
- 4.4.0
+ 4.5.0
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
-
-
+
+
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml b/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml
index c26eb42d9..5d01dd1af 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml
@@ -101,6 +101,12 @@
Country code has been updated. This value will only be applied to the following sessions.
+
+
+
+
+
+
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml.cs b/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml.cs
index 763c77929..c9fce4700 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml.cs
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/MainWindow.xaml.cs
@@ -40,6 +40,7 @@ public MainWindow()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentLabel.Content = fileAttachments;
+ EnableManualSessionTrackerCheckBox.IsChecked = Settings.Default.EnableManualSessionTracker;
if (!string.IsNullOrEmpty(Settings.Default.CountryCode))
{
CountryCodeEnableCheckbox.IsChecked = true;
@@ -198,6 +199,27 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.Save();
}
+ private void EnableManualSessionTracker_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTracker_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ Settings.Default.EnableManualSessionTracker = isEnabled;
+ Settings.Default.Save();
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
+
#region Crash
private void CrashesEnabled_Checked(object sender, RoutedEventArgs e)
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/Settings.Designer.cs b/Apps/Contoso.WPF.Demo.DotNetCore/Settings.Designer.cs
index 4d700d78b..c6ba34ad5 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/Settings.Designer.cs
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/Settings.Designer.cs
@@ -82,5 +82,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WPF.Demo.DotNetCore/Settings.settings b/Apps/Contoso.WPF.Demo.DotNetCore/Settings.settings
index 31b7eabfe..39f3604e0 100644
--- a/Apps/Contoso.WPF.Demo.DotNetCore/Settings.settings
+++ b/Apps/Contoso.WPF.Demo.DotNetCore/Settings.settings
@@ -17,5 +17,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WPF.Demo/App.config b/Apps/Contoso.WPF.Demo/App.config
index 728c17ba5..44a1fb7f2 100644
--- a/Apps/Contoso.WPF.Demo/App.config
+++ b/Apps/Contoso.WPF.Demo/App.config
@@ -25,6 +25,9 @@
0
+
+ False
+
diff --git a/Apps/Contoso.WPF.Demo/App.xaml.cs b/Apps/Contoso.WPF.Demo/App.xaml.cs
index b6f89b79b..5b77f60a4 100644
--- a/Apps/Contoso.WPF.Demo/App.xaml.cs
+++ b/Apps/Contoso.WPF.Demo/App.xaml.cs
@@ -23,6 +23,9 @@ protected override void OnStartup(StartupEventArgs e)
{
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetCountryCode(string.IsNullOrEmpty(Settings.Default.CountryCode) ? null : Settings.Default.CountryCode);
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldAwaitUserConfirmation = ConfirmationHandler;
diff --git a/Apps/Contoso.WPF.Demo/Contoso.WPF.Demo.csproj b/Apps/Contoso.WPF.Demo/Contoso.WPF.Demo.csproj
index 2eac0790c..195bb4c65 100644
--- a/Apps/Contoso.WPF.Demo/Contoso.WPF.Demo.csproj
+++ b/Apps/Contoso.WPF.Demo/Contoso.WPF.Demo.csproj
@@ -115,13 +115,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Apps/Contoso.WPF.Demo/MainWindow.xaml b/Apps/Contoso.WPF.Demo/MainWindow.xaml
index a93d00657..423643ff6 100644
--- a/Apps/Contoso.WPF.Demo/MainWindow.xaml
+++ b/Apps/Contoso.WPF.Demo/MainWindow.xaml
@@ -54,6 +54,12 @@
+
+
+
+
+
+
diff --git a/Apps/Contoso.WPF.Demo/MainWindow.xaml.cs b/Apps/Contoso.WPF.Demo/MainWindow.xaml.cs
index 9e1fbe455..2ebbf708d 100644
--- a/Apps/Contoso.WPF.Demo/MainWindow.xaml.cs
+++ b/Apps/Contoso.WPF.Demo/MainWindow.xaml.cs
@@ -41,6 +41,7 @@ public MainWindow()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentLabel.Content = fileAttachments;
+ EnableManualSessionTrackerCheckBox.IsChecked = Settings.Default.EnableManualSessionTracker;
if (!string.IsNullOrEmpty(Settings.Default.CountryCode))
{
CountryCodeEnableCheckbox.IsChecked = true;
@@ -293,7 +294,7 @@ void HandleOrThrow(Action action)
}
#endregion
-
+
private void UserId_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Return)
@@ -325,5 +326,26 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTracker_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTracker_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ Settings.Default.EnableManualSessionTracker = isEnabled;
+ Settings.Default.Save();
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WPF.Demo/Properties/AssemblyInfo.cs b/Apps/Contoso.WPF.Demo/Properties/AssemblyInfo.cs
index 734e4c91b..0704573d5 100644
--- a/Apps/Contoso.WPF.Demo/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.WPF.Demo/Properties/AssemblyInfo.cs
@@ -30,5 +30,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0")]
diff --git a/Apps/Contoso.WPF.Demo/Properties/Settings.Designer.cs b/Apps/Contoso.WPF.Demo/Properties/Settings.Designer.cs
index 013ae91fe..e15a1af7f 100644
--- a/Apps/Contoso.WPF.Demo/Properties/Settings.Designer.cs
+++ b/Apps/Contoso.WPF.Demo/Properties/Settings.Designer.cs
@@ -82,5 +82,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WPF.Demo/Properties/Settings.settings b/Apps/Contoso.WPF.Demo/Properties/Settings.settings
index 0c927cb1a..499840173 100644
--- a/Apps/Contoso.WPF.Demo/Properties/Settings.settings
+++ b/Apps/Contoso.WPF.Demo/Properties/Settings.settings
@@ -17,5 +17,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/App.xaml.cs b/Apps/Contoso.WPF.Puppet.DotNetCore/App.xaml.cs
index 14c403c7a..df03d703b 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/App.xaml.cs
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/App.xaml.cs
@@ -24,6 +24,9 @@ protected override void OnStartup(StartupEventArgs e)
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetLogUrl("https://in-integration.dev.avalanch.es");
AppCenter.SetCountryCode(string.IsNullOrEmpty(Settings.Default.CountryCode) ? null : Settings.Default.CountryCode);
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldAwaitUserConfirmation = ConfirmationHandler;
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/Contoso.WPF.Puppet.DotNetCore.csproj b/Apps/Contoso.WPF.Puppet.DotNetCore/Contoso.WPF.Puppet.DotNetCore.csproj
index ffd557b12..0efd920ef 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/Contoso.WPF.Puppet.DotNetCore.csproj
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/Contoso.WPF.Puppet.DotNetCore.csproj
@@ -4,9 +4,9 @@
WinExe
netcoreapp3.0
true
- 4.4.0-SNAPSHOT
+ 4.5.0-SNAPSHOT
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml b/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml
index 88fc8c9b4..e3bb44414 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml
@@ -101,6 +101,12 @@
Country code has been updated. This value will only be applied to the following sessions.
+
+
+
+
+
+
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml.cs b/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml.cs
index a74434c2f..637fdbba7 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml.cs
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/MainWindow.xaml.cs
@@ -40,6 +40,7 @@ public MainWindow()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentLabel.Content = fileAttachments;
+ EnableManualSessionTrackerCheckBox.IsChecked = Settings.Default.EnableManualSessionTracker;
if (!string.IsNullOrEmpty(Settings.Default.CountryCode))
{
CountryCodeEnableCheckbox.IsChecked = true;
@@ -198,6 +199,27 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.Save();
}
+ private void EnableManualSessionTracker_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTracker_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ Settings.Default.EnableManualSessionTracker = isEnabled;
+ Settings.Default.Save();
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
+
#region Crash
private void CrashesEnabled_Checked(object sender, RoutedEventArgs e)
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.Designer.cs b/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.Designer.cs
index 2113e98f6..fa4b291bd 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.Designer.cs
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.Designer.cs
@@ -82,5 +82,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.settings b/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.settings
index cb24803e4..a6409a167 100644
--- a/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.settings
+++ b/Apps/Contoso.WPF.Puppet.DotNetCore/Settings.settings
@@ -17,5 +17,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WPF.Puppet/App.config b/Apps/Contoso.WPF.Puppet/App.config
index ad7251de4..826198710 100644
--- a/Apps/Contoso.WPF.Puppet/App.config
+++ b/Apps/Contoso.WPF.Puppet/App.config
@@ -25,6 +25,9 @@
0
+
+ False
+
diff --git a/Apps/Contoso.WPF.Puppet/App.xaml.cs b/Apps/Contoso.WPF.Puppet/App.xaml.cs
index 9fa54ebd0..5e77e2670 100644
--- a/Apps/Contoso.WPF.Puppet/App.xaml.cs
+++ b/Apps/Contoso.WPF.Puppet/App.xaml.cs
@@ -24,6 +24,9 @@ protected override void OnStartup(StartupEventArgs e)
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetLogUrl("https://in-integration.dev.avalanch.es");
AppCenter.SetCountryCode(string.IsNullOrEmpty(Settings.Default.CountryCode) ? null : Settings.Default.CountryCode);
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldAwaitUserConfirmation = ConfirmationHandler;
diff --git a/Apps/Contoso.WPF.Puppet/MainWindow.xaml b/Apps/Contoso.WPF.Puppet/MainWindow.xaml
index b878cc932..b8e851197 100644
--- a/Apps/Contoso.WPF.Puppet/MainWindow.xaml
+++ b/Apps/Contoso.WPF.Puppet/MainWindow.xaml
@@ -55,6 +55,12 @@
+
+
+
+
+
+
diff --git a/Apps/Contoso.WPF.Puppet/MainWindow.xaml.cs b/Apps/Contoso.WPF.Puppet/MainWindow.xaml.cs
index abca357da..4e88ca31c 100644
--- a/Apps/Contoso.WPF.Puppet/MainWindow.xaml.cs
+++ b/Apps/Contoso.WPF.Puppet/MainWindow.xaml.cs
@@ -42,6 +42,7 @@ public MainWindow()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentLabel.Content = fileAttachments;
+ EnableManualSessionTrackerCheckBox.IsChecked = Settings.Default.EnableManualSessionTracker;
if (!string.IsNullOrEmpty(Settings.Default.CountryCode))
{
CountryCodeEnableCheckbox.IsChecked = true;
@@ -326,5 +327,26 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTracker_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTracker_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ Settings.Default.EnableManualSessionTracker = isEnabled;
+ Settings.Default.Save();
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WPF.Puppet/Properties/AssemblyInfo.cs b/Apps/Contoso.WPF.Puppet/Properties/AssemblyInfo.cs
index d63491fab..5f3cfedd7 100644
--- a/Apps/Contoso.WPF.Puppet/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.WPF.Puppet/Properties/AssemblyInfo.cs
@@ -30,5 +30,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
diff --git a/Apps/Contoso.WPF.Puppet/Properties/Settings.Designer.cs b/Apps/Contoso.WPF.Puppet/Properties/Settings.Designer.cs
index 9a0b9c613..57b92a5f2 100644
--- a/Apps/Contoso.WPF.Puppet/Properties/Settings.Designer.cs
+++ b/Apps/Contoso.WPF.Puppet/Properties/Settings.Designer.cs
@@ -82,5 +82,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WPF.Puppet/Properties/Settings.settings b/Apps/Contoso.WPF.Puppet/Properties/Settings.settings
index a7bed16be..cdd822b9f 100644
--- a/Apps/Contoso.WPF.Puppet/Properties/Settings.settings
+++ b/Apps/Contoso.WPF.Puppet/Properties/Settings.settings
@@ -17,5 +17,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/Contoso.WinForms.Demo.DotNetCore.csproj b/Apps/Contoso.WinForms.Demo.DotNetCore/Contoso.WinForms.Demo.DotNetCore.csproj
index 57eb9371e..145140400 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/Contoso.WinForms.Demo.DotNetCore.csproj
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/Contoso.WinForms.Demo.DotNetCore.csproj
@@ -4,11 +4,11 @@
WinExe
netcoreapp3.0
true
- 4.4.0
+ 4.5.0
-
-
+
+
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.Designer.cs b/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.Designer.cs
index edf3263ee..9525a2ff9 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.Designer.cs
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.Designer.cs
@@ -35,6 +35,7 @@ private void InitializeComponent()
this.AppCenterTab = new System.Windows.Forms.TabPage();
this.MiscGroupBox = new System.Windows.Forms.GroupBox();
this.SaveSizeStorageButton = new System.Windows.Forms.Button();
+ this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
this.StorageMaxSizeLabel = new System.Windows.Forms.Label();
this.AppCenterEnabled = new System.Windows.Forms.CheckBox();
this.AppCenterAllowNetworkRequests = new System.Windows.Forms.CheckBox();
@@ -63,7 +64,9 @@ private void InitializeComponent()
this.CrashWithNonSerializableException = new System.Windows.Forms.Button();
this.CrashWithTestException = new System.Windows.Forms.Button();
this.CrashesEnabled = new System.Windows.Forms.CheckBox();
- this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.EnableManualSessionTrackerCheckBox = new System.Windows.Forms.CheckBox();
+ this.StartSession = new System.Windows.Forms.Button();
this.Tabs.SuspendLayout();
this.AppCenterTab.SuspendLayout();
this.MiscGroupBox.SuspendLayout();
@@ -73,6 +76,7 @@ private void InitializeComponent()
this.CrashesTab.SuspendLayout();
this.ErrorAttachmentsBox.SuspendLayout();
this.CrashBox.SuspendLayout();
+ this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// Tabs
@@ -85,7 +89,7 @@ private void InitializeComponent()
this.Tabs.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.Tabs.Name = "Tabs";
this.Tabs.SelectedIndex = 0;
- this.Tabs.Size = new System.Drawing.Size(384, 523);
+ this.Tabs.Size = new System.Drawing.Size(448, 603);
this.Tabs.TabIndex = 0;
this.Tabs.SelectedIndexChanged += new System.EventHandler(this.Tabs_SelectedIndexChanged);
//
@@ -94,11 +98,11 @@ private void InitializeComponent()
this.AppCenterTab.Controls.Add(this.MiscGroupBox);
this.AppCenterTab.Controls.Add(this.AppCenterEnabled);
this.AppCenterTab.Controls.Add(this.AppCenterAllowNetworkRequests);
- this.AppCenterTab.Location = new System.Drawing.Point(4, 22);
+ this.AppCenterTab.Location = new System.Drawing.Point(4, 24);
this.AppCenterTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterTab.Name = "AppCenterTab";
this.AppCenterTab.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AppCenterTab.Size = new System.Drawing.Size(376, 497);
+ this.AppCenterTab.Size = new System.Drawing.Size(440, 575);
this.AppCenterTab.TabIndex = 0;
this.AppCenterTab.Text = "App Center";
this.AppCenterTab.UseVisualStyleBackColor = true;
@@ -108,43 +112,54 @@ private void InitializeComponent()
this.MiscGroupBox.Controls.Add(this.SaveSizeStorageButton);
this.MiscGroupBox.Controls.Add(this.StorageMaxSizeTextBox);
this.MiscGroupBox.Controls.Add(this.StorageMaxSizeLabel);
- this.MiscGroupBox.Location = new System.Drawing.Point(8, 36);
+ this.MiscGroupBox.Location = new System.Drawing.Point(9, 42);
+ this.MiscGroupBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.MiscGroupBox.Name = "MiscGroupBox";
- this.MiscGroupBox.Size = new System.Drawing.Size(360, 100);
+ this.MiscGroupBox.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.MiscGroupBox.Size = new System.Drawing.Size(420, 115);
this.MiscGroupBox.TabIndex = 2;
this.MiscGroupBox.TabStop = false;
this.MiscGroupBox.Text = "Misc";
//
// SaveSizeStorageButton
//
- this.SaveSizeStorageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.SaveSizeStorageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.SaveSizeStorageButton.Location = new System.Drawing.Point(10, 61);
+ this.SaveSizeStorageButton.Location = new System.Drawing.Point(12, 70);
this.SaveSizeStorageButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.SaveSizeStorageButton.Name = "SaveSizeStorageButton";
- this.SaveSizeStorageButton.Size = new System.Drawing.Size(342, 23);
+ this.SaveSizeStorageButton.Size = new System.Drawing.Size(399, 27);
this.SaveSizeStorageButton.TabIndex = 15;
this.SaveSizeStorageButton.Text = "Save";
this.SaveSizeStorageButton.UseVisualStyleBackColor = true;
this.SaveSizeStorageButton.Click += new System.EventHandler(this.SaveStorageSize_Click);
//
- // StorageMaxLabel
+ // StorageMaxSizeTextBox
+ //
+ this.StorageMaxSizeTextBox.Location = new System.Drawing.Point(120, 20);
+ this.StorageMaxSizeTextBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.StorageMaxSizeTextBox.Name = "StorageMaxSizeTextBox";
+ this.StorageMaxSizeTextBox.Size = new System.Drawing.Size(116, 23);
+ this.StorageMaxSizeTextBox.TabIndex = 1;
+ //
+ // StorageMaxSizeLabel
//
this.StorageMaxSizeLabel.AutoSize = true;
- this.StorageMaxSizeLabel.Location = new System.Drawing.Point(7, 20);
- this.StorageMaxSizeLabel.Name = "StorageMaxLabel";
- this.StorageMaxSizeLabel.Size = new System.Drawing.Size(90, 13);
+ this.StorageMaxSizeLabel.Location = new System.Drawing.Point(8, 23);
+ this.StorageMaxSizeLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.StorageMaxSizeLabel.Name = "StorageMaxSizeLabel";
+ this.StorageMaxSizeLabel.Size = new System.Drawing.Size(96, 15);
this.StorageMaxSizeLabel.TabIndex = 0;
this.StorageMaxSizeLabel.Text = "Storage Max Size";
//
// AppCenterEnabled
//
- this.AppCenterEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.AppCenterEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterEnabled.Location = new System.Drawing.Point(8, 6);
+ this.AppCenterEnabled.Location = new System.Drawing.Point(9, 7);
this.AppCenterEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterEnabled.Name = "AppCenterEnabled";
- this.AppCenterEnabled.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterEnabled.Size = new System.Drawing.Size(420, 28);
this.AppCenterEnabled.TabIndex = 1;
this.AppCenterEnabled.Text = "App Center Enabled";
this.AppCenterEnabled.UseVisualStyleBackColor = true;
@@ -152,12 +167,12 @@ private void InitializeComponent()
//
// AppCenterAllowNetworkRequests
//
- this.AppCenterAllowNetworkRequests.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.AppCenterAllowNetworkRequests.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterAllowNetworkRequests.Location = new System.Drawing.Point(8, 6);
+ this.AppCenterAllowNetworkRequests.Location = new System.Drawing.Point(9, 7);
this.AppCenterAllowNetworkRequests.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterAllowNetworkRequests.Name = "AppCenterAllowNetworkRequests";
- this.AppCenterAllowNetworkRequests.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterAllowNetworkRequests.Size = new System.Drawing.Size(420, 28);
this.AppCenterAllowNetworkRequests.TabIndex = 1;
this.AppCenterAllowNetworkRequests.Text = "Allow Network Requests";
this.AppCenterAllowNetworkRequests.UseVisualStyleBackColor = true;
@@ -165,13 +180,14 @@ private void InitializeComponent()
//
// AnalyticsTab
//
+ this.AnalyticsTab.Controls.Add(this.groupBox1);
this.AnalyticsTab.Controls.Add(this.EventBox);
this.AnalyticsTab.Controls.Add(this.AnalyticsEnabled);
- this.AnalyticsTab.Location = new System.Drawing.Point(4, 22);
+ this.AnalyticsTab.Location = new System.Drawing.Point(4, 24);
this.AnalyticsTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AnalyticsTab.Name = "AnalyticsTab";
this.AnalyticsTab.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AnalyticsTab.Size = new System.Drawing.Size(376, 497);
+ this.AnalyticsTab.Size = new System.Drawing.Size(440, 575);
this.AnalyticsTab.TabIndex = 1;
this.AnalyticsTab.Text = "Analytics";
this.AnalyticsTab.UseVisualStyleBackColor = true;
@@ -182,11 +198,11 @@ private void InitializeComponent()
this.EventBox.Controls.Add(this.EventProperties);
this.EventBox.Controls.Add(this.EventName);
this.EventBox.Controls.Add(this.EventNameLabel);
- this.EventBox.Location = new System.Drawing.Point(8, 36);
+ this.EventBox.Location = new System.Drawing.Point(9, 42);
this.EventBox.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventBox.Name = "EventBox";
this.EventBox.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.EventBox.Size = new System.Drawing.Size(360, 191);
+ this.EventBox.Size = new System.Drawing.Size(420, 220);
this.EventBox.TabIndex = 3;
this.EventBox.TabStop = false;
this.EventBox.Text = "Event";
@@ -195,10 +211,10 @@ private void InitializeComponent()
//
this.TrackEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.TrackEvent.Location = new System.Drawing.Point(10, 162);
+ this.TrackEvent.Location = new System.Drawing.Point(12, 187);
this.TrackEvent.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.TrackEvent.Name = "TrackEvent";
- this.TrackEvent.Size = new System.Drawing.Size(342, 23);
+ this.TrackEvent.Size = new System.Drawing.Size(399, 27);
this.TrackEvent.TabIndex = 14;
this.TrackEvent.Text = "Track Event";
this.TrackEvent.UseVisualStyleBackColor = true;
@@ -214,12 +230,12 @@ private void InitializeComponent()
this.EventProperties.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Key,
this.Value});
- this.EventProperties.Location = new System.Drawing.Point(10, 44);
+ this.EventProperties.Location = new System.Drawing.Point(12, 51);
this.EventProperties.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventProperties.Name = "EventProperties";
this.EventProperties.RowHeadersWidth = 82;
this.EventProperties.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
- this.EventProperties.Size = new System.Drawing.Size(342, 110);
+ this.EventProperties.Size = new System.Drawing.Size(399, 127);
this.EventProperties.TabIndex = 13;
//
// Key
@@ -244,19 +260,19 @@ private void InitializeComponent()
//
this.EventName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.EventName.Location = new System.Drawing.Point(106, 18);
+ this.EventName.Location = new System.Drawing.Point(124, 21);
this.EventName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventName.MaxLength = 256;
this.EventName.Name = "EventName";
- this.EventName.Size = new System.Drawing.Size(246, 20);
+ this.EventName.Size = new System.Drawing.Size(286, 23);
this.EventName.TabIndex = 12;
//
// EventNameLabel
//
- this.EventNameLabel.Location = new System.Drawing.Point(6, 16);
+ this.EventNameLabel.Location = new System.Drawing.Point(7, 18);
this.EventNameLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.EventNameLabel.Name = "EventNameLabel";
- this.EventNameLabel.Size = new System.Drawing.Size(94, 23);
+ this.EventNameLabel.Size = new System.Drawing.Size(110, 27);
this.EventNameLabel.TabIndex = 11;
this.EventNameLabel.Text = "Event Name";
this.EventNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -265,10 +281,10 @@ private void InitializeComponent()
//
this.AnalyticsEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AnalyticsEnabled.Location = new System.Drawing.Point(8, 6);
+ this.AnalyticsEnabled.Location = new System.Drawing.Point(9, 7);
this.AnalyticsEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AnalyticsEnabled.Name = "AnalyticsEnabled";
- this.AnalyticsEnabled.Size = new System.Drawing.Size(360, 24);
+ this.AnalyticsEnabled.Size = new System.Drawing.Size(420, 28);
this.AnalyticsEnabled.TabIndex = 2;
this.AnalyticsEnabled.Text = "Analytics Enabled";
this.AnalyticsEnabled.UseVisualStyleBackColor = true;
@@ -280,10 +296,10 @@ private void InitializeComponent()
this.CrashesTab.Controls.Add(this.HandleExceptions);
this.CrashesTab.Controls.Add(this.CrashBox);
this.CrashesTab.Controls.Add(this.CrashesEnabled);
- this.CrashesTab.Location = new System.Drawing.Point(4, 22);
+ this.CrashesTab.Location = new System.Drawing.Point(4, 24);
this.CrashesTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashesTab.Name = "CrashesTab";
- this.CrashesTab.Size = new System.Drawing.Size(376, 497);
+ this.CrashesTab.Size = new System.Drawing.Size(440, 575);
this.CrashesTab.TabIndex = 2;
this.CrashesTab.Text = "Crashes";
this.CrashesTab.UseVisualStyleBackColor = true;
@@ -295,18 +311,21 @@ private void InitializeComponent()
this.ErrorAttachmentsBox.Controls.Add(this.FileAttachmentLabel);
this.ErrorAttachmentsBox.Controls.Add(this.TextAttachmentTextBox);
this.ErrorAttachmentsBox.Controls.Add(this.TextAttachmentLabel);
- this.ErrorAttachmentsBox.Location = new System.Drawing.Point(8, 66);
+ this.ErrorAttachmentsBox.Location = new System.Drawing.Point(9, 76);
+ this.ErrorAttachmentsBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.ErrorAttachmentsBox.Name = "ErrorAttachmentsBox";
- this.ErrorAttachmentsBox.Size = new System.Drawing.Size(359, 115);
+ this.ErrorAttachmentsBox.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.ErrorAttachmentsBox.Size = new System.Drawing.Size(419, 133);
this.ErrorAttachmentsBox.TabIndex = 6;
this.ErrorAttachmentsBox.TabStop = false;
this.ErrorAttachmentsBox.Text = "Error Attachments";
//
// SelectFileAttachmentButton
//
- this.SelectFileAttachmentButton.Location = new System.Drawing.Point(9, 86);
+ this.SelectFileAttachmentButton.Location = new System.Drawing.Point(10, 99);
+ this.SelectFileAttachmentButton.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.SelectFileAttachmentButton.Name = "SelectFileAttachmentButton";
- this.SelectFileAttachmentButton.Size = new System.Drawing.Size(340, 23);
+ this.SelectFileAttachmentButton.Size = new System.Drawing.Size(397, 27);
this.SelectFileAttachmentButton.TabIndex = 4;
this.SelectFileAttachmentButton.Text = "Select file attachment";
this.SelectFileAttachmentButton.UseVisualStyleBackColor = true;
@@ -315,34 +334,38 @@ private void InitializeComponent()
// FileAttachmentPathLabel
//
this.FileAttachmentPathLabel.AutoSize = true;
- this.FileAttachmentPathLabel.Location = new System.Drawing.Point(92, 64);
+ this.FileAttachmentPathLabel.Location = new System.Drawing.Point(107, 74);
+ this.FileAttachmentPathLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.FileAttachmentPathLabel.Name = "FileAttachmentPathLabel";
- this.FileAttachmentPathLabel.Size = new System.Drawing.Size(0, 13);
+ this.FileAttachmentPathLabel.Size = new System.Drawing.Size(0, 15);
this.FileAttachmentPathLabel.TabIndex = 3;
//
// FileAttachmentLabel
//
this.FileAttachmentLabel.AutoSize = true;
- this.FileAttachmentLabel.Location = new System.Drawing.Point(6, 64);
+ this.FileAttachmentLabel.Location = new System.Drawing.Point(7, 74);
+ this.FileAttachmentLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.FileAttachmentLabel.Name = "FileAttachmentLabel";
- this.FileAttachmentLabel.Size = new System.Drawing.Size(80, 13);
+ this.FileAttachmentLabel.Size = new System.Drawing.Size(91, 15);
this.FileAttachmentLabel.TabIndex = 2;
this.FileAttachmentLabel.Text = "File Attachment";
//
// TextAttachmentTextBox
//
- this.TextAttachmentTextBox.Location = new System.Drawing.Point(95, 30);
+ this.TextAttachmentTextBox.Location = new System.Drawing.Point(111, 35);
+ this.TextAttachmentTextBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.TextAttachmentTextBox.Name = "TextAttachmentTextBox";
- this.TextAttachmentTextBox.Size = new System.Drawing.Size(254, 20);
+ this.TextAttachmentTextBox.Size = new System.Drawing.Size(296, 23);
this.TextAttachmentTextBox.TabIndex = 1;
this.TextAttachmentTextBox.TextChanged += new System.EventHandler(this.TextAttachmentTextBox_TextChanged);
//
// TextAttachmentLabel
//
this.TextAttachmentLabel.AutoSize = true;
- this.TextAttachmentLabel.Location = new System.Drawing.Point(4, 33);
+ this.TextAttachmentLabel.Location = new System.Drawing.Point(5, 38);
+ this.TextAttachmentLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.TextAttachmentLabel.Name = "TextAttachmentLabel";
- this.TextAttachmentLabel.Size = new System.Drawing.Size(85, 13);
+ this.TextAttachmentLabel.Size = new System.Drawing.Size(94, 15);
this.TextAttachmentLabel.TabIndex = 0;
this.TextAttachmentLabel.Text = "Text Attachment";
//
@@ -350,10 +373,10 @@ private void InitializeComponent()
//
this.HandleExceptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.HandleExceptions.Location = new System.Drawing.Point(8, 36);
+ this.HandleExceptions.Location = new System.Drawing.Point(9, 42);
this.HandleExceptions.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.HandleExceptions.Name = "HandleExceptions";
- this.HandleExceptions.Size = new System.Drawing.Size(360, 24);
+ this.HandleExceptions.Size = new System.Drawing.Size(420, 28);
this.HandleExceptions.TabIndex = 5;
this.HandleExceptions.Text = "Handle Exceptions";
this.HandleExceptions.UseVisualStyleBackColor = true;
@@ -366,11 +389,11 @@ private void InitializeComponent()
this.CrashBox.Controls.Add(this.CrashWithDivisionByZero);
this.CrashBox.Controls.Add(this.CrashWithNonSerializableException);
this.CrashBox.Controls.Add(this.CrashWithTestException);
- this.CrashBox.Location = new System.Drawing.Point(7, 197);
+ this.CrashBox.Location = new System.Drawing.Point(8, 227);
this.CrashBox.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashBox.Name = "CrashBox";
this.CrashBox.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.CrashBox.Size = new System.Drawing.Size(360, 204);
+ this.CrashBox.Size = new System.Drawing.Size(420, 235);
this.CrashBox.TabIndex = 4;
this.CrashBox.TabStop = false;
this.CrashBox.Text = "Crashes";
@@ -379,10 +402,10 @@ private void InitializeComponent()
//
this.CrashInsideAsyncTask.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashInsideAsyncTask.Location = new System.Drawing.Point(8, 167);
+ this.CrashInsideAsyncTask.Location = new System.Drawing.Point(9, 193);
this.CrashInsideAsyncTask.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashInsideAsyncTask.Name = "CrashInsideAsyncTask";
- this.CrashInsideAsyncTask.Size = new System.Drawing.Size(342, 23);
+ this.CrashInsideAsyncTask.Size = new System.Drawing.Size(399, 27);
this.CrashInsideAsyncTask.TabIndex = 19;
this.CrashInsideAsyncTask.Text = "Async task crash";
this.CrashInsideAsyncTask.UseVisualStyleBackColor = true;
@@ -392,10 +415,10 @@ private void InitializeComponent()
//
this.CrashWithNullReference.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithNullReference.Location = new System.Drawing.Point(8, 138);
+ this.CrashWithNullReference.Location = new System.Drawing.Point(9, 159);
this.CrashWithNullReference.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithNullReference.Name = "CrashWithNullReference";
- this.CrashWithNullReference.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithNullReference.Size = new System.Drawing.Size(399, 27);
this.CrashWithNullReference.TabIndex = 18;
this.CrashWithNullReference.Text = "Crash with null reference";
this.CrashWithNullReference.UseVisualStyleBackColor = true;
@@ -405,10 +428,10 @@ private void InitializeComponent()
//
this.CrashWithAggregateException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithAggregateException.Location = new System.Drawing.Point(8, 109);
+ this.CrashWithAggregateException.Location = new System.Drawing.Point(9, 126);
this.CrashWithAggregateException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithAggregateException.Name = "CrashWithAggregateException";
- this.CrashWithAggregateException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithAggregateException.Size = new System.Drawing.Size(399, 27);
this.CrashWithAggregateException.TabIndex = 17;
this.CrashWithAggregateException.Text = "Aggregate Exception";
this.CrashWithAggregateException.UseVisualStyleBackColor = true;
@@ -418,10 +441,10 @@ private void InitializeComponent()
//
this.CrashWithDivisionByZero.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithDivisionByZero.Location = new System.Drawing.Point(8, 80);
+ this.CrashWithDivisionByZero.Location = new System.Drawing.Point(9, 92);
this.CrashWithDivisionByZero.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithDivisionByZero.Name = "CrashWithDivisionByZero";
- this.CrashWithDivisionByZero.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithDivisionByZero.Size = new System.Drawing.Size(399, 27);
this.CrashWithDivisionByZero.TabIndex = 16;
this.CrashWithDivisionByZero.Text = "Divide by zero";
this.CrashWithDivisionByZero.UseVisualStyleBackColor = true;
@@ -431,10 +454,10 @@ private void InitializeComponent()
//
this.CrashWithNonSerializableException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithNonSerializableException.Location = new System.Drawing.Point(8, 51);
+ this.CrashWithNonSerializableException.Location = new System.Drawing.Point(9, 59);
this.CrashWithNonSerializableException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithNonSerializableException.Name = "CrashWithNonSerializableException";
- this.CrashWithNonSerializableException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithNonSerializableException.Size = new System.Drawing.Size(399, 27);
this.CrashWithNonSerializableException.TabIndex = 15;
this.CrashWithNonSerializableException.Text = "Generate non serializable Exception";
this.CrashWithNonSerializableException.UseVisualStyleBackColor = true;
@@ -444,10 +467,10 @@ private void InitializeComponent()
//
this.CrashWithTestException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithTestException.Location = new System.Drawing.Point(8, 22);
+ this.CrashWithTestException.Location = new System.Drawing.Point(9, 25);
this.CrashWithTestException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithTestException.Name = "CrashWithTestException";
- this.CrashWithTestException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithTestException.Size = new System.Drawing.Size(399, 27);
this.CrashWithTestException.TabIndex = 14;
this.CrashWithTestException.Text = "Call Crashes.GenerateTestCrash (debug only)";
this.CrashWithTestException.UseVisualStyleBackColor = true;
@@ -457,34 +480,58 @@ private void InitializeComponent()
//
this.CrashesEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashesEnabled.Location = new System.Drawing.Point(8, 6);
+ this.CrashesEnabled.Location = new System.Drawing.Point(9, 7);
this.CrashesEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashesEnabled.Name = "CrashesEnabled";
- this.CrashesEnabled.Size = new System.Drawing.Size(360, 24);
+ this.CrashesEnabled.Size = new System.Drawing.Size(420, 28);
this.CrashesEnabled.TabIndex = 3;
this.CrashesEnabled.Text = "Crashes Enabled";
this.CrashesEnabled.UseVisualStyleBackColor = true;
this.CrashesEnabled.CheckedChanged += new System.EventHandler(this.CrashesEnabled_CheckedChanged);
//
- // textBox1
- //
- this.StorageMaxSizeTextBox.Location = new System.Drawing.Point(103, 17);
- this.StorageMaxSizeTextBox.Name = "StorageMaxSizeTextBox";
- this.StorageMaxSizeTextBox.Size = new System.Drawing.Size(100, 20);
- this.StorageMaxSizeTextBox.TabIndex = 1;
-
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.StartSession);
+ this.groupBox1.Controls.Add(this.EnableManualSessionTrackerCheckBox);
+ this.groupBox1.Location = new System.Drawing.Point(9, 281);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(420, 109);
+ this.groupBox1.TabIndex = 4;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Settings Session";
+ //
+ // EnableManualSessionTrackerCheckBox
+ //
+ this.EnableManualSessionTrackerCheckBox.AutoSize = true;
+ this.EnableManualSessionTrackerCheckBox.Location = new System.Drawing.Point(8, 32);
+ this.EnableManualSessionTrackerCheckBox.Name = "EnableManualSessionTrackerCheckBox";
+ this.EnableManualSessionTrackerCheckBox.Size = new System.Drawing.Size(226, 19);
+ this.EnableManualSessionTrackerCheckBox.TabIndex = 0;
+ this.EnableManualSessionTrackerCheckBox.Text = "Enable Manual Session Tracker";
+ this.EnableManualSessionTrackerCheckBox.UseVisualStyleBackColor = true;
+ this.EnableManualSessionTrackerCheckBox.CheckedChanged += new System.EventHandler(this.EnableManualSessionTrackerCheckBox_CheckedChanged);
+ //
+ // StartSession
+ //
+ this.StartSession.Location = new System.Drawing.Point(8, 68);
+ this.StartSession.Name = "StartSession";
+ this.StartSession.Size = new System.Drawing.Size(182, 23);
+ this.StartSession.TabIndex = 1;
+ this.StartSession.Text = "Start Session";
+ this.StartSession.UseVisualStyleBackColor = true;
+ this.StartSession.Click += new System.EventHandler(this.StartSession_Click);
//
// MainForm
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(384, 523);
+ this.ClientSize = new System.Drawing.Size(448, 603);
this.Controls.Add(this.Tabs);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.MaximizeBox = false;
this.Name = "MainForm";
- this.Text = "App Center Demo App";
+ this.Text = "App Center Puppet App";
this.Tabs.ResumeLayout(false);
this.AppCenterTab.ResumeLayout(false);
this.MiscGroupBox.ResumeLayout(false);
@@ -497,6 +544,8 @@ private void InitializeComponent()
this.ErrorAttachmentsBox.ResumeLayout(false);
this.ErrorAttachmentsBox.PerformLayout();
this.CrashBox.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
this.ResumeLayout(false);
}
@@ -536,5 +585,8 @@ private void InitializeComponent()
private System.Windows.Forms.Label StorageMaxSizeLabel;
private System.Windows.Forms.TextBox StorageMaxSizeTextBox;
private System.Windows.Forms.Button SaveSizeStorageButton;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button StartSession;
+ private System.Windows.Forms.CheckBox EnableManualSessionTrackerCheckBox;
}
}
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.cs b/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.cs
index 6788d33bc..4bfd789f7 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.cs
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/MainForm.cs
@@ -26,6 +26,7 @@ public MainForm()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentPathLabel.Text = fileAttachments;
+ EnableManualSessionTrackerCheckBox.Checked = Settings.Default.EnableManualSessionTracker;
if (Settings.Default.StorageMaxSize > 0)
{
StorageMaxSizeTextBox.Text = Settings.Default.StorageMaxSize.ToString();
@@ -229,5 +230,16 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTrackerCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ Settings.Default.EnableManualSessionTracker = EnableManualSessionTrackerCheckBox.Checked;
+ Settings.Default.Save();
+ }
+
+ private void StartSession_Click(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/Program.cs b/Apps/Contoso.WinForms.Demo.DotNetCore/Program.cs
index 724018a4e..1828bf25f 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/Program.cs
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/Program.cs
@@ -25,6 +25,9 @@ static void Main()
AppCenter.LogLevel = LogLevel.Verbose;
Crashes.GetErrorAttachments = GetErrorAttachmentsHandler;
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
var storageMaxSize = Settings.Default.StorageMaxSize;
if (storageMaxSize > 0)
{
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.Designer.cs b/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.Designer.cs
index 46bdeab5c..ca093babf 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.Designer.cs
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.Designer.cs
@@ -58,5 +58,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.settings b/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.settings
index cf0cadae4..56dd249c3 100644
--- a/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.settings
+++ b/Apps/Contoso.WinForms.Demo.DotNetCore/Settings.settings
@@ -11,5 +11,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Demo/App.config b/Apps/Contoso.WinForms.Demo/App.config
index 6842778dd..9ccf66eed 100644
--- a/Apps/Contoso.WinForms.Demo/App.config
+++ b/Apps/Contoso.WinForms.Demo/App.config
@@ -19,6 +19,9 @@
+
+ False
+
diff --git a/Apps/Contoso.WinForms.Demo/Contoso.WinForms.Demo.csproj b/Apps/Contoso.WinForms.Demo/Contoso.WinForms.Demo.csproj
index 447f7b520..3778de69d 100644
--- a/Apps/Contoso.WinForms.Demo/Contoso.WinForms.Demo.csproj
+++ b/Apps/Contoso.WinForms.Demo/Contoso.WinForms.Demo.csproj
@@ -81,13 +81,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Demo/MainForm.Designer.cs b/Apps/Contoso.WinForms.Demo/MainForm.Designer.cs
index 15ac87e40..350d8e889 100644
--- a/Apps/Contoso.WinForms.Demo/MainForm.Designer.cs
+++ b/Apps/Contoso.WinForms.Demo/MainForm.Designer.cs
@@ -33,12 +33,15 @@ private void InitializeComponent()
{
this.Tabs = new System.Windows.Forms.TabControl();
this.AppCenterTab = new System.Windows.Forms.TabPage();
+ this.AppCenterAllowNetworkRequest = new System.Windows.Forms.CheckBox();
this.MiscGroupBox = new System.Windows.Forms.GroupBox();
this.SaveSizeStorageButton = new System.Windows.Forms.Button();
this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
this.StorageMaxSizeLabel = new System.Windows.Forms.Label();
this.AppCenterEnabled = new System.Windows.Forms.CheckBox();
this.AnalyticsTab = new System.Windows.Forms.TabPage();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.EnableManualSessionTrackerCheckBox = new System.Windows.Forms.CheckBox();
this.EventBox = new System.Windows.Forms.GroupBox();
this.TrackEvent = new System.Windows.Forms.Button();
this.EventProperties = new System.Windows.Forms.DataGridView();
@@ -63,11 +66,12 @@ private void InitializeComponent()
this.CrashWithNonSerializableException = new System.Windows.Forms.Button();
this.CrashWithTestException = new System.Windows.Forms.Button();
this.CrashesEnabled = new System.Windows.Forms.CheckBox();
- this.AppCenterAllowNetworkRequest = new System.Windows.Forms.CheckBox();
+ this.StartSession = new System.Windows.Forms.Button();
this.Tabs.SuspendLayout();
this.AppCenterTab.SuspendLayout();
this.MiscGroupBox.SuspendLayout();
this.AnalyticsTab.SuspendLayout();
+ this.groupBox1.SuspendLayout();
this.EventBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.EventProperties)).BeginInit();
this.CrashesTab.SuspendLayout();
@@ -103,6 +107,19 @@ private void InitializeComponent()
this.AppCenterTab.Text = "App Center";
this.AppCenterTab.UseVisualStyleBackColor = true;
//
+ // AppCenterAllowNetworkRequest
+ //
+ this.AppCenterAllowNetworkRequest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppCenterAllowNetworkRequest.Location = new System.Drawing.Point(8, 36);
+ this.AppCenterAllowNetworkRequest.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.AppCenterAllowNetworkRequest.Name = "AppCenterAllowNetworkRequest";
+ this.AppCenterAllowNetworkRequest.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterAllowNetworkRequest.TabIndex = 3;
+ this.AppCenterAllowNetworkRequest.Text = "Allow Network Request";
+ this.AppCenterAllowNetworkRequest.UseVisualStyleBackColor = true;
+ this.AppCenterAllowNetworkRequest.CheckedChanged += new System.EventHandler(this.AppCenterAllowNetworkRequest_CheckedChanged);
+ //
// MiscGroupBox
//
this.MiscGroupBox.Controls.Add(this.SaveSizeStorageButton);
@@ -159,6 +176,7 @@ private void InitializeComponent()
//
// AnalyticsTab
//
+ this.AnalyticsTab.Controls.Add(this.groupBox1);
this.AnalyticsTab.Controls.Add(this.EventBox);
this.AnalyticsTab.Controls.Add(this.AnalyticsEnabled);
this.AnalyticsTab.Location = new System.Drawing.Point(4, 22);
@@ -170,6 +188,28 @@ private void InitializeComponent()
this.AnalyticsTab.Text = "Analytics";
this.AnalyticsTab.UseVisualStyleBackColor = true;
//
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.StartSession);
+ this.groupBox1.Controls.Add(this.EnableManualSessionTrackerCheckBox);
+ this.groupBox1.Location = new System.Drawing.Point(9, 234);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(359, 108);
+ this.groupBox1.TabIndex = 4;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Settings Session";
+ //
+ // EnableManualSessionTrackerCheckBox
+ //
+ this.EnableManualSessionTrackerCheckBox.AutoSize = true;
+ this.EnableManualSessionTrackerCheckBox.Location = new System.Drawing.Point(9, 31);
+ this.EnableManualSessionTrackerCheckBox.Name = "EnableManualSessionTrackerCheckBox";
+ this.EnableManualSessionTrackerCheckBox.Size = new System.Drawing.Size(206, 17);
+ this.EnableManualSessionTrackerCheckBox.TabIndex = 0;
+ this.EnableManualSessionTrackerCheckBox.Text = "Enable Manual Session Tracker";
+ this.EnableManualSessionTrackerCheckBox.UseVisualStyleBackColor = true;
+ this.EnableManualSessionTrackerCheckBox.CheckedChanged += new System.EventHandler(this.EnableManualSessionTrackerCheckBox_CheckedChanged);
+ //
// EventBox
//
this.EventBox.Controls.Add(this.TrackEvent);
@@ -460,18 +500,15 @@ private void InitializeComponent()
this.CrashesEnabled.UseVisualStyleBackColor = true;
this.CrashesEnabled.CheckedChanged += new System.EventHandler(this.CrashesEnabled_CheckedChanged);
//
- // AppCenterAllowNetworkRequest
+ // StartSession
//
- this.AppCenterAllowNetworkRequest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterAllowNetworkRequest.Location = new System.Drawing.Point(8, 36);
- this.AppCenterAllowNetworkRequest.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AppCenterAllowNetworkRequest.Name = "AppCenterAllowNetworkRequest";
- this.AppCenterAllowNetworkRequest.Size = new System.Drawing.Size(360, 24);
- this.AppCenterAllowNetworkRequest.TabIndex = 3;
- this.AppCenterAllowNetworkRequest.Text = "Allow Network Request";
- this.AppCenterAllowNetworkRequest.UseVisualStyleBackColor = true;
- this.AppCenterAllowNetworkRequest.CheckedChanged += new System.EventHandler(this.AppCenterAllowNetworkRequest_CheckedChanged);
+ this.StartSession.Location = new System.Drawing.Point(9, 69);
+ this.StartSession.Name = "StartSession";
+ this.StartSession.Size = new System.Drawing.Size(164, 23);
+ this.StartSession.TabIndex = 1;
+ this.StartSession.Text = "Start Session";
+ this.StartSession.UseVisualStyleBackColor = true;
+ this.StartSession.Click += new System.EventHandler(this.StartSession_Click);
//
// MainForm
//
@@ -483,12 +520,14 @@ private void InitializeComponent()
this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.MaximizeBox = false;
this.Name = "MainForm";
- this.Text = "App Center Demo App";
+ this.Text = "App Center Puppet App";
this.Tabs.ResumeLayout(false);
this.AppCenterTab.ResumeLayout(false);
this.MiscGroupBox.ResumeLayout(false);
this.MiscGroupBox.PerformLayout();
this.AnalyticsTab.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
this.EventBox.ResumeLayout(false);
this.EventBox.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.EventProperties)).EndInit();
@@ -535,5 +574,8 @@ private void InitializeComponent()
private System.Windows.Forms.TextBox StorageMaxSizeTextBox;
private System.Windows.Forms.Button SaveSizeStorageButton;
private System.Windows.Forms.CheckBox AppCenterAllowNetworkRequest;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.CheckBox EnableManualSessionTrackerCheckBox;
+ private System.Windows.Forms.Button StartSession;
}
}
diff --git a/Apps/Contoso.WinForms.Demo/MainForm.cs b/Apps/Contoso.WinForms.Demo/MainForm.cs
index cabd77825..0ea6c1827 100644
--- a/Apps/Contoso.WinForms.Demo/MainForm.cs
+++ b/Apps/Contoso.WinForms.Demo/MainForm.cs
@@ -28,6 +28,7 @@ public MainForm()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentPathLabel.Text = fileAttachments;
+ EnableManualSessionTrackerCheckBox.Checked = Settings.Default.EnableManualSessionTracker;
if (Settings.Default.StorageMaxSize > 0)
{
StorageMaxSizeTextBox.Text = Settings.Default.StorageMaxSize.ToString();
@@ -231,5 +232,16 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTrackerCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ Settings.Default.EnableManualSessionTracker = EnableManualSessionTrackerCheckBox.Checked;
+ Settings.Default.Save();
+ }
+
+ private void StartSession_Click(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Demo/Program.cs b/Apps/Contoso.WinForms.Demo/Program.cs
index 16b19ec72..2cfb1e57e 100644
--- a/Apps/Contoso.WinForms.Demo/Program.cs
+++ b/Apps/Contoso.WinForms.Demo/Program.cs
@@ -26,6 +26,9 @@ static void Main()
AppCenter.LogLevel = LogLevel.Verbose;
Crashes.GetErrorAttachments = GetErrorAttachmentsHandler;
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
var storageMaxSize = Settings.Default.StorageMaxSize;
if (storageMaxSize > 0)
{
diff --git a/Apps/Contoso.WinForms.Demo/Properties/AssemblyInfo.cs b/Apps/Contoso.WinForms.Demo/Properties/AssemblyInfo.cs
index 7479e50ad..c96456118 100644
--- a/Apps/Contoso.WinForms.Demo/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.WinForms.Demo/Properties/AssemblyInfo.cs
@@ -28,5 +28,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0")]
diff --git a/Apps/Contoso.WinForms.Demo/Properties/Settings.Designer.cs b/Apps/Contoso.WinForms.Demo/Properties/Settings.Designer.cs
index 3c4481d77..e5599b00b 100644
--- a/Apps/Contoso.WinForms.Demo/Properties/Settings.Designer.cs
+++ b/Apps/Contoso.WinForms.Demo/Properties/Settings.Designer.cs
@@ -58,5 +58,17 @@ public string TextErrorAttachments {
this["TextErrorAttachments"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Demo/Properties/Settings.settings b/Apps/Contoso.WinForms.Demo/Properties/Settings.settings
index b47acf67c..14460b86b 100644
--- a/Apps/Contoso.WinForms.Demo/Properties/Settings.settings
+++ b/Apps/Contoso.WinForms.Demo/Properties/Settings.settings
@@ -11,5 +11,8 @@
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/Contoso.WinForms.Puppet.DotNetCore.csproj b/Apps/Contoso.WinForms.Puppet.DotNetCore/Contoso.WinForms.Puppet.DotNetCore.csproj
index 106be50ac..36784b4c0 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/Contoso.WinForms.Puppet.DotNetCore.csproj
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/Contoso.WinForms.Puppet.DotNetCore.csproj
@@ -4,7 +4,7 @@
WinExe
netcoreapp3.0
true
- 4.4.0-SNAPSHOT
+ 4.5.0-SNAPSHOT
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.Designer.cs b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.Designer.cs
index 99b11caad..364ddec69 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.Designer.cs
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.Designer.cs
@@ -35,6 +35,7 @@ private void InitializeComponent()
this.AppCenterTab = new System.Windows.Forms.TabPage();
this.MiscGroupBox = new System.Windows.Forms.GroupBox();
this.SaveSizeStorageButton = new System.Windows.Forms.Button();
+ this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
this.StorageMaxSizeLabel = new System.Windows.Forms.Label();
this.AppCenterEnabled = new System.Windows.Forms.CheckBox();
this.AppCenterAllowNetworkRequests = new System.Windows.Forms.CheckBox();
@@ -63,7 +64,9 @@ private void InitializeComponent()
this.CrashWithNonSerializableException = new System.Windows.Forms.Button();
this.CrashWithTestException = new System.Windows.Forms.Button();
this.CrashesEnabled = new System.Windows.Forms.CheckBox();
- this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.EnableManualSessionTrackerCheckBox = new System.Windows.Forms.CheckBox();
+ this.StartSession = new System.Windows.Forms.Button();
this.Tabs.SuspendLayout();
this.AppCenterTab.SuspendLayout();
this.MiscGroupBox.SuspendLayout();
@@ -73,6 +76,7 @@ private void InitializeComponent()
this.CrashesTab.SuspendLayout();
this.ErrorAttachmentsBox.SuspendLayout();
this.CrashBox.SuspendLayout();
+ this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// Tabs
@@ -85,7 +89,7 @@ private void InitializeComponent()
this.Tabs.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.Tabs.Name = "Tabs";
this.Tabs.SelectedIndex = 0;
- this.Tabs.Size = new System.Drawing.Size(384, 523);
+ this.Tabs.Size = new System.Drawing.Size(448, 603);
this.Tabs.TabIndex = 0;
this.Tabs.SelectedIndexChanged += new System.EventHandler(this.Tabs_SelectedIndexChanged);
//
@@ -94,11 +98,11 @@ private void InitializeComponent()
this.AppCenterTab.Controls.Add(this.MiscGroupBox);
this.AppCenterTab.Controls.Add(this.AppCenterEnabled);
this.AppCenterTab.Controls.Add(this.AppCenterAllowNetworkRequests);
- this.AppCenterTab.Location = new System.Drawing.Point(4, 22);
+ this.AppCenterTab.Location = new System.Drawing.Point(4, 24);
this.AppCenterTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterTab.Name = "AppCenterTab";
this.AppCenterTab.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AppCenterTab.Size = new System.Drawing.Size(376, 497);
+ this.AppCenterTab.Size = new System.Drawing.Size(440, 575);
this.AppCenterTab.TabIndex = 0;
this.AppCenterTab.Text = "App Center";
this.AppCenterTab.UseVisualStyleBackColor = true;
@@ -108,43 +112,54 @@ private void InitializeComponent()
this.MiscGroupBox.Controls.Add(this.SaveSizeStorageButton);
this.MiscGroupBox.Controls.Add(this.StorageMaxSizeTextBox);
this.MiscGroupBox.Controls.Add(this.StorageMaxSizeLabel);
- this.MiscGroupBox.Location = new System.Drawing.Point(8, 36);
+ this.MiscGroupBox.Location = new System.Drawing.Point(9, 42);
+ this.MiscGroupBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.MiscGroupBox.Name = "MiscGroupBox";
- this.MiscGroupBox.Size = new System.Drawing.Size(360, 100);
+ this.MiscGroupBox.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.MiscGroupBox.Size = new System.Drawing.Size(420, 115);
this.MiscGroupBox.TabIndex = 2;
this.MiscGroupBox.TabStop = false;
this.MiscGroupBox.Text = "Misc";
//
// SaveSizeStorageButton
//
- this.SaveSizeStorageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.SaveSizeStorageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.SaveSizeStorageButton.Location = new System.Drawing.Point(10, 61);
+ this.SaveSizeStorageButton.Location = new System.Drawing.Point(12, 70);
this.SaveSizeStorageButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.SaveSizeStorageButton.Name = "SaveSizeStorageButton";
- this.SaveSizeStorageButton.Size = new System.Drawing.Size(342, 23);
+ this.SaveSizeStorageButton.Size = new System.Drawing.Size(399, 27);
this.SaveSizeStorageButton.TabIndex = 15;
this.SaveSizeStorageButton.Text = "Save";
this.SaveSizeStorageButton.UseVisualStyleBackColor = true;
this.SaveSizeStorageButton.Click += new System.EventHandler(this.SaveStorageSize_Click);
//
- // StorageMaxLabel
+ // StorageMaxSizeTextBox
+ //
+ this.StorageMaxSizeTextBox.Location = new System.Drawing.Point(120, 20);
+ this.StorageMaxSizeTextBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.StorageMaxSizeTextBox.Name = "StorageMaxSizeTextBox";
+ this.StorageMaxSizeTextBox.Size = new System.Drawing.Size(116, 23);
+ this.StorageMaxSizeTextBox.TabIndex = 1;
+ //
+ // StorageMaxSizeLabel
//
this.StorageMaxSizeLabel.AutoSize = true;
- this.StorageMaxSizeLabel.Location = new System.Drawing.Point(7, 20);
- this.StorageMaxSizeLabel.Name = "StorageMaxLabel";
- this.StorageMaxSizeLabel.Size = new System.Drawing.Size(90, 13);
+ this.StorageMaxSizeLabel.Location = new System.Drawing.Point(8, 23);
+ this.StorageMaxSizeLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.StorageMaxSizeLabel.Name = "StorageMaxSizeLabel";
+ this.StorageMaxSizeLabel.Size = new System.Drawing.Size(96, 15);
this.StorageMaxSizeLabel.TabIndex = 0;
this.StorageMaxSizeLabel.Text = "Storage Max Size";
//
// AppCenterEnabled
//
- this.AppCenterEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.AppCenterEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterEnabled.Location = new System.Drawing.Point(8, 6);
+ this.AppCenterEnabled.Location = new System.Drawing.Point(9, 7);
this.AppCenterEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterEnabled.Name = "AppCenterEnabled";
- this.AppCenterEnabled.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterEnabled.Size = new System.Drawing.Size(420, 28);
this.AppCenterEnabled.TabIndex = 1;
this.AppCenterEnabled.Text = "App Center Enabled";
this.AppCenterEnabled.UseVisualStyleBackColor = true;
@@ -152,12 +167,12 @@ private void InitializeComponent()
//
// AppCenterAllowNetworkRequests
//
- this.AppCenterAllowNetworkRequests.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.AppCenterAllowNetworkRequests.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterAllowNetworkRequests.Location = new System.Drawing.Point(8, 6);
+ this.AppCenterAllowNetworkRequests.Location = new System.Drawing.Point(9, 7);
this.AppCenterAllowNetworkRequests.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AppCenterAllowNetworkRequests.Name = "AppCenterAllowNetworkRequests";
- this.AppCenterAllowNetworkRequests.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterAllowNetworkRequests.Size = new System.Drawing.Size(420, 28);
this.AppCenterAllowNetworkRequests.TabIndex = 1;
this.AppCenterAllowNetworkRequests.Text = "Allow Network Requests";
this.AppCenterAllowNetworkRequests.UseVisualStyleBackColor = true;
@@ -165,13 +180,14 @@ private void InitializeComponent()
//
// AnalyticsTab
//
+ this.AnalyticsTab.Controls.Add(this.groupBox1);
this.AnalyticsTab.Controls.Add(this.EventBox);
this.AnalyticsTab.Controls.Add(this.AnalyticsEnabled);
- this.AnalyticsTab.Location = new System.Drawing.Point(4, 22);
+ this.AnalyticsTab.Location = new System.Drawing.Point(4, 24);
this.AnalyticsTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AnalyticsTab.Name = "AnalyticsTab";
this.AnalyticsTab.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AnalyticsTab.Size = new System.Drawing.Size(376, 497);
+ this.AnalyticsTab.Size = new System.Drawing.Size(440, 575);
this.AnalyticsTab.TabIndex = 1;
this.AnalyticsTab.Text = "Analytics";
this.AnalyticsTab.UseVisualStyleBackColor = true;
@@ -182,11 +198,11 @@ private void InitializeComponent()
this.EventBox.Controls.Add(this.EventProperties);
this.EventBox.Controls.Add(this.EventName);
this.EventBox.Controls.Add(this.EventNameLabel);
- this.EventBox.Location = new System.Drawing.Point(8, 36);
+ this.EventBox.Location = new System.Drawing.Point(9, 42);
this.EventBox.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventBox.Name = "EventBox";
this.EventBox.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.EventBox.Size = new System.Drawing.Size(360, 191);
+ this.EventBox.Size = new System.Drawing.Size(420, 220);
this.EventBox.TabIndex = 3;
this.EventBox.TabStop = false;
this.EventBox.Text = "Event";
@@ -195,10 +211,10 @@ private void InitializeComponent()
//
this.TrackEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.TrackEvent.Location = new System.Drawing.Point(10, 162);
+ this.TrackEvent.Location = new System.Drawing.Point(12, 187);
this.TrackEvent.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.TrackEvent.Name = "TrackEvent";
- this.TrackEvent.Size = new System.Drawing.Size(342, 23);
+ this.TrackEvent.Size = new System.Drawing.Size(399, 27);
this.TrackEvent.TabIndex = 14;
this.TrackEvent.Text = "Track Event";
this.TrackEvent.UseVisualStyleBackColor = true;
@@ -214,12 +230,12 @@ private void InitializeComponent()
this.EventProperties.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Key,
this.Value});
- this.EventProperties.Location = new System.Drawing.Point(10, 44);
+ this.EventProperties.Location = new System.Drawing.Point(12, 51);
this.EventProperties.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventProperties.Name = "EventProperties";
this.EventProperties.RowHeadersWidth = 82;
this.EventProperties.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
- this.EventProperties.Size = new System.Drawing.Size(342, 110);
+ this.EventProperties.Size = new System.Drawing.Size(399, 127);
this.EventProperties.TabIndex = 13;
//
// Key
@@ -244,19 +260,19 @@ private void InitializeComponent()
//
this.EventName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.EventName.Location = new System.Drawing.Point(106, 18);
+ this.EventName.Location = new System.Drawing.Point(124, 21);
this.EventName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.EventName.MaxLength = 256;
this.EventName.Name = "EventName";
- this.EventName.Size = new System.Drawing.Size(246, 20);
+ this.EventName.Size = new System.Drawing.Size(286, 23);
this.EventName.TabIndex = 12;
//
// EventNameLabel
//
- this.EventNameLabel.Location = new System.Drawing.Point(6, 16);
+ this.EventNameLabel.Location = new System.Drawing.Point(7, 18);
this.EventNameLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.EventNameLabel.Name = "EventNameLabel";
- this.EventNameLabel.Size = new System.Drawing.Size(94, 23);
+ this.EventNameLabel.Size = new System.Drawing.Size(110, 27);
this.EventNameLabel.TabIndex = 11;
this.EventNameLabel.Text = "Event Name";
this.EventNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -265,10 +281,10 @@ private void InitializeComponent()
//
this.AnalyticsEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.AnalyticsEnabled.Location = new System.Drawing.Point(8, 6);
+ this.AnalyticsEnabled.Location = new System.Drawing.Point(9, 7);
this.AnalyticsEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.AnalyticsEnabled.Name = "AnalyticsEnabled";
- this.AnalyticsEnabled.Size = new System.Drawing.Size(360, 24);
+ this.AnalyticsEnabled.Size = new System.Drawing.Size(420, 28);
this.AnalyticsEnabled.TabIndex = 2;
this.AnalyticsEnabled.Text = "Analytics Enabled";
this.AnalyticsEnabled.UseVisualStyleBackColor = true;
@@ -280,10 +296,10 @@ private void InitializeComponent()
this.CrashesTab.Controls.Add(this.HandleExceptions);
this.CrashesTab.Controls.Add(this.CrashBox);
this.CrashesTab.Controls.Add(this.CrashesEnabled);
- this.CrashesTab.Location = new System.Drawing.Point(4, 22);
+ this.CrashesTab.Location = new System.Drawing.Point(4, 24);
this.CrashesTab.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashesTab.Name = "CrashesTab";
- this.CrashesTab.Size = new System.Drawing.Size(376, 497);
+ this.CrashesTab.Size = new System.Drawing.Size(440, 575);
this.CrashesTab.TabIndex = 2;
this.CrashesTab.Text = "Crashes";
this.CrashesTab.UseVisualStyleBackColor = true;
@@ -295,18 +311,21 @@ private void InitializeComponent()
this.ErrorAttachmentsBox.Controls.Add(this.FileAttachmentLabel);
this.ErrorAttachmentsBox.Controls.Add(this.TextAttachmentTextBox);
this.ErrorAttachmentsBox.Controls.Add(this.TextAttachmentLabel);
- this.ErrorAttachmentsBox.Location = new System.Drawing.Point(8, 66);
+ this.ErrorAttachmentsBox.Location = new System.Drawing.Point(9, 76);
+ this.ErrorAttachmentsBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.ErrorAttachmentsBox.Name = "ErrorAttachmentsBox";
- this.ErrorAttachmentsBox.Size = new System.Drawing.Size(359, 115);
+ this.ErrorAttachmentsBox.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.ErrorAttachmentsBox.Size = new System.Drawing.Size(419, 133);
this.ErrorAttachmentsBox.TabIndex = 6;
this.ErrorAttachmentsBox.TabStop = false;
this.ErrorAttachmentsBox.Text = "Error Attachments";
//
// SelectFileAttachmentButton
//
- this.SelectFileAttachmentButton.Location = new System.Drawing.Point(9, 86);
+ this.SelectFileAttachmentButton.Location = new System.Drawing.Point(10, 99);
+ this.SelectFileAttachmentButton.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.SelectFileAttachmentButton.Name = "SelectFileAttachmentButton";
- this.SelectFileAttachmentButton.Size = new System.Drawing.Size(340, 23);
+ this.SelectFileAttachmentButton.Size = new System.Drawing.Size(397, 27);
this.SelectFileAttachmentButton.TabIndex = 4;
this.SelectFileAttachmentButton.Text = "Select file attachment";
this.SelectFileAttachmentButton.UseVisualStyleBackColor = true;
@@ -315,34 +334,38 @@ private void InitializeComponent()
// FileAttachmentPathLabel
//
this.FileAttachmentPathLabel.AutoSize = true;
- this.FileAttachmentPathLabel.Location = new System.Drawing.Point(92, 64);
+ this.FileAttachmentPathLabel.Location = new System.Drawing.Point(107, 74);
+ this.FileAttachmentPathLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.FileAttachmentPathLabel.Name = "FileAttachmentPathLabel";
- this.FileAttachmentPathLabel.Size = new System.Drawing.Size(0, 13);
+ this.FileAttachmentPathLabel.Size = new System.Drawing.Size(0, 15);
this.FileAttachmentPathLabel.TabIndex = 3;
//
// FileAttachmentLabel
//
this.FileAttachmentLabel.AutoSize = true;
- this.FileAttachmentLabel.Location = new System.Drawing.Point(6, 64);
+ this.FileAttachmentLabel.Location = new System.Drawing.Point(7, 74);
+ this.FileAttachmentLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.FileAttachmentLabel.Name = "FileAttachmentLabel";
- this.FileAttachmentLabel.Size = new System.Drawing.Size(80, 13);
+ this.FileAttachmentLabel.Size = new System.Drawing.Size(91, 15);
this.FileAttachmentLabel.TabIndex = 2;
this.FileAttachmentLabel.Text = "File Attachment";
//
// TextAttachmentTextBox
//
- this.TextAttachmentTextBox.Location = new System.Drawing.Point(95, 30);
+ this.TextAttachmentTextBox.Location = new System.Drawing.Point(111, 35);
+ this.TextAttachmentTextBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.TextAttachmentTextBox.Name = "TextAttachmentTextBox";
- this.TextAttachmentTextBox.Size = new System.Drawing.Size(254, 20);
+ this.TextAttachmentTextBox.Size = new System.Drawing.Size(296, 23);
this.TextAttachmentTextBox.TabIndex = 1;
this.TextAttachmentTextBox.TextChanged += new System.EventHandler(this.TextAttachmentTextBox_TextChanged);
//
// TextAttachmentLabel
//
this.TextAttachmentLabel.AutoSize = true;
- this.TextAttachmentLabel.Location = new System.Drawing.Point(4, 33);
+ this.TextAttachmentLabel.Location = new System.Drawing.Point(5, 38);
+ this.TextAttachmentLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.TextAttachmentLabel.Name = "TextAttachmentLabel";
- this.TextAttachmentLabel.Size = new System.Drawing.Size(85, 13);
+ this.TextAttachmentLabel.Size = new System.Drawing.Size(94, 15);
this.TextAttachmentLabel.TabIndex = 0;
this.TextAttachmentLabel.Text = "Text Attachment";
//
@@ -350,10 +373,10 @@ private void InitializeComponent()
//
this.HandleExceptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.HandleExceptions.Location = new System.Drawing.Point(8, 36);
+ this.HandleExceptions.Location = new System.Drawing.Point(9, 42);
this.HandleExceptions.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.HandleExceptions.Name = "HandleExceptions";
- this.HandleExceptions.Size = new System.Drawing.Size(360, 24);
+ this.HandleExceptions.Size = new System.Drawing.Size(420, 28);
this.HandleExceptions.TabIndex = 5;
this.HandleExceptions.Text = "Handle Exceptions";
this.HandleExceptions.UseVisualStyleBackColor = true;
@@ -366,11 +389,11 @@ private void InitializeComponent()
this.CrashBox.Controls.Add(this.CrashWithDivisionByZero);
this.CrashBox.Controls.Add(this.CrashWithNonSerializableException);
this.CrashBox.Controls.Add(this.CrashWithTestException);
- this.CrashBox.Location = new System.Drawing.Point(7, 197);
+ this.CrashBox.Location = new System.Drawing.Point(8, 227);
this.CrashBox.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashBox.Name = "CrashBox";
this.CrashBox.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.CrashBox.Size = new System.Drawing.Size(360, 204);
+ this.CrashBox.Size = new System.Drawing.Size(420, 235);
this.CrashBox.TabIndex = 4;
this.CrashBox.TabStop = false;
this.CrashBox.Text = "Crashes";
@@ -379,10 +402,10 @@ private void InitializeComponent()
//
this.CrashInsideAsyncTask.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashInsideAsyncTask.Location = new System.Drawing.Point(8, 167);
+ this.CrashInsideAsyncTask.Location = new System.Drawing.Point(9, 193);
this.CrashInsideAsyncTask.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashInsideAsyncTask.Name = "CrashInsideAsyncTask";
- this.CrashInsideAsyncTask.Size = new System.Drawing.Size(342, 23);
+ this.CrashInsideAsyncTask.Size = new System.Drawing.Size(399, 27);
this.CrashInsideAsyncTask.TabIndex = 19;
this.CrashInsideAsyncTask.Text = "Async task crash";
this.CrashInsideAsyncTask.UseVisualStyleBackColor = true;
@@ -392,10 +415,10 @@ private void InitializeComponent()
//
this.CrashWithNullReference.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithNullReference.Location = new System.Drawing.Point(8, 138);
+ this.CrashWithNullReference.Location = new System.Drawing.Point(9, 159);
this.CrashWithNullReference.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithNullReference.Name = "CrashWithNullReference";
- this.CrashWithNullReference.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithNullReference.Size = new System.Drawing.Size(399, 27);
this.CrashWithNullReference.TabIndex = 18;
this.CrashWithNullReference.Text = "Crash with null reference";
this.CrashWithNullReference.UseVisualStyleBackColor = true;
@@ -405,10 +428,10 @@ private void InitializeComponent()
//
this.CrashWithAggregateException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithAggregateException.Location = new System.Drawing.Point(8, 109);
+ this.CrashWithAggregateException.Location = new System.Drawing.Point(9, 126);
this.CrashWithAggregateException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithAggregateException.Name = "CrashWithAggregateException";
- this.CrashWithAggregateException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithAggregateException.Size = new System.Drawing.Size(399, 27);
this.CrashWithAggregateException.TabIndex = 17;
this.CrashWithAggregateException.Text = "Aggregate Exception";
this.CrashWithAggregateException.UseVisualStyleBackColor = true;
@@ -418,10 +441,10 @@ private void InitializeComponent()
//
this.CrashWithDivisionByZero.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithDivisionByZero.Location = new System.Drawing.Point(8, 80);
+ this.CrashWithDivisionByZero.Location = new System.Drawing.Point(9, 92);
this.CrashWithDivisionByZero.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithDivisionByZero.Name = "CrashWithDivisionByZero";
- this.CrashWithDivisionByZero.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithDivisionByZero.Size = new System.Drawing.Size(399, 27);
this.CrashWithDivisionByZero.TabIndex = 16;
this.CrashWithDivisionByZero.Text = "Divide by zero";
this.CrashWithDivisionByZero.UseVisualStyleBackColor = true;
@@ -431,10 +454,10 @@ private void InitializeComponent()
//
this.CrashWithNonSerializableException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithNonSerializableException.Location = new System.Drawing.Point(8, 51);
+ this.CrashWithNonSerializableException.Location = new System.Drawing.Point(9, 59);
this.CrashWithNonSerializableException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithNonSerializableException.Name = "CrashWithNonSerializableException";
- this.CrashWithNonSerializableException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithNonSerializableException.Size = new System.Drawing.Size(399, 27);
this.CrashWithNonSerializableException.TabIndex = 15;
this.CrashWithNonSerializableException.Text = "Generate non serializable Exception";
this.CrashWithNonSerializableException.UseVisualStyleBackColor = true;
@@ -444,10 +467,10 @@ private void InitializeComponent()
//
this.CrashWithTestException.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashWithTestException.Location = new System.Drawing.Point(8, 22);
+ this.CrashWithTestException.Location = new System.Drawing.Point(9, 25);
this.CrashWithTestException.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashWithTestException.Name = "CrashWithTestException";
- this.CrashWithTestException.Size = new System.Drawing.Size(342, 23);
+ this.CrashWithTestException.Size = new System.Drawing.Size(399, 27);
this.CrashWithTestException.TabIndex = 14;
this.CrashWithTestException.Text = "Call Crashes.GenerateTestCrash (debug only)";
this.CrashWithTestException.UseVisualStyleBackColor = true;
@@ -457,28 +480,52 @@ private void InitializeComponent()
//
this.CrashesEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.CrashesEnabled.Location = new System.Drawing.Point(8, 6);
+ this.CrashesEnabled.Location = new System.Drawing.Point(9, 7);
this.CrashesEnabled.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.CrashesEnabled.Name = "CrashesEnabled";
- this.CrashesEnabled.Size = new System.Drawing.Size(360, 24);
+ this.CrashesEnabled.Size = new System.Drawing.Size(420, 28);
this.CrashesEnabled.TabIndex = 3;
this.CrashesEnabled.Text = "Crashes Enabled";
this.CrashesEnabled.UseVisualStyleBackColor = true;
this.CrashesEnabled.CheckedChanged += new System.EventHandler(this.CrashesEnabled_CheckedChanged);
//
- // textBox1
- //
- this.StorageMaxSizeTextBox.Location = new System.Drawing.Point(103, 17);
- this.StorageMaxSizeTextBox.Name = "StorageMaxSizeTextBox";
- this.StorageMaxSizeTextBox.Size = new System.Drawing.Size(100, 20);
- this.StorageMaxSizeTextBox.TabIndex = 1;
-
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.StartSession);
+ this.groupBox1.Controls.Add(this.EnableManualSessionTrackerCheckBox);
+ this.groupBox1.Location = new System.Drawing.Point(9, 281);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(420, 109);
+ this.groupBox1.TabIndex = 4;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Settings Session";
+ //
+ // EnableManualSessionTrackerCheckBox
+ //
+ this.EnableManualSessionTrackerCheckBox.AutoSize = true;
+ this.EnableManualSessionTrackerCheckBox.Location = new System.Drawing.Point(8, 32);
+ this.EnableManualSessionTrackerCheckBox.Name = "EnableManualSessionTrackerCheckBox";
+ this.EnableManualSessionTrackerCheckBox.Size = new System.Drawing.Size(226, 19);
+ this.EnableManualSessionTrackerCheckBox.TabIndex = 0;
+ this.EnableManualSessionTrackerCheckBox.Text = "Enable Manual Session Tracker";
+ this.EnableManualSessionTrackerCheckBox.UseVisualStyleBackColor = true;
+ this.EnableManualSessionTrackerCheckBox.CheckedChanged += new System.EventHandler(this.EnableManualSessionTrackerCheckBox_CheckedChanged);
+ //
+ // StartSession
+ //
+ this.StartSession.Location = new System.Drawing.Point(8, 68);
+ this.StartSession.Name = "StartSession";
+ this.StartSession.Size = new System.Drawing.Size(182, 23);
+ this.StartSession.TabIndex = 1;
+ this.StartSession.Text = "Start Session";
+ this.StartSession.UseVisualStyleBackColor = true;
+ this.StartSession.Click += new System.EventHandler(this.StartSession_Click);
//
// MainForm
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(384, 523);
+ this.ClientSize = new System.Drawing.Size(448, 603);
this.Controls.Add(this.Tabs);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
@@ -497,6 +544,8 @@ private void InitializeComponent()
this.ErrorAttachmentsBox.ResumeLayout(false);
this.ErrorAttachmentsBox.PerformLayout();
this.CrashBox.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
this.ResumeLayout(false);
}
@@ -536,5 +585,8 @@ private void InitializeComponent()
private System.Windows.Forms.Label StorageMaxSizeLabel;
private System.Windows.Forms.TextBox StorageMaxSizeTextBox;
private System.Windows.Forms.Button SaveSizeStorageButton;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button StartSession;
+ private System.Windows.Forms.CheckBox EnableManualSessionTrackerCheckBox;
}
}
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.cs b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.cs
index 0e4e82b13..76cbf02b3 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.cs
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.cs
@@ -26,6 +26,7 @@ public MainForm()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentPathLabel.Text = fileAttachments;
+ EnableManualSessionTrackerCheckBox.Checked = Settings.Default.EnableManualSessionTracker;
if (Settings.Default.StorageMaxSize > 0)
{
StorageMaxSizeTextBox.Text = Settings.Default.StorageMaxSize.ToString();
@@ -229,5 +230,16 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTrackerCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ Settings.Default.EnableManualSessionTracker = EnableManualSessionTrackerCheckBox.Checked;
+ Settings.Default.Save();
+ }
+
+ private void StartSession_Click(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.resx b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.resx
index 5bca00836..8665ff830 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.resx
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/MainForm.resx
@@ -123,4 +123,10 @@
True
+
+ True
+
+
+ True
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/Program.cs b/Apps/Contoso.WinForms.Puppet.DotNetCore/Program.cs
index d24ae2ad9..7393110c1 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/Program.cs
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/Program.cs
@@ -24,6 +24,9 @@ static void Main()
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetLogUrl("https://in-integration.dev.avalanch.es");
Crashes.GetErrorAttachments = GetErrorAttachmentsHandler;
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
var storageMaxSize = Settings.Default.StorageMaxSize;
if (storageMaxSize > 0)
{
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.Designer.cs b/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.Designer.cs
index eaee91334..2bfcb2e6b 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.Designer.cs
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.Designer.cs
@@ -58,5 +58,17 @@ public long StorageMaxSize {
this["StorageMaxSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.settings b/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.settings
index 9e54a7561..0d081b00b 100644
--- a/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.settings
+++ b/Apps/Contoso.WinForms.Puppet.DotNetCore/Settings.settings
@@ -11,5 +11,8 @@
0
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Puppet/App.config b/Apps/Contoso.WinForms.Puppet/App.config
index 54240c512..8770638ba 100644
--- a/Apps/Contoso.WinForms.Puppet/App.config
+++ b/Apps/Contoso.WinForms.Puppet/App.config
@@ -19,6 +19,9 @@
+
+ False
+
diff --git a/Apps/Contoso.WinForms.Puppet/MainForm.Designer.cs b/Apps/Contoso.WinForms.Puppet/MainForm.Designer.cs
index 16682ce45..765c9b840 100644
--- a/Apps/Contoso.WinForms.Puppet/MainForm.Designer.cs
+++ b/Apps/Contoso.WinForms.Puppet/MainForm.Designer.cs
@@ -33,12 +33,15 @@ private void InitializeComponent()
{
this.Tabs = new System.Windows.Forms.TabControl();
this.AppCenterTab = new System.Windows.Forms.TabPage();
+ this.AppCenterAllowNetworkRequest = new System.Windows.Forms.CheckBox();
this.MiscGroupBox = new System.Windows.Forms.GroupBox();
this.SaveSizeStorageButton = new System.Windows.Forms.Button();
this.StorageMaxSizeTextBox = new System.Windows.Forms.TextBox();
this.StorageMaxSizeLabel = new System.Windows.Forms.Label();
this.AppCenterEnabled = new System.Windows.Forms.CheckBox();
this.AnalyticsTab = new System.Windows.Forms.TabPage();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.EnableManualSessionTrackerCheckBox = new System.Windows.Forms.CheckBox();
this.EventBox = new System.Windows.Forms.GroupBox();
this.TrackEvent = new System.Windows.Forms.Button();
this.EventProperties = new System.Windows.Forms.DataGridView();
@@ -63,11 +66,12 @@ private void InitializeComponent()
this.CrashWithNonSerializableException = new System.Windows.Forms.Button();
this.CrashWithTestException = new System.Windows.Forms.Button();
this.CrashesEnabled = new System.Windows.Forms.CheckBox();
- this.AppCenterAllowNetworkRequest = new System.Windows.Forms.CheckBox();
+ this.StartSession = new System.Windows.Forms.Button();
this.Tabs.SuspendLayout();
this.AppCenterTab.SuspendLayout();
this.MiscGroupBox.SuspendLayout();
this.AnalyticsTab.SuspendLayout();
+ this.groupBox1.SuspendLayout();
this.EventBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.EventProperties)).BeginInit();
this.CrashesTab.SuspendLayout();
@@ -103,6 +107,19 @@ private void InitializeComponent()
this.AppCenterTab.Text = "App Center";
this.AppCenterTab.UseVisualStyleBackColor = true;
//
+ // AppCenterAllowNetworkRequest
+ //
+ this.AppCenterAllowNetworkRequest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppCenterAllowNetworkRequest.Location = new System.Drawing.Point(8, 36);
+ this.AppCenterAllowNetworkRequest.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.AppCenterAllowNetworkRequest.Name = "AppCenterAllowNetworkRequest";
+ this.AppCenterAllowNetworkRequest.Size = new System.Drawing.Size(360, 24);
+ this.AppCenterAllowNetworkRequest.TabIndex = 3;
+ this.AppCenterAllowNetworkRequest.Text = "Allow Network Request";
+ this.AppCenterAllowNetworkRequest.UseVisualStyleBackColor = true;
+ this.AppCenterAllowNetworkRequest.CheckedChanged += new System.EventHandler(this.AppCenterAllowNetworkRequest_CheckedChanged);
+ //
// MiscGroupBox
//
this.MiscGroupBox.Controls.Add(this.SaveSizeStorageButton);
@@ -159,6 +176,7 @@ private void InitializeComponent()
//
// AnalyticsTab
//
+ this.AnalyticsTab.Controls.Add(this.groupBox1);
this.AnalyticsTab.Controls.Add(this.EventBox);
this.AnalyticsTab.Controls.Add(this.AnalyticsEnabled);
this.AnalyticsTab.Location = new System.Drawing.Point(4, 22);
@@ -170,6 +188,28 @@ private void InitializeComponent()
this.AnalyticsTab.Text = "Analytics";
this.AnalyticsTab.UseVisualStyleBackColor = true;
//
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.StartSession);
+ this.groupBox1.Controls.Add(this.EnableManualSessionTrackerCheckBox);
+ this.groupBox1.Location = new System.Drawing.Point(9, 234);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(359, 108);
+ this.groupBox1.TabIndex = 4;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Settings Session";
+ //
+ // EnableManualSessionTrackerCheckBox
+ //
+ this.EnableManualSessionTrackerCheckBox.AutoSize = true;
+ this.EnableManualSessionTrackerCheckBox.Location = new System.Drawing.Point(9, 31);
+ this.EnableManualSessionTrackerCheckBox.Name = "EnableManualSessionTrackerCheckBox";
+ this.EnableManualSessionTrackerCheckBox.Size = new System.Drawing.Size(206, 17);
+ this.EnableManualSessionTrackerCheckBox.TabIndex = 0;
+ this.EnableManualSessionTrackerCheckBox.Text = "Enable Manual Session Tracker";
+ this.EnableManualSessionTrackerCheckBox.UseVisualStyleBackColor = true;
+ this.EnableManualSessionTrackerCheckBox.CheckedChanged += new System.EventHandler(this.EnableManualSessionTrackerCheckBox_CheckedChanged);
+ //
// EventBox
//
this.EventBox.Controls.Add(this.TrackEvent);
@@ -460,18 +500,15 @@ private void InitializeComponent()
this.CrashesEnabled.UseVisualStyleBackColor = true;
this.CrashesEnabled.CheckedChanged += new System.EventHandler(this.CrashesEnabled_CheckedChanged);
//
- // AppCenterAllowNetworkRequest
+ // StartSession
//
- this.AppCenterAllowNetworkRequest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.AppCenterAllowNetworkRequest.Location = new System.Drawing.Point(8, 36);
- this.AppCenterAllowNetworkRequest.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.AppCenterAllowNetworkRequest.Name = "AppCenterAllowNetworkRequest";
- this.AppCenterAllowNetworkRequest.Size = new System.Drawing.Size(360, 24);
- this.AppCenterAllowNetworkRequest.TabIndex = 3;
- this.AppCenterAllowNetworkRequest.Text = "Allow Network Request";
- this.AppCenterAllowNetworkRequest.UseVisualStyleBackColor = true;
- this.AppCenterAllowNetworkRequest.CheckedChanged += new System.EventHandler(this.AppCenterAllowNetworkRequest_CheckedChanged);
+ this.StartSession.Location = new System.Drawing.Point(9, 69);
+ this.StartSession.Name = "StartSession";
+ this.StartSession.Size = new System.Drawing.Size(164, 23);
+ this.StartSession.TabIndex = 1;
+ this.StartSession.Text = "Start Session";
+ this.StartSession.UseVisualStyleBackColor = true;
+ this.StartSession.Click += new System.EventHandler(this.StartSession_Click);
//
// MainForm
//
@@ -489,6 +526,8 @@ private void InitializeComponent()
this.MiscGroupBox.ResumeLayout(false);
this.MiscGroupBox.PerformLayout();
this.AnalyticsTab.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
this.EventBox.ResumeLayout(false);
this.EventBox.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.EventProperties)).EndInit();
@@ -535,6 +574,9 @@ private void InitializeComponent()
private System.Windows.Forms.TextBox StorageMaxSizeTextBox;
private System.Windows.Forms.Button SaveSizeStorageButton;
private System.Windows.Forms.CheckBox AppCenterAllowNetworkRequest;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.CheckBox EnableManualSessionTrackerCheckBox;
+ private System.Windows.Forms.Button StartSession;
}
}
diff --git a/Apps/Contoso.WinForms.Puppet/MainForm.cs b/Apps/Contoso.WinForms.Puppet/MainForm.cs
index 458b46afc..dd0f3df07 100644
--- a/Apps/Contoso.WinForms.Puppet/MainForm.cs
+++ b/Apps/Contoso.WinForms.Puppet/MainForm.cs
@@ -28,6 +28,7 @@ public MainForm()
textAttachments = Settings.Default.TextErrorAttachments;
TextAttachmentTextBox.Text = textAttachments;
FileAttachmentPathLabel.Text = fileAttachments;
+ EnableManualSessionTrackerCheckBox.Checked = Settings.Default.EnableManualSessionTracker;
if (Settings.Default.StorageMaxSize > 0)
{
StorageMaxSizeTextBox.Text = Settings.Default.StorageMaxSize.ToString();
@@ -231,5 +232,16 @@ private void SaveStorageSize_Click(object sender, EventArgs e)
Settings.Default.StorageMaxSize = size;
Settings.Default.Save();
}
+
+ private void EnableManualSessionTrackerCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ Settings.Default.EnableManualSessionTracker = EnableManualSessionTrackerCheckBox.Checked;
+ Settings.Default.Save();
+ }
+
+ private void StartSession_Click(object sender, EventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Puppet/MainForm.resx b/Apps/Contoso.WinForms.Puppet/MainForm.resx
index 5bca00836..8665ff830 100644
--- a/Apps/Contoso.WinForms.Puppet/MainForm.resx
+++ b/Apps/Contoso.WinForms.Puppet/MainForm.resx
@@ -123,4 +123,10 @@
True
+
+ True
+
+
+ True
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinForms.Puppet/Program.cs b/Apps/Contoso.WinForms.Puppet/Program.cs
index fefa9124b..85588bb2d 100644
--- a/Apps/Contoso.WinForms.Puppet/Program.cs
+++ b/Apps/Contoso.WinForms.Puppet/Program.cs
@@ -26,6 +26,9 @@ static void Main()
AppCenter.LogLevel = LogLevel.Verbose;
AppCenter.SetLogUrl("https://in-integration.dev.avalanch.es");
Crashes.GetErrorAttachments = GetErrorAttachmentsHandler;
+ if (Settings.Default.EnableManualSessionTracker) {
+ Analytics.EnableManualSessionTracker();
+ }
var storageMaxSize = Settings.Default.StorageMaxSize;
if (storageMaxSize > 0)
{
diff --git a/Apps/Contoso.WinForms.Puppet/Properties/AssemblyInfo.cs b/Apps/Contoso.WinForms.Puppet/Properties/AssemblyInfo.cs
index e8dbcb7e6..6ce4c6146 100644
--- a/Apps/Contoso.WinForms.Puppet/Properties/AssemblyInfo.cs
+++ b/Apps/Contoso.WinForms.Puppet/Properties/AssemblyInfo.cs
@@ -28,5 +28,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
diff --git a/Apps/Contoso.WinForms.Puppet/Properties/Settings.Designer.cs b/Apps/Contoso.WinForms.Puppet/Properties/Settings.Designer.cs
index 22de37b07..3d03ba55d 100644
--- a/Apps/Contoso.WinForms.Puppet/Properties/Settings.Designer.cs
+++ b/Apps/Contoso.WinForms.Puppet/Properties/Settings.Designer.cs
@@ -58,5 +58,17 @@ public string TextErrorAttachments {
this["TextErrorAttachments"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool EnableManualSessionTracker {
+ get {
+ return ((bool)(this["EnableManualSessionTracker"]));
+ }
+ set {
+ this["EnableManualSessionTracker"] = value;
+ }
+ }
}
}
diff --git a/Apps/Contoso.WinForms.Puppet/Properties/Settings.settings b/Apps/Contoso.WinForms.Puppet/Properties/Settings.settings
index 42b9e93b8..2325aae0b 100644
--- a/Apps/Contoso.WinForms.Puppet/Properties/Settings.settings
+++ b/Apps/Contoso.WinForms.Puppet/Properties/Settings.settings
@@ -11,5 +11,8 @@
+
+ False
+
\ No newline at end of file
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo (Package)/Package.appxmanifest b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo (Package)/Package.appxmanifest
index ddc87fb10..c07926f9a 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo (Package)/Package.appxmanifest
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo (Package)/Package.appxmanifest
@@ -9,7 +9,7 @@
+ Version="4.5.0.0" />
Contoso.WinUI.Desktop.Demo (Package)
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/App.xaml.cs b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/App.xaml.cs
index 9295c8b4a..6ae12be52 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/App.xaml.cs
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/App.xaml.cs
@@ -52,6 +52,11 @@ public App()
{
AppCenter.SetMaxStorageSizeAsync((long)storageSize);
}
+ var isManualSessionTrackerEnabled = localSettings.Values[Constants.KeyEnableManualSessionTracker] as bool?;
+ if (isManualSessionTrackerEnabled != null && isManualSessionTrackerEnabled.Value)
+ {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldProcessErrorReport = (report) =>
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Constants.cs b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Constants.cs
index e641919d8..8f5442d6a 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Constants.cs
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Constants.cs
@@ -10,5 +10,6 @@ public class Constants
public static string KeyCountryCode = "CountryCode";
public static string KeyFileErrorAttachments = "FileErrorAttachments";
public static string KeyTextErrorAttachments = "TextErrorAttachments";
+ public static string KeyEnableManualSessionTracker = "EnableManualSessionTrackerKey";
}
}
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo.csproj b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo.csproj
index bc6c5aa9a..b3f2683f0 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo.csproj
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo.csproj
@@ -11,9 +11,9 @@
-
-
-
+
+
+
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml
index 3e19d3cd2..8e2d1a1bb 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml
@@ -94,6 +94,10 @@
+
+
+
+
diff --git a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml.cs b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml.cs
index 2deab9af2..4e724affe 100644
--- a/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml.cs
+++ b/Apps/Contoso.WinUI.Desktop.Demo/Contoso.WinUI.Desktop.Demo/MainWindow.xaml.cs
@@ -64,6 +64,11 @@ public MainWindow()
{
StorageMaxSize.Text = storageSize.ToString();
}
+ var isManualSessionTrackerEnabled = localSettings.Values[Constants.KeyEnableManualSessionTracker] as bool?;
+ if (isManualSessionTrackerEnabled != null)
+ {
+ EnableManualSessionTrackerCheckBox.IsChecked = isManualSessionTrackerEnabled;
+ }
}
private void UpdateState()
@@ -438,5 +443,24 @@ public interface IInitializeWithWindow
[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto, PreserveSig = true, SetLastError = false)]
public static extern IntPtr GetActiveWindow();
+ private void EnableManualSessionTrackerCheckBox_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTrackerCheckBox_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ localSettings.Values[Constants.KeyEnableManualSessionTracker] = isEnabled;
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet (Package)/Package.appxmanifest b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet (Package)/Package.appxmanifest
index c5a4ecbd2..ddf9fb760 100644
--- a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet (Package)/Package.appxmanifest
+++ b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet (Package)/Package.appxmanifest
@@ -9,7 +9,7 @@
+ Version="4.5.0.0" />
Contoso.WinUI.Desktop.Puppet (Package)
diff --git a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/App.xaml.cs b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/App.xaml.cs
index 670716e37..510405f6a 100644
--- a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/App.xaml.cs
+++ b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/App.xaml.cs
@@ -53,6 +53,11 @@ public App()
{
AppCenter.SetMaxStorageSizeAsync((long)storageSize);
}
+ var isManualSessionTrackerEnabled = localSettings.Values[Constants.KeyEnableManualSessionTracker] as bool?;
+ if (isManualSessionTrackerEnabled != null && isManualSessionTrackerEnabled.Value)
+ {
+ Analytics.EnableManualSessionTracker();
+ }
// User callbacks.
Crashes.ShouldProcessErrorReport = (report) =>
diff --git a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/Constants.cs b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/Constants.cs
index ee292e9d3..70846062c 100644
--- a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/Constants.cs
+++ b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/Constants.cs
@@ -10,5 +10,6 @@ public class Constants
public static string KeyCountryCode = "CountryCode";
public static string KeyFileErrorAttachments = "FileErrorAttachments";
public static string KeyTextErrorAttachments = "TextErrorAttachments";
+ public static string KeyEnableManualSessionTracker = "EnableManualSessionTrackerKey";
}
}
diff --git a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml
index ae28d3c87..581db1a90 100644
--- a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml
+++ b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml
@@ -94,6 +94,10 @@
+
+
+
+
diff --git a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml.cs b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml.cs
index 989d53406..2930929ce 100644
--- a/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml.cs
+++ b/Apps/Contoso.WinUI.Desktop.Puppet/Contoso.WinUI.Desktop.Puppet/MainWindow.xaml.cs
@@ -66,6 +66,11 @@ public MainWindow()
{
StorageMaxSize.Text = storageSize.ToString();
}
+ var isManualSessionTrackerEnabled = localSettings.Values[Constants.KeyEnableManualSessionTracker] as bool?;
+ if (isManualSessionTrackerEnabled != null)
+ {
+ EnableManualSessionTrackerCheckBox.IsChecked = isManualSessionTrackerEnabled;
+ }
}
private void UpdateState()
@@ -439,5 +444,25 @@ public interface IInitializeWithWindow
[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto, PreserveSig = true, SetLastError = false)]
public static extern IntPtr GetActiveWindow();
+
+ private void EnableManualSessionTrackerCheckBox_Checked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(true);
+ }
+
+ private void EnableManualSessionTrackerCheckBox_Unchecked(object sender, RoutedEventArgs e)
+ {
+ EnableManualSessionTracker(false);
+ }
+
+ private void EnableManualSessionTracker(bool isEnabled)
+ {
+ localSettings.Values[Constants.KeyEnableManualSessionTracker] = isEnabled;
+ }
+
+ private void StartSessionButtonClick(object sender, RoutedEventArgs e)
+ {
+ Analytics.StartSession();
+ }
}
}
diff --git a/Apps/Contoso.iOS.Puppet/AppDelegate.cs b/Apps/Contoso.iOS.Puppet/AppDelegate.cs
index 21430d75a..1bdf548f2 100644
--- a/Apps/Contoso.iOS.Puppet/AppDelegate.cs
+++ b/Apps/Contoso.iOS.Puppet/AppDelegate.cs
@@ -41,6 +41,9 @@ public override bool FinishedLaunching(UIApplication application, NSDictionary l
{
AppCenter.SetMaxStorageSizeAsync(storageSizeValue);
}
+ if (plist.BoolForKey(Constants.EnableManualSessionTrackerKey)) {
+ Analytics.EnableManualSessionTracker();
+ }
AppCenter.Start("e94aaff4-e80d-4fee-9a5f-a84eb6e688fc", typeof(Analytics), typeof(Crashes), typeof(Distribute));
return true;
}
diff --git a/Apps/Contoso.iOS.Puppet/Constants.cs b/Apps/Contoso.iOS.Puppet/Constants.cs
index e4b285786..557e93da4 100644
--- a/Apps/Contoso.iOS.Puppet/Constants.cs
+++ b/Apps/Contoso.iOS.Puppet/Constants.cs
@@ -11,5 +11,6 @@ public static class Constants
public const string Warning = "Warning";
public const string Error = "Error";
public const string StorageSizeKey = "AppCenterStorageSizeKey";
+ public const string EnableManualSessionTrackerKey = "EnableManualSessionTrackerKey";
}
}
diff --git a/Apps/Contoso.iOS.Puppet/Info.plist b/Apps/Contoso.iOS.Puppet/Info.plist
index 1772c74df..65a58fdd2 100644
--- a/Apps/Contoso.iOS.Puppet/Info.plist
+++ b/Apps/Contoso.iOS.Puppet/Info.plist
@@ -7,9 +7,9 @@
CFBundleIdentifier
com.microsoft.appcenter.xamarin.ios.puppet
CFBundleShortVersionString
- 4.4.0
+ 4.5.0
CFBundleVersion
- 4.4.0
+ 4.5.0
LSRequiresIPhoneOS
MinimumOSVersion
diff --git a/Apps/Contoso.iOS.Puppet/ModulePages/Analytics.storyboard b/Apps/Contoso.iOS.Puppet/ModulePages/Analytics.storyboard
index 44ab70432..fa16d8d79 100644
--- a/Apps/Contoso.iOS.Puppet/ModulePages/Analytics.storyboard
+++ b/Apps/Contoso.iOS.Puppet/ModulePages/Analytics.storyboard
@@ -140,6 +140,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -151,6 +204,7 @@
+
diff --git a/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.cs b/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.cs
index 8f58f7ba6..75724ecc3 100644
--- a/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.cs
+++ b/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.cs
@@ -18,6 +18,7 @@ public class PropertiesTableSource : UITableViewSource
{
private readonly IDictionary mEventProperties;
private readonly string[] mKeys;
+ private NSUserDefaults plist = NSUserDefaults.StandardUserDefaults;
public PropertiesTableSource(IDictionary eventProperties)
{
@@ -55,6 +56,9 @@ public override void ViewDidAppear(bool animated)
AnalyticsEnabledSwitch.On = Analytics.IsEnabledAsync().Result;
AnalyticsEnabledSwitch.Enabled = AppCenter.IsEnabledAsync().Result;
NumPropertiesLabel.Text = mEventProperties.Count.ToString();
+
+ // Set enabled manual session tracker value.
+ EnableManualSessionTrackerSwitch.On = plist.BoolForKey(Constants.EnableManualSessionTrackerKey);
}
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
@@ -74,6 +78,16 @@ partial void UpdateEnabled()
AnalyticsEnabledSwitch.On = Analytics.IsEnabledAsync().Result;
}
+ partial void SessionGenerationUpdate(NSObject sender)
+ {
+ plist.SetBool(EnableManualSessionTrackerSwitch.On, Constants.EnableManualSessionTrackerKey);
+ }
+
+ partial void StartSession(NSObject sender)
+ {
+ Analytics.StartSession();
+ }
+
partial void AddProperty()
{
var alert = UIAlertController.Create("Add Property", "Please enter a property values to add to the event", UIAlertControllerStyle.Alert);
diff --git a/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.designer.cs b/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.designer.cs
index ef4a34d9b..714c3b19a 100644
--- a/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.designer.cs
+++ b/Apps/Contoso.iOS.Puppet/ModulePages/AnalyticsController.designer.cs
@@ -5,53 +5,61 @@
// Manual changes to this file will not be maintained.
//
using Foundation;
-using System;
using System.CodeDom.Compiler;
namespace Contoso.iOS.Puppet
{
- [Register ("AnalyticsController")]
- partial class AnalyticsController
- {
- [Outlet]
- UIKit.UISwitch AnalyticsEnabledSwitch { get; set; }
+ [Register ("AnalyticsController")]
+ partial class AnalyticsController
+ {
+ [Outlet]
+ UIKit.UISwitch AnalyticsEnabledSwitch { get; set; }
+ [Outlet]
+ UIKit.UISwitch EnableManualSessionTrackerSwitch { get; set; }
- [Outlet]
- UIKit.UITextField EventName { get; set; }
+ [Outlet]
+ UIKit.UITextField EventName { get; set; }
+ [Outlet]
+ UIKit.UILabel NumPropertiesLabel { get; set; }
- [Outlet]
- UIKit.UILabel NumPropertiesLabel { get; set; }
+ [Action ("AddProperty")]
+ partial void AddProperty ();
+ [Action ("SessionGenerationUpdate:")]
+ partial void SessionGenerationUpdate (Foundation.NSObject sender);
- [Action ("AddProperty")]
- partial void AddProperty ();
+ [Action ("StartSession:")]
+ partial void StartSession (Foundation.NSObject sender);
+ [Action ("TrackEvent")]
+ partial void TrackEvent ();
- [Action ("TrackEvent")]
- partial void TrackEvent ();
+ [Action ("UpdateEnabled")]
+ partial void UpdateEnabled ();
+
+ void ReleaseDesignerOutlets ()
+ {
+ if (EnableManualSessionTrackerSwitch != null) {
+ EnableManualSessionTrackerSwitch.Dispose ();
+ EnableManualSessionTrackerSwitch = null;
+ }
+ if (AnalyticsEnabledSwitch != null) {
+ AnalyticsEnabledSwitch.Dispose ();
+ AnalyticsEnabledSwitch = null;
+ }
- [Action ("UpdateEnabled")]
- partial void UpdateEnabled ();
+ if (EventName != null) {
+ EventName.Dispose ();
+ EventName = null;
+ }
- void ReleaseDesignerOutlets ()
- {
- if (AnalyticsEnabledSwitch != null) {
- AnalyticsEnabledSwitch.Dispose ();
- AnalyticsEnabledSwitch = null;
- }
-
- if (EventName != null) {
- EventName.Dispose ();
- EventName = null;
- }
-
- if (NumPropertiesLabel != null) {
- NumPropertiesLabel.Dispose ();
- NumPropertiesLabel = null;
- }
- }
- }
-}
\ No newline at end of file
+ if (NumPropertiesLabel != null) {
+ NumPropertiesLabel.Dispose ();
+ NumPropertiesLabel = null;
+ }
+ }
+ }
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aa8d3233c..372afd184 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,52 @@
# App Center SDK for .NET Change Log
+## Version 4.5.0
+
+### App Center
+
+* **[Breaking change]** Remove `AppCenter.SetCustomProperties` API.
+* **[Fix]** Fix check on using `HttpClient` API instead of `ServicePointManager` in applications with target framework version `4.7.2` and higher.
+
+#### Windows
+
+* **[Fix]** Fix App Center SDK compatibility with project targets .NET Framework and .NET Core.
+* **[Fix]** Fix crash during getting device information when WMI service is disabled.
+* **[Fix]** Fix a deadlock after the application start caused by improper `StatefulMutex` usage on the Windows Server OS.
+
+#### Android/iOS
+
+* **[Feature]** Add `AppCenter.setCountryCode(string)` API to set the country code manually.
+
+#### iOS
+
+* **[Fix]** Fix throw an exception when checking to authenticate MAC value during decryption.
+
+### App Center Analytics
+
+* **[Feature]** Increase the interval between sending logs from 3 to 6 seconds for the backend load optimization.
+* **[Feature]** Add `Analytics.EnableManualSessionTracker` and `Analytics.StartSession` APIs for tracking session manually.
+
+### App Center Crashes
+
+#### iOS
+
+* **[Fix]** Fix sending `Crashes.trackError` logs after allowing network requests after the launch app.
+
+### App Center Distribute
+
+#### iOS
+
+* **[Fix]** Cancel authorization process if application is not active, otherwise `ASWebAuthenticationSession` will fail opening browswer and update flow will end up being in a broken state. This only affects updating from a private distribution group.
+
+#### Android
+
+* **[Feature]** Remove the download manager task if the download doesn't start within 10 seconds.
+* **[Feature]** Replace installing a new release using the deprecated intent action [ACTION_INSTALL_PACKAGE](https://developer.android.com/reference/android/content/Intent#ACTION_INSTALL_PACKAGE) with the `PackageInstaller` API.
+* **[Feature]** Add sumcheck on the downloaded file before starting the install process.
+* **[Fix]** Fix a crash after discarding the installation if the download of a new release was interrupted in the previous application start and resumed in the current one.
+
+___
+
## Version 4.4.0
### App Center
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Properties/AssemblyInfo.cs
index d544bb229..f6eb5aabf 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Properties/AssemblyInfo.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/EnumFields.xml b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/EnumFields.xml
index 22959957e..cd58a271c 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/EnumFields.xml
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/EnumFields.xml
@@ -1,11 +1,11 @@
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/Metadata.xml b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/Metadata.xml
index 84a2f99ab..cfe68decb 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/Metadata.xml
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android.Bindings/Transforms/Metadata.xml
@@ -11,7 +11,6 @@
AndroidAppCenter
- AndroidCustomProperties
AndroidDependencyConfiguration
AndroidHttpResponse
AndroidHttpException
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter.Android/AppCenter.cs
index 20f069c6b..d6040d4d3 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android/AppCenter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android/AppCenter.cs
@@ -99,6 +99,11 @@ static void PlatformSetLogUrl(string logUrl)
AndroidAppCenter.SetLogUrl(logUrl);
}
+ static void PlatformSetCountryCode(string countryCode)
+ {
+ AndroidAppCenter.SetCountryCode(countryCode);
+ }
+
static bool PlatformConfigured
{
get
@@ -205,11 +210,6 @@ static Class[] GetServices(IEnumerable services)
return classes.ToArray();
}
- static void PlatformSetCustomProperties(CustomProperties customProperties)
- {
- AndroidAppCenter.SetCustomProperties(customProperties.AndroidCustomProperties);
- }
-
internal static void PlatformUnsetInstance()
{
AndroidAppCenter.UnsetInstance();
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android/CustomProperties.cs b/SDK/AppCenter/Microsoft.AppCenter.Android/CustomProperties.cs
deleted file mode 100644
index 9cc7d3cfd..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Android/CustomProperties.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Com.Microsoft.Appcenter;
-using Java.Lang;
-using Java.Util;
-
-namespace Microsoft.AppCenter
-{
- public partial class CustomProperties
- {
- static readonly DateTime _epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
- internal AndroidCustomProperties AndroidCustomProperties { get; } = new AndroidCustomProperties();
-
- CustomProperties PlatformSet(string key, string value)
- {
- AndroidCustomProperties.Set(key, value);
- return this;
- }
-
- CustomProperties PlatformSet(string key, DateTime value)
- {
- AndroidCustomProperties.Set(key, new Date((long)(value.ToUniversalTime() - _epoch).TotalMilliseconds));
- return this;
- }
-
- CustomProperties PlatformSet(string key, int value)
- {
- AndroidCustomProperties.Set(key, new Integer(value));
- return this;
- }
-
- CustomProperties PlatformSet(string key, long value)
- {
- AndroidCustomProperties.Set(key, new Long(value));
- return this;
- }
-
- CustomProperties PlatformSet(string key, float value)
- {
- AndroidCustomProperties.Set(key, new Float(value));
- return this;
- }
-
- CustomProperties PlatformSet(string key, double value)
- {
- AndroidCustomProperties.Set(key, new Java.Lang.Double(value));
- return this;
- }
-
- CustomProperties PlatformSet(string key, decimal value)
- {
- AndroidCustomProperties.Set(key, new Java.Lang.Double((double)value));
- return this;
- }
-
- CustomProperties PlatformSet(string key, bool value)
- {
- AndroidCustomProperties.Set(key, value);
- return this;
- }
-
- CustomProperties PlatformClear(string key)
- {
- AndroidCustomProperties.Clear(key);
- return this;
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android/Microsoft.AppCenter.Android.csproj b/SDK/AppCenter/Microsoft.AppCenter.Android/Microsoft.AppCenter.Android.csproj
index d730fe03e..c803b6f27 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android/Microsoft.AppCenter.Android.csproj
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android/Microsoft.AppCenter.Android.csproj
@@ -60,7 +60,6 @@
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Android/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.Android/Properties/AssemblyInfo.cs
index 6d9f5dc45..f552eaf2d 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Android/Properties/AssemblyInfo.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Android/Properties/AssemblyInfo.cs
@@ -29,6 +29,6 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
[assembly: InternalsVisibleTo("Microsoft.AppCenter.Test.Functional, PublicKey=002400000480000094000000060200000024000052534131000400000100010055c4e2f76a6f3430448b1fd5b9ced790181e698a86759ece168bd955efc4297c9f89a303204019a9d2e8e92d204ba87e4825b36f8ba08113dc7297dcebe3d2bc15fabeae1d8c71d69769adedbc37ba7e197efc537cac2d477772ab38c4d4ccee45ddf99ce4343e9b665b663280c4dae2520b508bc7de0faf1978934f094d68e3")]
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/ApiDefinition.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/ApiDefinition.cs
new file mode 100644
index 000000000..911d673d3
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/ApiDefinition.cs
@@ -0,0 +1,360 @@
+using Foundation;
+using ObjCRuntime;
+using System;
+
+namespace Microsoft.AppCenter.MacOS.Bindings
+{
+ interface IMSACService { }
+
+ // typedef NSString * (^MSACLogMessageProvider)();
+ delegate string MSACLogMessageProvider();
+
+ // typedef (void (^)(BOOL))completionHandler();
+ delegate void MSACSetLogLevelCompletionHandlerCallback(bool result);
+
+ // typedef void (^MSACLogHandler)(MSACLogMessageProvider, MSACLogLevel, const char *, const char *, uint);
+ unsafe delegate void MSACLogHandler(MSACLogMessageProvider arg0, MSACLogLevel arg1, IntPtr arg2, IntPtr arg3, uint arg4);
+ //Note: Objective Sharpie tried to bind the above as:
+ // unsafe delegate void MSACLogHandler(MSACLogMessageProvider arg0, MSACLogLevel arg1, string arg2, sbyte* arg3, sbyte* arg4, uint arg5);
+ //But trying to use it as given gave an error.
+
+ // @interface MSACWrapperSdk : NSObject
+ [BaseType(typeof(NSObject))]
+ interface MSACWrapperSdk
+ {
+ // @property (readonly, nonatomic) NSString * wrapperSdkVersion;
+ [Export("wrapperSdkVersion")]
+ string WrapperSdkVersion { get; }
+
+ // @property (readonly, nonatomic) NSString * wrapperSdkName;
+ [Export("wrapperSdkName")]
+ string WrapperSdkName { get; }
+
+ // @property (readonly, nonatomic) NSString * wrapperRuntimeVersion;
+ [Export("wrapperRuntimeVersion")]
+ string WrapperRuntimeVersion { get; }
+
+ // @property (readonly, nonatomic) NSString * liveUpdateReleaseLabel;
+ [Export("liveUpdateReleaseLabel")]
+ string LiveUpdateReleaseLabel { get; }
+
+ // @property (readonly, nonatomic) NSString * liveUpdateDeploymentKey;
+ [Export("liveUpdateDeploymentKey")]
+ string LiveUpdateDeploymentKey { get; }
+
+ // @property (readonly, nonatomic) NSString * liveUpdatePackageHash;
+ [Export("liveUpdatePackageHash")]
+ string LiveUpdatePackageHash { get; }
+
+ // -(BOOL)isEqual:(MSACWrapperSdk *)wrapperSdk;
+ [Export("isEqual:")]
+ bool IsEqual(MSACWrapperSdk wrapperSdk);
+
+ // initWithWrapperSdkVersion:(NSString *)wrapperSdkVersion wrapperSdkName:(NSString *)wrapperSdkName wrapperRuntimeVersion:(NSString*)wrapperRuntimeVersion liveUpdateReleaseLabel:(NSString*)liveUpdateReleaseLabel liveUpdateDeploymentKey:(NSString*)liveUpdateDeploymentKey liveUpdatePackageHash:(NSString*)liveUpdatePackageHash;
+ [Export("initWithWrapperSdkVersion:wrapperSdkName:wrapperRuntimeVersion:liveUpdateReleaseLabel:liveUpdateDeploymentKey:liveUpdatePackageHash:")]
+ IntPtr Constructor([NullAllowed] string wrapperSdkVersion, [NullAllowed] string wrapperSdkName, [NullAllowed] string wrapperRuntimeVersion, [NullAllowed] string liveUpdateReleaseLabel, [NullAllowed] string liveUpdateDeploymentKey, [NullAllowed] string liveUpdatePackageHash);
+ }
+
+ // @interface MSACKeychainUtil : NSObject
+ [BaseType(typeof(NSObject))]
+ interface MSACKeychainUtil
+ {
+ // + (BOOL)storeString:(NSString *)string forKey:(NSString *)key;
+ [Static]
+ [Export("storeString:forKey:")]
+ void StoreString(NSString value, NSString key);
+
+ // + (NSString *_Nullable)stringForKey:(NSString *)key statusCode:(OSStatus *_Nullable)statusCode;
+ [Static]
+ [Export("stringForKey:statusCode:")]
+ NSString StringForKey(NSString key, out int errorCode);
+
+ // + (BOOL) clear;
+ [Static]
+ [Export("clear")]
+ bool Clear();
+ }
+
+ // @interface MSACDevice : MSACWrapperSdk
+ [BaseType(typeof(MSACWrapperSdk))]
+ interface MSACDevice
+ {
+ // @property (readonly, nonatomic) NSString * sdkName;
+ [Export("sdkName")]
+ string SdkName { get; }
+
+ // @property (readonly, nonatomic) NSString * sdkVersion;
+ [Export("sdkVersion")]
+ string SdkVersion { get; }
+
+ // @property (readonly, nonatomic) NSString * model;
+ [Export("model")]
+ string Model { get; }
+
+ // @property (readonly, nonatomic) NSString * oemName;
+ [Export("oemName")]
+ string OemName { get; }
+
+ // @property (readonly, nonatomic) NSString * osName;
+ [Export("osName")]
+ string OsName { get; }
+
+ // @property (readonly, nonatomic) NSString * osVersion;
+ [Export("osVersion")]
+ string OsVersion { get; }
+
+ // @property (readonly, nonatomic) NSString * osBuild;
+ [Export("osBuild")]
+ string OsBuild { get; }
+
+ // @property (readonly, nonatomic) NSNumber * osApiLevel;
+ [Export("osApiLevel")]
+ NSNumber OsApiLevel { get; }
+
+ // @property (readonly, nonatomic) NSString * locale;
+ [Export("locale")]
+ string Locale { get; }
+
+ // @property (readonly, nonatomic) NSNumber * timeZoneOffset;
+ [Export("timeZoneOffset")]
+ NSNumber TimeZoneOffset { get; }
+
+ // @property (readonly, nonatomic) NSString * screenSize;
+ [Export("screenSize")]
+ string ScreenSize { get; }
+
+ // @property (readonly, nonatomic) NSString * appVersion;
+ [Export("appVersion")]
+ string AppVersion { get; }
+
+ // @property (readonly, nonatomic) NSString * carrierName;
+ [Export("carrierName")]
+ string CarrierName { get; }
+
+ // @property (readonly, nonatomic) NSString * carrierCountry;
+ [Export("carrierCountry")]
+ string CarrierCountry { get; }
+
+ // @property (readonly, nonatomic) NSString * appBuild;
+ [Export("appBuild")]
+ string AppBuild { get; }
+
+ // @property (readonly, nonatomic) NSString * appNamespace;
+ [Export("appNamespace")]
+ string AppNamespace { get; }
+
+ // -(BOOL)isEqual:(MSACDevice *)device;
+ [Export("isEqual:")]
+ bool IsEqual(MSACDevice device);
+ }
+
+ // @interface MSACAppCenter : NSObject
+ [BaseType(typeof(NSObject), Name = "MSACAppCenter")]
+ interface MSACAppCenter
+ {
+ // +(instancetype)sharedInstance;
+ [Static]
+ [Export("sharedInstance")]
+ MSACAppCenter SharedInstance();
+
+ // +(void)resetSharedInstance
+ [Static]
+ [Export("resetSharedInstance")]
+ void ResetSharedInstance();
+
+ // +(void)configureWithAppSecret:(NSString *)appSecret;
+ [Static]
+ [Export("configureWithAppSecret:")]
+ void ConfigureWithAppSecret([NullAllowed] string appSecret);
+
+ // +(void)start:(NSString *)appSecret withServices:(NSArray *)services;
+ [Static]
+ [Export("start:withServices:")]
+ void Start([NullAllowed] string appSecret, Class[] services);
+
+ // +(void)startService:(Class)service;
+ [Static]
+ [Export("startService:")]
+ void StartService(Class service);
+
+ // +(BOOL)isConfigured;
+ [Static]
+ [Export("isConfigured")]
+ bool IsConfigured();
+
+ // +(void)setLogUrl:(NSString *)setLogUrl;
+ [Static]
+ [Export("setLogUrl:")]
+ void SetLogUrl([NullAllowed] string logUrl);
+
+ // + (void)setCountryCode:(NSString *)countryCode
+ [Static]
+ [Export("setCountryCode:")]
+ void SetCountryCode(string countryCode);
+
+ // +(void)setEnabled:(BOOL)isEnabled;
+ [Static]
+ [Export("setEnabled:")]
+ void SetEnabled(bool isEnabled);
+
+ // +(BOOL)isEnabled;
+ [Static]
+ [Export("isEnabled")]
+ bool IsEnabled();
+
+ // +(MSACLogLevel)logLevel;
+ // +(void)setLogLevel:(MSACLogLevel)logLevel;
+ [Static]
+ [Export("logLevel")]
+ MSACLogLevel LogLevel();
+
+ [Static]
+ [Export("setLogLevel:")]
+ void SetLogLevel(MSACLogLevel logLevel);
+
+ // + (void)setNetworkRequestsAllowed:(BOOL)isAllowed;
+ [Static]
+ [Export("setNetworkRequestsAllowed:")]
+ void SetNetworkRequestsAllowed(bool isAllowed);
+
+ // + (BOOL)isNetworkRequestsAllowed;
+ [Static]
+ [Export("isNetworkRequestsAllowed")]
+ bool IsNetworkRequestsAllowed();
+
+ // + (void)setUserId:(NSString *)userId;
+ [Static]
+ [Export("setUserId:")]
+ void SetUserId([NullAllowed] string userId);
+
+ // +(void)setLogHandler:(MSACLogHandler)logHandler;
+ [Static]
+ [Export("setLogHandler:")]
+ void SetLogHandler(MSACLogHandler logHandler);
+
+ // +(void)setWrapperSdk:(MSACWrapperSdk *)wrapperSdk;
+ [Static]
+ [Export("setWrapperSdk:")]
+ void SetWrapperSdk(MSACWrapperSdk wrapperSdk);
+
+ // +(NSUUID *)installId;
+ [Static]
+ [Export("installId")]
+ NSUuid InstallId();
+
+ // +(BOOL)isDebuggerAttached;
+ [Static]
+ [Export("isDebuggerAttached")]
+ bool IsDebuggerAttached();
+
+ // +(void)setMaxStorageSize:(long)sizeInBytes completionHandler(void (^)(BOOL))completionHandler;
+ [Static]
+ [Export("setMaxStorageSize:completionHandler:")]
+ void SetMaxStorageSize(long sizeInBytes, MSACSetLogLevelCompletionHandlerCallback callback);
+ }
+
+ // @protocol MSACService
+ [Protocol, Model]
+ [BaseType(typeof(NSObject))]
+ interface MSACService
+ {
+ // @required +(BOOL)isEnabled;
+ [Static]
+ [Export("isEnabled")]
+ bool GetEnabled();
+
+ [Static]
+ [Export("setEnabled:")]
+ void SetEnabled(bool val);
+ }
+
+ // @interface MSACServiceAbstract : NSObject
+ [BaseType(typeof(MSACService))]
+ interface MSACServiceAbstract : IMSACService
+ {
+ }
+
+ // @interface MSACLogger : NSObject
+ [BaseType(typeof(NSObject))]
+ interface MSACLogger
+ {
+ // +(void)logMessage:(MSACLogMessageProvider)messageProvider level:(MSACLogLevel)loglevel tag:(NSString *)tag file:(const char *)file function:(const char *)function line:(uint)line;
+ [Static]
+ [Export("logMessage:level:tag:file:function:line:")]
+ unsafe void LogMessage(MSACLogMessageProvider messageProvider, MSACLogLevel loglevel, string tag, IntPtr file, IntPtr function, uint line);
+ }
+
+ // @interface MSACWrapperLogger : NSObject
+ [BaseType(typeof(NSObject))]
+ interface MSACWrapperLogger
+ {
+ // +(void)MSACWrapperLog:(MSACLogMessageProvider)message tag:(NSString *)tag level:(MSACLogLevel)level;
+ [Static]
+ [Export("MSACWrapperLog:tag:level:")]
+ void MSACWrapperLog(MSACLogMessageProvider message, string tag, MSACLogLevel level);
+ }
+
+ // typedef void (^MSACHttpRequestCompletionHandler)(NSData *_Nullable responseBody, NSHTTPURLResponse *_Nullable response, NSError* _Nullable error);
+ delegate void MSACHttpRequestCompletionHandler([NullAllowed] NSData responseBody, [NullAllowed] NSHttpUrlResponse response, [NullAllowed] NSError error);
+
+ // @protocol MSACHttpClientProtocol
+ [Protocol, Model]
+ [BaseType(typeof(NSObject))]
+ interface MSACHttpClientProtocol
+ {
+ // @property(nonatomic, weak, nullable) id delegate;
+ // Using a C# property, even when using the Wrap/Weak pattern, we get "setDelegate:]: unrecognized selector sent to instance", work around by using a setter method as we don't need the getter
+ [Export("setDelegate:")]
+ void SetDelegate([NullAllowed] MSACHttpClientDelegate httpClientDelegate);
+
+ // @required - (void)sendAsync:(NSURL *)url
+ // method:(NSString*) method
+ // headers:(nullable NSDictionary *)headers
+ // data:(nullable NSData *)data
+ // completionHandler:(nullable MSACHttpRequestCompletionHandler) completionHandler;
+ [Export("sendAsync:method:headers:data:completionHandler:")]
+ void SendAsync(NSUrl url, NSString method, [NullAllowed] NSDictionary headers, [NullAllowed] NSData data, [NullAllowed] MSACHttpRequestCompletionHandler completionHandler);
+
+ // @required - (void) sendAsync:(NSURL*) url
+ // method:(NSString*) method
+ // headers:(nullable NSDictionary *)headers
+ // data:(nullable NSData *)data
+ // retryIntervals:(NSArray*) retryIntervals
+ // compressionEnabled:(BOOL) compressionEnabled
+ // completionHandler:(nullable MSACHttpRequestCompletionHandler) completionHandler;
+ [Export("sendAsync:method:headers:data:retryIntervals:compressionEnabled:completionHandler:")]
+ void SendAsync(NSUrl url, NSString method, [NullAllowed] NSDictionary headers, [NullAllowed] NSData data, NSArray retryIntervals, bool compressionEnabled, [NullAllowed] MSACHttpRequestCompletionHandler completionHandler);
+
+ // @required - (void)pause;
+ [Export("pause")]
+ void Pause();
+
+ // @required - (void)resume;
+ [Export("resume")]
+ void Resume();
+
+ // @required - (void)setEnabled:(BOOL)isEnabled;
+ [Export("setEnabled:")]
+ void SetEnabled(bool enabled);
+ }
+
+ // @protocol MSACHttpClientDelegate
+ [Protocol]
+ [BaseType(typeof(NSObject))]
+ interface MSACHttpClientDelegate
+ {
+ // -(void)willSendHTTPRequestToURL:(NSURL *)url withHeaders:(nullable NSDictionary *)headers;
+ [Export("willSendHTTPRequestToURL:withHeaders:")]
+ void WillSendHTTPRequestToURL(NSUrl url, [NullAllowed] NSDictionary headers);
+ }
+
+ // @interface MSACDependencyConfiguration : NSObject
+ [BaseType(typeof(NSObject))]
+ interface MSACDependencyConfiguration
+ {
+ // @property(class, nonatomic) id httpClient;
+ [Static]
+ [Export("httpClient")]
+ MSACHttpClientProtocol HttpClient { get; set; }
+ }
+}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Microsoft.AppCenter.MacOS.Bindings.csproj b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Microsoft.AppCenter.MacOS.Bindings.csproj
new file mode 100644
index 000000000..52875a631
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Microsoft.AppCenter.MacOS.Bindings.csproj
@@ -0,0 +1,91 @@
+
+
+
+ true
+ true
+ true
+ ..\..\..\appcenter-public-key.snk
+
+
+ Debug
+ AnyCPU
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}
+ {810C163F-4746-4721-8B8E-88A3673A62EA};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Library
+ Microsoft.AppCenter.MacOS.Binding
+ Microsoft.AppCenter.MacOS.Bindings
+ Resources
+ true
+ ..\..\..\appcenter-public-key.snk
+
+
+ true
+ full
+ true
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ true
+
+
+
+ BeforeBuild
+ sh build.sh -t-external-macos
+ ${SolutionDir}
+
+
+ AfterClean
+ rm -rf external/macos
+ ${SolutionDir}
+
+
+
+
+
+ true
+ bin\Release
+
+ prompt
+ 4
+ true
+
+
+
+ BeforeBuild
+ sh build.sh -t-external-macos
+ ${SolutionDir}
+
+
+ AfterClean
+ rm -rf external/macos
+ ${SolutionDir}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Framework
+ True
+ -lsqlite3
+ CoreTelephony Security SystemConfiguration
+
+
+
+
+
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..e42ef1835
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/Properties/AssemblyInfo.cs
@@ -0,0 +1,34 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+using Foundation;
+
+// This attribute allows you to mark your assemblies as “safe to link”.
+// When the attribute is present, the linker—if enabled—will process the assembly
+// even if you’re using the “Link SDK assemblies only” option, which is the default for device builds.
+
+[assembly: AssemblyMetadata("IsTrimmable", "False")]
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("Microsoft.AppCenter.MacOS.Binding")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("${AuthorCopyright}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/StructsAndEnums.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/StructsAndEnums.cs
new file mode 100644
index 000000000..000791fe3
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS.Bindings/StructsAndEnums.cs
@@ -0,0 +1,17 @@
+using System;
+using ObjCRuntime;
+
+namespace Microsoft.AppCenter.MacOS.Bindings
+{
+ [Native]
+ public enum MSACLogLevel : ulong
+ {
+ Verbose = 2,
+ Debug = 3,
+ Info = 4,
+ Warning = 5,
+ Error = 6,
+ Assert = 7,
+ None = 99
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.AppCenter.targets b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.AppCenter.targets
new file mode 100644
index 000000000..a4291ab6e
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.AppCenter.targets
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.cs
new file mode 100644
index 000000000..97681c9f9
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenter.cs
@@ -0,0 +1,207 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using ObjCRuntime;
+
+namespace Microsoft.AppCenter
+{
+ using MacOSLogLevel = Microsoft.AppCenter.MacOS.Bindings.MSACLogLevel;
+ using MacOSAppCenter = Microsoft.AppCenter.MacOS.Bindings.MSACAppCenter;
+ using MacOSWrapperSdk = Microsoft.AppCenter.MacOS.Bindings.MSACWrapperSdk;
+
+ public partial class AppCenter
+ {
+ /* The key identifier for parsing app secrets */
+ const string PlatformIdentifier = "macos";
+
+ internal AppCenter()
+ {
+ }
+
+ static LogLevel PlatformLogLevel
+ {
+ get
+ {
+ var val = MacOSAppCenter.LogLevel();
+ switch (val)
+ {
+ case MacOSLogLevel.Verbose:
+ return LogLevel.Verbose;
+ case MacOSLogLevel.Debug:
+ return LogLevel.Debug;
+ case MacOSLogLevel.Info:
+ return LogLevel.Info;
+ case MacOSLogLevel.Warning:
+ return LogLevel.Warn;
+ case MacOSLogLevel.Error:
+ return LogLevel.Error;
+ case MacOSLogLevel.Assert:
+ return LogLevel.Assert;
+ case MacOSLogLevel.None:
+ return LogLevel.None;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(val), val, null);
+ }
+ }
+ set
+ {
+ MacOSLogLevel loglevel;
+ switch (value)
+ {
+ case LogLevel.Verbose:
+ loglevel = MacOSLogLevel.Verbose;
+ break;
+ case LogLevel.Debug:
+ loglevel = MacOSLogLevel.Debug;
+ break;
+ case LogLevel.Info:
+ loglevel = MacOSLogLevel.Info;
+ break;
+ case LogLevel.Warn:
+ loglevel = MacOSLogLevel.Warning;
+ break;
+ case LogLevel.Error:
+ loglevel = MacOSLogLevel.Error;
+ break;
+ case LogLevel.Assert:
+ loglevel = MacOSLogLevel.Assert;
+ break;
+ case LogLevel.None:
+ loglevel = MacOSLogLevel.None;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(value), value, null);
+ }
+ MacOSAppCenter.SetLogLevel(loglevel);
+ }
+ }
+
+ static bool PlatformIsNetworkRequestsAllowed
+ {
+ get => MacOSAppCenter.IsNetworkRequestsAllowed();
+ set => MacOSAppCenter.SetNetworkRequestsAllowed(value);
+ }
+
+ static void PlatformSetUserId(string userId)
+ {
+ MacOSAppCenter.SetUserId(userId);
+ }
+
+ static void PlatformSetLogUrl(string logUrl)
+ {
+ MacOSAppCenter.SetLogUrl(logUrl);
+ }
+
+ static void PlatformSetCountryCode(string countryCode)
+ {
+ MacOSAppCenter.SetCountryCode(countryCode);
+ }
+
+ static bool PlatformConfigured
+ {
+ get
+ {
+ return MacOSAppCenter.IsConfigured();
+ }
+ }
+
+ static void PlatformConfigure(string appSecret)
+ {
+ SetWrapperSdk();
+ MacOSAppCenter.ConfigureWithAppSecret(appSecret);
+ }
+
+ static void PlatformStart(params Type[] services)
+ {
+ SetWrapperSdk();
+ foreach (var service in GetServices(services))
+ {
+ MacOSAppCenter.StartService(service);
+ }
+ }
+
+ static void PlatformStart(string appSecret, params Type[] services)
+ {
+ SetWrapperSdk();
+ string parsedSecret;
+ try
+ {
+ parsedSecret = GetSecretAndTargetForPlatform(appSecret, PlatformIdentifier);
+ }
+ catch (AppCenterException ex)
+ {
+ AppCenterLog.Assert(AppCenterLog.LogTag, ex.Message);
+ return;
+ }
+ MacOSAppCenter.Start(parsedSecret, GetServices(services));
+ }
+
+ static Task PlatformIsEnabledAsync()
+ {
+ return Task.FromResult(MacOSAppCenter.IsEnabled());
+ }
+
+ static Task PlatformSetEnabledAsync(bool enabled)
+ {
+ MacOSAppCenter.SetEnabled(enabled);
+ return Task.FromResult(default(object));
+ }
+
+ static Task PlatformGetInstallIdAsync()
+ {
+ Guid? installId = Guid.Parse(MacOSAppCenter.InstallId().AsString());
+ return Task.FromResult(installId);
+ }
+
+ static Class[] GetServices(IEnumerable services)
+ {
+ var classes = new List();
+ foreach (var t in services)
+ {
+ var bindingType = GetBindingType(t);
+ if (bindingType != null)
+ {
+ var aClass = GetClassForType(bindingType);
+ if (aClass != null)
+ {
+ classes.Add(aClass);
+ }
+ }
+ }
+ return classes.ToArray();
+ }
+
+ static Class GetClassForType(Type type)
+ {
+ IntPtr classHandle = Class.GetHandle(type);
+ if (classHandle != IntPtr.Zero)
+ {
+ return new Class(classHandle);
+ }
+ return null;
+ }
+
+ static Type GetBindingType(Type type)
+ {
+ return (Type)type.GetProperty("BindingType")?.GetValue(null, null);
+ }
+
+ static void SetWrapperSdk()
+ {
+ MacOSWrapperSdk wrapperSdk = new MacOSWrapperSdk(WrapperSdk.Version, WrapperSdk.Name, Constants.Version, null, null, null);
+ MacOSAppCenter.SetWrapperSdk(wrapperSdk);
+ }
+
+ internal static void PlatformUnsetInstance()
+ {
+ MacOSAppCenter.ResetSharedInstance();
+ }
+
+ static Task PlatformSetMaxStorageSizeAsync(long sizeInBytes)
+ {
+ TaskCompletionSource taskCompletionSource = new TaskCompletionSource();
+ MacOSAppCenter.SetMaxStorageSize(sizeInBytes, (result) => taskCompletionSource.SetResult(result));
+ return taskCompletionSource.Task;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterLog.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterLog.cs
new file mode 100644
index 000000000..894d0b84b
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterLog.cs
@@ -0,0 +1,55 @@
+namespace Microsoft.AppCenter
+{
+ using MacOSMessageProvider = Microsoft.AppCenter.MacOS.Bindings.MSACLogMessageProvider;
+ using MacOSLogger = Microsoft.AppCenter.MacOS.Bindings.MSACWrapperLogger;
+ using MacOSLogLevel = Microsoft.AppCenter.MacOS.Bindings.MSACLogLevel;
+
+ public static partial class AppCenterLog
+ {
+ ///
+ /// The log tag for this SDK. All logs emitted at the SDK level will contain this tag.
+ ///
+ public static string LogTag { get; private set; }
+
+ static AppCenterLog()
+ {
+ LogTag = "AppCenterXamarin";
+ }
+
+ public static void Verbose(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Verbose);
+ }
+
+ public static void Debug(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Debug);
+ }
+
+ public static void Info(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Info);
+ }
+
+ public static void Warn(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Warning);
+ }
+
+ public static void Error(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Error);
+ }
+
+ public static void Assert(string tag, string message)
+ {
+ MacOSMessageProvider msg_provider = () => { return message; };
+ MacOSLogger.MSACWrapperLog(msg_provider, tag, MacOSLogLevel.Assert);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterService.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterService.cs
new file mode 100644
index 000000000..759ccce28
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/AppCenterService.cs
@@ -0,0 +1,6 @@
+namespace Microsoft.AppCenter
+{
+ public abstract class AppCenterService : IAppCenterService
+ {
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/DependencyConfiguration.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/DependencyConfiguration.cs
new file mode 100644
index 000000000..0cce8e498
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/DependencyConfiguration.cs
@@ -0,0 +1,21 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Microsoft.AppCenter.MacOS.Bindings;
+
+namespace Microsoft.AppCenter
+{
+ static partial class DependencyConfiguration
+ {
+ private static IHttpNetworkAdapter _httpNetworkAdapter;
+ private static IHttpNetworkAdapter PlatformHttpNetworkAdapter
+ {
+ get => _httpNetworkAdapter;
+ set
+ {
+ MSACDependencyConfiguration.HttpClient = new MacOSHttpClientAdapter(value);
+ _httpNetworkAdapter = value;
+ }
+ }
+ }
+}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/Device.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Device.cs
new file mode 100644
index 000000000..88bddcdb9
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Device.cs
@@ -0,0 +1,27 @@
+using Microsoft.AppCenter.MacOS.Bindings;
+
+namespace Microsoft.AppCenter
+{
+ public partial class Device
+ {
+ public Device(MSACDevice device)
+ {
+ SdkName = device.SdkName;
+ SdkVersion = device.SdkVersion;
+ Model = device.Model;
+ OemName = device.OemName;
+ OsName = device.OsName;
+ OsVersion = device.OsVersion;
+ OsBuild = device.OsBuild;
+ OsApiLevel = device.OsApiLevel == null ? 0 : device.OsApiLevel.Int32Value;
+ Locale = device.Locale;
+ TimeZoneOffset = device.TimeZoneOffset == null ? 0 : device.TimeZoneOffset.Int32Value;
+ ScreenSize = device.ScreenSize;
+ AppVersion = device.AppVersion;
+ CarrierName = device.CarrierName;
+ CarrierCountry = device.CarrierCountry;
+ AppBuild = device.AppBuild;
+ AppNamespace = device.AppNamespace;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/IAppCenterService.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/IAppCenterService.cs
new file mode 100644
index 000000000..d1d183cda
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/IAppCenterService.cs
@@ -0,0 +1,7 @@
+namespace Microsoft.AppCenter
+{
+ public interface IAppCenterService
+ {
+ /* This interface should remain empty */
+ }
+}
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/MacOSHttpClientAdapter.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/MacOSHttpClientAdapter.cs
new file mode 100644
index 000000000..0e4f19474
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/MacOSHttpClientAdapter.cs
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using System.Collections.Generic;
+using System.Threading;
+using Foundation;
+using Microsoft.AppCenter.MacOS.Bindings;
+
+namespace Microsoft.AppCenter
+{
+ internal class MacOSHttpClientAdapter : MSACHttpClientProtocol
+ {
+ private readonly IHttpNetworkAdapter _httpNetworkAdapter;
+
+ private MSACHttpClientDelegate _httpClientDelegate;
+
+ public MacOSHttpClientAdapter(IHttpNetworkAdapter httpNetworkAdapter)
+ {
+ _httpNetworkAdapter = httpNetworkAdapter;
+ }
+
+ public override void SendAsync(NSUrl url, NSString method, NSDictionary headers, NSData data, MSACHttpRequestCompletionHandler completionHandler)
+ {
+ _httpClientDelegate?.WillSendHTTPRequestToURL(url, headers);
+ var managedHeaders = new Dictionary();
+ if (headers == null)
+ {
+ managedHeaders = new Dictionary();
+ }
+ else
+ {
+ foreach (KeyValuePair header in headers)
+ {
+ managedHeaders[header.Key.ToString()] = header.Value.ToString();
+ }
+ }
+ _httpNetworkAdapter.SendAsync(url.ToString(), method, managedHeaders, data?.ToString(), CancellationToken.None).ContinueWith(t =>
+ {
+ var innerException = t.Exception?.InnerException;
+ if (innerException is HttpException)
+ {
+ var response = (innerException as HttpException).HttpResponse;
+ completionHandler(NSData.FromString(response.Content), new NSHttpUrlResponse(url, response.StatusCode, "1.1", new NSDictionary()), null);
+ }
+ else if (innerException != null)
+ {
+ var userInfo = NSDictionary.FromObjectAndKey(new NSString("stackTrace"), new NSString(innerException.ToString()));
+ completionHandler(null, null, new NSError(new NSString(".NET SDK"), 1, userInfo));
+ }
+ else
+ {
+ var response = t.Result;
+ completionHandler(NSData.FromString(response.Content), new NSHttpUrlResponse(url, response.StatusCode, "1.1", new NSDictionary()), null);
+ }
+ });
+ }
+
+ public override void SendAsync(NSUrl url, NSString method, NSDictionary headers, NSData data, NSArray retryIntervals, bool compressionEnabled, MSACHttpRequestCompletionHandler completionHandler)
+ {
+ SendAsync(url, method, headers, data, completionHandler);
+ }
+
+ public override void Pause()
+ {
+ }
+
+ public override void Resume()
+ {
+ }
+
+ public override void SetEnabled(bool enabled)
+ {
+ }
+
+ public override void SetDelegate(MSACHttpClientDelegate httpClientDelegate)
+ {
+ _httpClientDelegate = httpClientDelegate;
+ }
+ }
+}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/Microsoft.AppCenter.MacOS.csproj b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Microsoft.AppCenter.MacOS.csproj
new file mode 100644
index 000000000..0ab319f96
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Microsoft.AppCenter.MacOS.csproj
@@ -0,0 +1,78 @@
+
+
+
+ Debug
+ AnyCPU
+ {727A9E5A-566A-4DC5-B62B-8F7CA17661B8}
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Library
+ Microsoft.AppCenter
+ Microsoft.AppCenter
+ v2.0
+ Xamarin.Mac
+ Resources
+ true
+ true
+ ..\..\..\appcenter-public-key.snk
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ bin\Debug\Microsoft.AppCenter.xml
+ false
+ false
+ false
+ false
+ false
+
+ None
+ x86_64
+ None
+
+
+ true
+ bin\Release
+
+ prompt
+ 4
+ bin\Release\Microsoft.AppCenter.xml
+ false
+ false
+ false
+ false
+ false
+
+ None
+ x86_64
+ None
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {E97116CF-0A1F-41B0-A5A2-A5C4A3464BD4}
+ Microsoft.AppCenter.MacOS.Bindings
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.MacOS/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..2dd0fb100
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.MacOS/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("Microsoft.AppCenter.MacOS")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("${AuthorCopyright}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Shared/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter.Shared/AppCenter.cs
index a499e1ec3..4e80de3ed 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Shared/AppCenter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Shared/AppCenter.cs
@@ -109,6 +109,15 @@ public static bool IsNetworkRequestsAllowed
set => PlatformIsNetworkRequestsAllowed = value;
}
+ ///
+ /// Sets the two-letter ISO country code to send to the backend.
+ ///
+ /// The two-letter ISO country code. See for more information.
+ public static void SetCountryCode(string countryCode)
+ {
+ PlatformSetCountryCode(countryCode);
+ }
+
///
/// Set the custom user id.
///
@@ -198,15 +207,6 @@ public static void Start(string appSecret, params Type[] services)
PlatformStart(appSecret, services);
}
- ///
- /// Set the custom properties.
- ///
- /// Custom properties object.
- public static void SetCustomProperties(CustomProperties customProperties)
- {
- PlatformSetCustomProperties(customProperties);
- }
-
///
/// Set the maximum size of the internal storage.
/// This method must be called before App Center is started. This method is only intended for applications.
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Shared/CustomProperties.cs b/SDK/AppCenter/Microsoft.AppCenter.Shared/CustomProperties.cs
deleted file mode 100644
index d677928c8..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Shared/CustomProperties.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-
-namespace Microsoft.AppCenter
-{
- ///
- /// Custom properties builder.
- /// Collects multiple properties to send in one log.
- ///
- public partial class CustomProperties
- {
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, string value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, DateTime value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, int value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, long value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, float value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, double value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, decimal value) => PlatformSet(key, value);
-
- ///
- /// Set the specified property value with the specified key.
- /// If the properties previously contained a property for the key, the old value is replaced.
- ///
- /// Key with which the specified value is to be set.
- /// Value to be set with the specified key.
- /// This instance.
- public CustomProperties Set(string key, bool value) => PlatformSet(key, value);
-
- ///
- /// Clear the property for the specified key.
- ///
- /// Key whose mapping is to be cleared.
- /// This instance.
- public CustomProperties Clear(string key) => PlatformClear(key);
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Shared/Microsoft.AppCenter.Shared.projitems b/SDK/AppCenter/Microsoft.AppCenter.Shared/Microsoft.AppCenter.Shared.projitems
index 7ff17821a..8dc5d5c19 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Shared/Microsoft.AppCenter.Shared.projitems
+++ b/SDK/AppCenter/Microsoft.AppCenter.Shared/Microsoft.AppCenter.Shared.projitems
@@ -15,6 +15,5 @@
-
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Shared/WrapperSdk.cs b/SDK/AppCenter/Microsoft.AppCenter.Shared/WrapperSdk.cs
index 03f301c3b..480800d82 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Shared/WrapperSdk.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Shared/WrapperSdk.cs
@@ -8,6 +8,6 @@ public partial class WrapperSdk
public const string Name = "appcenter.xamarin";
/* We can't use reflection for assemblyInformationalVersion on iOS with "Link All" optimization. */
- internal const string Version = "4.4.0-SNAPSHOT";
+ internal const string Version = "4.5.0-SNAPSHOT";
}
}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.UWP/Microsoft.AppCenter.UWP.csproj b/SDK/AppCenter/Microsoft.AppCenter.UWP/Microsoft.AppCenter.UWP.csproj
index e9d07a943..801680d0b 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.UWP/Microsoft.AppCenter.UWP.csproj
+++ b/SDK/AppCenter/Microsoft.AppCenter.UWP/Microsoft.AppCenter.UWP.csproj
@@ -5,9 +5,9 @@
uap10.0.16299;net461
Microsoft Corporation
Microsoft Corp. All rights reserved.
- 4.4.0-SNAPSHOT
+ 4.5.0-SNAPSHOT
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
Microsoft.AppCenter
bin\$(Configuration)\$(TargetFramework)\Microsoft.AppCenter.xml
true
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/AppCenter.cs
index 33577a68d..0bf54d1cb 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/AppCenter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/AppCenter.cs
@@ -122,7 +122,7 @@ public static bool PlatformIsNetworkRequestsAllowed
/// Sets the two-letter ISO country code to send to the backend.
///
/// The two-letter ISO country code. See for more information.
- public static void SetCountryCode(string countryCode)
+ public static void PlatformSetCountryCode(string countryCode)
{
if (countryCode != null && countryCode.Length != 2)
{
@@ -205,14 +205,6 @@ static void PlatformSetLogUrl(string logUrl)
}
}
- internal static void PlatformSetCustomProperties(CustomProperties customProperties)
- {
- lock (AppCenterLock)
- {
- Instance.SetInstanceCustomProperties(customProperties);
- }
- }
-
internal static void PlatformUnsetInstance()
{
Instance = null;
@@ -310,7 +302,6 @@ private AppCenter()
{
_applicationSettings = _applicationSettingsFactory?.CreateApplicationSettings() ?? new DefaultApplicationSettings();
LogSerializer.AddLogType(StartServiceLog.JsonIdentifier, typeof(StartServiceLog));
- LogSerializer.AddLogType(CustomPropertyLog.JsonIdentifier, typeof(CustomPropertyLog));
ApplicationLifecycleHelper.Instance.UnhandledExceptionOccurred += OnUnhandledExceptionOccurred;
}
}
@@ -385,21 +376,6 @@ private Task SetInstanceStorageMaxSize(long storageMaxSize)
return _storageTaskCompletionSource.Task;
}
- private void SetInstanceCustomProperties(CustomProperties customProperties)
- {
- if (!Configured)
- {
- AppCenterLog.Error(AppCenterLog.LogTag, NotConfiguredMessage);
- return;
- }
- if (customProperties == null || customProperties.Properties.Count == 0)
- {
- AppCenterLog.Error(AppCenterLog.LogTag, "Custom properties may not be null or empty.");
- return;
- }
- _channel.EnqueueAsync(new CustomPropertyLog { Properties = customProperties.Properties });
- }
-
private void OnUnhandledExceptionOccurred(object sender, UnhandledExceptionOccurredEventArgs args)
{
// Make sure that all storage operations are complete.
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/Channel.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/Channel.cs
index 8502dad0c..ff0c9ea1e 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/Channel.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/Channel.cs
@@ -71,7 +71,6 @@ internal Channel(string name, int maxLogsPerBatch, TimeSpan batchTimeInterval, i
_pendingLogCount = task.Result;
}
lockHolder.Dispose();
- CheckPendingLogs(_mutex.State);
});
}
@@ -229,7 +228,7 @@ private async Task PersistLogAsync(Log log, State state)
}
if (enabled)
{
- CheckPendingLogs(state);
+ CheckPendingLogsInternal(state);
return;
}
AppCenterLog.Warn(AppCenterLog.LogTag, "Channel is temporarily disabled; log was saved to disk");
@@ -300,7 +299,7 @@ private void Resume(State state, bool needEnableChannel = true)
{
AppCenterLog.Warn(AppCenterLog.LogTag, "The resume operation has been canceled");
}
- CheckPendingLogs(state);
+ CheckPendingLogsInternal(state);
}
///
@@ -468,7 +467,7 @@ private async Task TriggerIngestionAsync(State state)
_calls.Add(ingestionCall);
}
ingestionCall.ContinueWith(call => HandleSendingResult(state, batchId, call));
- CheckPendingLogs(state);
+ CheckPendingLogsInternal(state);
}
catch (StorageException)
{
@@ -545,7 +544,7 @@ private void HandleSendingSuccess(State state, string batchId)
{
AppCenterLog.Warn(AppCenterLog.LogTag, $"Could not delete logs for batch {batchId}", e);
}
- CheckPendingLogs(state);
+ CheckPendingLogsInternal(state);
}
private void HandleSendingFailure(State state, string batchId, Exception exception)
@@ -574,19 +573,7 @@ private void HandleSendingFailure(State state, string batchId, Exception excepti
}
}
- public void SetNetworkRequestAllowed(bool isAllowed)
- {
- if (isAllowed)
- {
- Resume(_mutex.State, false);
- }
- else
- {
- Suspend(_mutex.State, false, new CancellationException(), false);
- }
- }
-
- private void CheckPendingLogs(State state)
+ private void CheckPendingLogsInternal(State state)
{
if (!_enabled)
{
@@ -598,7 +585,7 @@ private void CheckPendingLogs(State state)
AppCenterLog.Info(AppCenterLog.LogTag, "App Center is in offline mode.");
return;
}
- AppCenterLog.Debug(AppCenterLog.LogTag, $"CheckPendingLogs({Name}) pending log count: {_pendingLogCount}");
+ AppCenterLog.Debug(AppCenterLog.LogTag, $"CheckPendingLogsInternal({Name}) pending log count: {_pendingLogCount}");
using (_mutex.GetLock())
{
if (_pendingLogCount >= _maxLogsPerBatch)
@@ -640,6 +627,30 @@ private void CheckPendingLogs(State state)
}
}
+ ///
+ /// Set network request allowed. If true check pending logs, suspend sending logs otherwise.
+ ///
+ /// True if network request allowed, false otherwise.
+ public void SetNetworkRequestAllowed(bool isAllowed)
+ {
+ if (isAllowed)
+ {
+ Resume(_mutex.State, false);
+ }
+ else
+ {
+ Suspend(_mutex.State, false, new CancellationException(), false);
+ }
+ }
+
+ ///
+ /// Check if there are any pending logs in database and rigger ingestion if such logs are found.
+ ///
+ public void CheckPendingLogs()
+ {
+ CheckPendingLogsInternal(_mutex.State);
+ }
+
///
/// Stop all calls in progress and deactivate this channel.
///
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/ChannelGroup.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/ChannelGroup.cs
index 6fe82907a..092de49d3 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/ChannelGroup.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/ChannelGroup.cs
@@ -94,6 +94,7 @@ public void AddChannel(IChannelUnit channel)
// The benefit of throwing an exception in this case is debatable. Might make sense to allow this.
throw new AppCenterException("Attempted to add duplicate channel to group");
}
+ channel.CheckPendingLogs();
channel.EnqueuingLog += AnyChannelEnqueuingLog;
channel.FilteringLog += AnyChannelFilteringLog;
channel.SendingLog += AnyChannelSendingLog;
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/IChannelUnit.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/IChannelUnit.cs
index be7195563..75d1e22e2 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/IChannelUnit.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/IChannelUnit.cs
@@ -16,5 +16,10 @@ public interface IChannelUnit : IChannel
///
///
Task EnqueueAsync(Log log);
+
+ ///
+ /// Check if there are any pending logs in database and rigger ingestion if such logs are found.
+ ///
+ void CheckPendingLogs();
}
}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/CustomProperties.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/CustomProperties.cs
deleted file mode 100644
index b8f16564f..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/CustomProperties.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using Microsoft.AppCenter.Ingestion.Models;
-using System;
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-
-namespace Microsoft.AppCenter
-{
- public partial class CustomProperties
- {
- private static readonly Regex KeyPattern = new Regex("^[a-zA-Z][a-zA-Z0-9]*$");
- private const int MaxCustomPropertiesCount = 60;
- internal IList Properties { get; } = new List();
-
- private CustomProperties SetProperty(CustomProperty property)
- {
- try
- {
- property.Validate();
- }
- catch (ValidationException e)
- {
- AppCenterLog.Error(AppCenterLog.LogTag, e.Message);
- return this;
- }
- if (Properties.Count >= MaxCustomPropertiesCount)
- {
- AppCenterLog.Error(AppCenterLog.LogTag, "Custom properties cannot contain more than " + MaxCustomPropertiesCount + " items.");
- return this;
- }
- CustomProperty existingPropertyToRemove = null;
- foreach (var existingProperty in Properties)
- {
- if (existingProperty.Name == property.Name)
- {
- existingPropertyToRemove = existingProperty;
- break;
- }
- }
- if (existingPropertyToRemove != null)
- {
- AppCenterLog.Warn(AppCenterLog.LogTag, "Custom property \"" + property.Name + "\" is already set or cleared and will be overwritten.");
- Properties.Remove(existingPropertyToRemove);
- }
- Properties.Add(property);
- return this;
- }
-
- public CustomProperties PlatformSet(string key, string value)
- {
- return SetProperty(new StringProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, DateTime value)
- {
- return SetProperty(new DateTimeProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, int value)
- {
- return SetProperty(new NumberProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, long value)
- {
- return SetProperty(new NumberProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, float value)
- {
- return SetProperty(new NumberProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, double value)
- {
- return SetProperty(new NumberProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, decimal value)
- {
- return SetProperty(new NumberProperty(key, value));
- }
-
- public CustomProperties PlatformSet(string key, bool value)
- {
- return SetProperty(new BooleanProperty(key, value));
- }
-
- public CustomProperties PlatformClear(string key)
- {
- return SetProperty(new ClearProperty(key));
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/BooleanProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/BooleanProperty.cs
deleted file mode 100644
index 87507ad97..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/BooleanProperty.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Boolean property.
- ///
- [JsonObject(JsonIdentifier)]
- public partial class BooleanProperty : CustomProperty
- {
- internal const string JsonIdentifier = "boolean";
-
- ///
- /// Initializes a new instance of the BooleanProperty class.
- ///
- public BooleanProperty() { }
-
- ///
- /// Initializes a new instance of the BooleanProperty class.
- ///
- /// Boolean property value.
- public BooleanProperty(string name, bool value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Gets or sets boolean property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public bool Value { get; set; }
-
- public override object GetValue()
- {
- return Value;
- }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/ClearProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/ClearProperty.cs
deleted file mode 100644
index 99c33e191..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/ClearProperty.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Microsoft.AppCenter.Ingestion.Models.Serialization;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Clear an existing property.
- ///
- [JsonObject(JsonIdentifier)]
- public partial class ClearProperty : CustomProperty
- {
- internal const string JsonIdentifier = "clear";
-
- ///
- /// Initializes a new instance of the ClearProperty class.
- ///
- public ClearProperty() { }
-
- ///
- /// Initializes a new instance of the ClearProperty class.
- ///
- public ClearProperty(string name)
- : base(name)
- {
- }
-
- public override object GetValue()
- {
- return null;
- }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomProperty.cs
deleted file mode 100644
index c7532e2c6..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomProperty.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Microsoft.AppCenter.Ingestion.Models.Serialization;
- using Newtonsoft.Json;
- using System.Linq;
-
- public abstract class CustomProperty
- {
- private const int MaxNameLength = 128;
- private const string KeyPattern = "^[a-zA-Z][a-zA-Z0-9\\-_]*$";
-
- ///
- /// Initializes a new instance of the CustomProperty class.
- ///
- public CustomProperty() { }
-
- ///
- /// Initializes a new instance of the CustomProperty class.
- ///
- public CustomProperty(string name)
- {
- Name = name;
- }
-
- ///
- ///
- [JsonProperty(PropertyName = "name")]
- public string Name { get; set; }
-
- public abstract object GetValue();
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public virtual void Validate()
- {
- if (Name == null)
- {
- throw new ValidationException(ValidationException.Rule.CannotBeNull, nameof(Name));
- }
- if (Name != null)
- {
- if (Name.Length > MaxNameLength)
- {
- throw new ValidationException(ValidationException.Rule.MaxLength, nameof(Name), MaxNameLength);
- }
- if (!System.Text.RegularExpressions.Regex.IsMatch(Name, KeyPattern))
- {
- throw new ValidationException(ValidationException.Rule.Pattern, nameof(Name), KeyPattern);
- }
- }
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomPropertyLog.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomPropertyLog.cs
deleted file mode 100644
index e9eabe69e..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/CustomPropertyLog.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Microsoft.AppCenter.Ingestion.Models.Serialization;
- using Newtonsoft.Json;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
-
- ///
- /// The custom properties log model.
- ///
- [JsonObject(JsonIdentifier)]
- public class CustomPropertyLog : Log
- {
- internal const string JsonIdentifier = "customProperties";
-
- ///
- /// Initializes a new instance of the CustomPropertyLog class.
- ///
- /// Log timestamp, example:
- /// '2017-03-13T18:05:42Z'.
- ///
- /// When tracking an analytics session, logs can be
- /// part of the session by specifying this identifier.
- /// This attribute is optional, a missing value means the session
- /// tracking is disabled (like when using only error reporting
- /// feature).
- /// Concrete types like StartSessionLog or PageLog are always part of a
- /// session and always include this identifier.
- ///
- /// Custom property changes.
- public CustomPropertyLog()
- {
- Properties = new List();
- }
-
- ///
- /// Gets or sets custom property changes.
- ///
- [JsonProperty(PropertyName = "properties")]
- public IList Properties { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- if (Properties != null)
- {
- if (Properties.Count > 60)
- {
- throw new ValidationException(ValidationException.Rule.MaxItems, nameof(Properties), 60);
- }
- if (Properties.Count < 1)
- {
- throw new ValidationException(ValidationException.Rule.MinItems, nameof(Properties), 1);
- }
- foreach (var element in Properties)
- {
- if (element != null)
- {
- element.Validate();
- }
- }
- }
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/DateTimeProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/DateTimeProperty.cs
deleted file mode 100644
index 576d84f5e..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/DateTimeProperty.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Date and time property.
- ///
- [JsonObject(JsonIdentifier)]
- public partial class DateTimeProperty : CustomProperty
- {
- internal const string JsonIdentifier = "dateTime";
-
- ///
- /// Initializes a new instance of the DateTimeProperty class.
- ///
- public DateTimeProperty() { }
-
- ///
- /// Initializes a new instance of the DateTimeProperty class.
- ///
- /// Date time property value.
- public DateTimeProperty(string name, System.DateTime value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Gets or sets date time property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public System.DateTime Value { get; set; }
-
- public override object GetValue()
- {
- return Value;
- }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/NumberProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/NumberProperty.cs
deleted file mode 100644
index 295bdb7a8..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/NumberProperty.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Number property.
- ///
- [JsonObject(JsonIdentifier)]
- public partial class NumberProperty : CustomProperty
- {
- internal const string JsonIdentifier = "number";
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- public NumberProperty() { }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, int value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, long value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, float value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, double value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, decimal value)
- : base(name)
- {
- Value = value;
- }
-
- // Use object because number can be either decimal or double (or other numeric types).
- // Decimal has narrower range than double but double has lower precision. Thus, they
- // can't be casted between.
-
- ///
- /// Gets or sets number property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public object Value { get; set; }
-
- public override object GetValue()
- {
- return Value;
- }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/CustomPropertyJsonConverter.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/CustomPropertyJsonConverter.cs
deleted file mode 100644
index 80dc3aa07..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/CustomPropertyJsonConverter.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace Microsoft.AppCenter.Ingestion.Models.Serialization
-{
- public class CustomPropertyJsonConverter : JsonConverter
- {
- private readonly Dictionary _customPropertyTypes = new Dictionary
- {
- { BooleanProperty.JsonIdentifier, typeof(BooleanProperty) },
- { ClearProperty.JsonIdentifier, typeof(ClearProperty) },
- { DateTimeProperty.JsonIdentifier, typeof(DateTimeProperty) },
- { NumberProperty.JsonIdentifier, typeof(NumberProperty) },
- { StringProperty.JsonIdentifier, typeof(StringProperty) }
- };
-
- private readonly object _jsonConverterLock = new object();
- private static readonly JsonSerializerSettings SerializationSettings;
- internal const string TypeIdKey = "type";
-
- public CustomPropertyJsonConverter()
- {
- _customPropertyTypes[BooleanProperty.JsonIdentifier] = typeof(BooleanProperty);
- _customPropertyTypes[ClearProperty.JsonIdentifier] = typeof(ClearProperty);
- _customPropertyTypes[ClearProperty.JsonIdentifier] = typeof(ClearProperty);
- _customPropertyTypes[ClearProperty.JsonIdentifier] = typeof(ClearProperty);
-
- }
-
- public override bool CanConvert(Type objectType)
- {
- return typeof(CustomProperty).IsAssignableFrom(objectType);
- }
-
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- Type logType;
- var jsonObject = JObject.Load(reader);
- var typeName = jsonObject.GetValue(TypeIdKey)?.ToString();
- lock (_jsonConverterLock)
- {
- if (typeName == null || !_customPropertyTypes.ContainsKey(typeName))
- {
- throw new JsonReaderException("Could not identify type of log");
- }
- logType = _customPropertyTypes[typeName];
- }
- jsonObject.Remove(TypeIdKey);
- return jsonObject.ToObject(logType);
- }
-
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- var info = value.GetType().GetTypeInfo();
- var attribute = info.GetCustomAttribute(typeof(JsonObjectAttribute)) as JsonObjectAttribute;
- if (attribute == null)
- {
- throw new JsonWriterException("Cannot serialize property; Log type is missing JsonObjectAttribute");
- }
- var jsonText = JsonConvert.SerializeObject(value, SerializationSettings);
- var jsonObject = JObject.Parse(jsonText);
- jsonObject.Add(TypeIdKey, JToken.FromObject(attribute.Id));
- writer.WriteRawValue(jsonObject.ToString());
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/LogJsonConverter.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/LogJsonConverter.cs
index 5e0da03e4..1d95bf76d 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/LogJsonConverter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/Serialization/LogJsonConverter.cs
@@ -25,8 +25,7 @@ static LogJsonConverter()
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
NullValueHandling = NullValueHandling.Ignore,
- ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
- Converters = { new CustomPropertyJsonConverter() }
+ ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
}
@@ -56,10 +55,6 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
}
logType = _logTypes[typeName];
jsonObject.Remove(TypeIdKey);
- if (logType == typeof(CustomPropertyLog))
- {
- return ReadCustomPropertyLog(jsonObject);
- }
}
return jsonObject.ToObject(logType);
}
@@ -77,20 +72,5 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
jsonObject.Add(TypeIdKey, JToken.FromObject(attribute.Id));
writer.WriteRawValue(jsonObject.ToString());
}
-
- public Log ReadCustomPropertyLog(JObject logObject)
- {
- var propertiesIdentifier = "properties";
- var propertiesJson = logObject.GetValue(propertiesIdentifier);
- logObject.Remove(propertiesIdentifier);
- var customPropertiesLog = logObject.ToObject(typeof(CustomPropertyLog)) as CustomPropertyLog;
- foreach (var child in propertiesJson.Children())
- {
- var propertyJson = child.ToString();
- var property = JsonConvert.DeserializeObject(propertyJson, SerializationSettings);
- customPropertiesLog.Properties.Add(property);
- }
- return customPropertiesLog;
- }
}
}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/StringProperty.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/StringProperty.cs
deleted file mode 100644
index bb175c3f8..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Ingestion/Models/StringProperty.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.AppCenter;
- using Microsoft.AppCenter.Ingestion;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// String property.
- ///
- [JsonObject(JsonIdentifier)]
- public partial class StringProperty : CustomProperty
- {
- internal const string JsonIdentifier = "string";
- ///
- /// Initializes a new instance of the StringProperty class.
- ///
- public StringProperty() { }
-
- ///
- /// Initializes a new instance of the StringProperty class.
- ///
- /// String property value.
- public StringProperty(string name, string value)
- : base(name)
- {
- Value = value;
- }
-
- ///
- /// Gets or sets string property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public string Value { get; set; }
-
- public override object GetValue()
- {
- return Value;
- }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- if (Value == null)
- {
- throw new ValidationException(ValidationException.Rule.CannotBeNull, nameof(Value));
- }
- if (Value != null)
- {
- if (Value.Length > 128)
- {
- throw new ValidationException(ValidationException.Rule.MaxLength, nameof(Value), 128);
- }
- }
- }
- }
-}
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Microsoft.AppCenter.Windows.Shared.projitems b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Microsoft.AppCenter.Windows.Shared.projitems
index b17fe3fd9..13124f891 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Microsoft.AppCenter.Windows.Shared.projitems
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Microsoft.AppCenter.Windows.Shared.projitems
@@ -18,20 +18,11 @@
-
-
-
-
-
-
-
-
-
diff --git a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Utils/Constants.cs b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Utils/Constants.cs
index 8fca568b3..d3b10ea3e 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Utils/Constants.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Utils/Constants.cs
@@ -15,7 +15,7 @@ public static partial class Constants
// Channel constants
public const int DefaultTriggerCount = 50;
- public static readonly TimeSpan DefaultTriggerInterval = TimeSpan.FromSeconds(3);
+ public static readonly TimeSpan DefaultTriggerInterval = TimeSpan.FromSeconds(6);
public const int DefaultTriggerMaxParallelRequests = 3;
}
}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Microsoft.AppCenter.WindowsDesktop.csproj b/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Microsoft.AppCenter.WindowsDesktop.csproj
index bb72e3f66..ef97e5983 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Microsoft.AppCenter.WindowsDesktop.csproj
+++ b/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Microsoft.AppCenter.WindowsDesktop.csproj
@@ -1,12 +1,12 @@
- netcoreapp3.0;net461;net5.0-windows;net5.0-windows10.0.17763.0
+ netcoreapp3.0;net461;net472;net5.0-windows;net5.0-windows10.0.17763.0
Microsoft.AppCenter
true
- 4.4.0-SNAPSHOT
+ 4.5.0-SNAPSHOT
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
Microsoft.AppCenter
bin\Microsoft.AppCenter.xml
true
@@ -22,7 +22,6 @@
-
@@ -39,4 +38,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Utils/DeviceInformationHelper.cs b/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Utils/DeviceInformationHelper.cs
index 69e8a77d0..90d894541 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Utils/DeviceInformationHelper.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.WindowsDesktop/Utils/DeviceInformationHelper.cs
@@ -4,6 +4,7 @@
using System;
using System.Diagnostics;
using System.Drawing;
+using System.Management;
using System.Reflection;
using System.Runtime.InteropServices;
@@ -68,6 +69,16 @@ protected override string GetDeviceModel()
AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device model with error: ", exception);
return string.Empty;
}
+ catch (COMException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device model. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
+ catch (ManagementException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device model. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
return string.Empty;
}
@@ -92,6 +103,16 @@ protected override string GetDeviceOemName()
AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device OEM name with error: ", exception);
return string.Empty;
}
+ catch (COMException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device OEM name. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
+ catch (ManagementException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device model. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
return string.Empty;
}
@@ -141,6 +162,16 @@ protected override string GetOsVersion()
AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device OS version with error: ", exception);
return string.Empty;
}
+ catch (COMException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device OS version. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
+ catch (ManagementException exception)
+ {
+ AppCenterLog.Warn(AppCenterLog.LogTag, "Failed to get device model. Make sure that WMI service is enabled.", exception);
+ return string.Empty;
+ }
return string.Empty;
}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/ApiDefinition.cs b/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/ApiDefinition.cs
index 2b19d4660..14abeed65 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/ApiDefinition.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/ApiDefinition.cs
@@ -151,31 +151,6 @@ interface MSACDevice
bool IsEqual(MSACDevice device);
}
- // @interface MSACCustomProperties : NSObject
- [BaseType(typeof(NSObject))]
- interface MSACCustomProperties
- {
- // - (instancetype)setString:(NSString *)value forKey:(NSString *)key;
- [Export("setString:forKey:")]
- void Set([NullAllowed] string value, [NullAllowed] string key);
-
- // - (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key;
- [Export("setNumber:forKey:")]
- void Set(NSNumber value, [NullAllowed] string key);
-
- // - (instancetype)setBool:(BOOL)value forKey:(NSString *)key;
- [Export("setBool:forKey:")]
- void Set(bool value, [NullAllowed] string key);
-
- // - (instancetype)setDate:(NSDate *)value forKey:(NSString *)key;
- [Export("setDate:forKey:")]
- void Set(NSDate value, [NullAllowed] string key);
-
- // - (instancetype)clearPropertyForKey:(NSString *)key;
- [Export("clearPropertyForKey:")]
- void Clear([NullAllowed] string key);
- }
-
// @interface MSACAppCenter : NSObject
[BaseType(typeof(NSObject), Name = "MSACAppCenter")]
interface MSACAppCenter
@@ -235,6 +210,11 @@ interface MSACAppCenter
[Export("setLogLevel:")]
void SetLogLevel(MSACLogLevel logLevel);
+ // + (void)setCountryCode:(NSString *)countryCode
+ [Static]
+ [Export("setCountryCode:")]
+ void SetCountryCode(string countryCode);
+
// + (void)setNetworkRequestsAllowed:(BOOL)isAllowed;
[Static]
[Export("setNetworkRequestsAllowed:")]
@@ -270,11 +250,6 @@ interface MSACAppCenter
[Export("isDebuggerAttached")]
bool IsDebuggerAttached();
- // + (void)setCustomProperties:(MSACCustomProperties *)customProperties;
- [Static]
- [Export("setCustomProperties:")]
- void SetCustomProperties([NullAllowed] MSACCustomProperties properties);
-
// +(void)setMaxStorageSize:(long)sizeInBytes completionHandler(void (^)(BOOL))completionHandler;
[Static]
[Export("setMaxStorageSize:completionHandler:")]
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/Properties/AssemblyInfo.cs
index 109394a29..cedf7d644 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/Properties/AssemblyInfo.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS.Bindings/Properties/AssemblyInfo.cs
@@ -33,5 +33,5 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter.iOS/AppCenter.cs
index 279dbea6e..05db02eca 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS/AppCenter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS/AppCenter.cs
@@ -95,6 +95,11 @@ static void PlatformSetLogUrl(string logUrl)
iOSAppCenter.SetLogUrl(logUrl);
}
+ static void PlatformSetCountryCode(string countryCode)
+ {
+ iOSAppCenter.SetCountryCode(countryCode);
+ }
+
static bool PlatformConfigured
{
get
@@ -190,11 +195,6 @@ static void SetWrapperSdk()
iOSAppCenter.SetWrapperSdk(wrapperSdk);
}
- static void PlatformSetCustomProperties(CustomProperties customProperties)
- {
- iOSAppCenter.SetCustomProperties(customProperties?.IOSCustomProperties);
- }
-
internal static void PlatformUnsetInstance()
{
iOSAppCenter.ResetSharedInstance();
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS/CustomProperties.cs b/SDK/AppCenter/Microsoft.AppCenter.iOS/CustomProperties.cs
deleted file mode 100644
index fd5310167..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS/CustomProperties.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-using System;
-using Foundation;
-using Microsoft.AppCenter.iOS.Bindings;
-
-namespace Microsoft.AppCenter
-{
- public partial class CustomProperties
- {
- static readonly DateTime _epoch = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
- internal MSACCustomProperties IOSCustomProperties { get; } = new MSACCustomProperties();
-
- CustomProperties PlatformSet(string key, string value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, DateTime value)
- {
- var nsDate = NSDate.FromTimeIntervalSinceReferenceDate((value.ToUniversalTime() - _epoch).TotalSeconds);
- IOSCustomProperties.Set(nsDate, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, int value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, long value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, float value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, double value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, decimal value)
- {
- IOSCustomProperties.Set((double)value, key);
- return this;
- }
-
- CustomProperties PlatformSet(string key, bool value)
- {
- IOSCustomProperties.Set(value, key);
- return this;
- }
-
- CustomProperties PlatformClear(string key)
- {
- IOSCustomProperties.Clear(key);
- return this;
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS/Info.plist b/SDK/AppCenter/Microsoft.AppCenter.iOS/Info.plist
new file mode 100644
index 000000000..0c67376eb
--- /dev/null
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS/Info.plist
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS/Microsoft.AppCenter.iOS.csproj b/SDK/AppCenter/Microsoft.AppCenter.iOS/Microsoft.AppCenter.iOS.csproj
index 56e1d47d0..6846d8268 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS/Microsoft.AppCenter.iOS.csproj
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS/Microsoft.AppCenter.iOS.csproj
@@ -54,7 +54,6 @@
-
@@ -64,6 +63,9 @@
Microsoft.AppCenter.iOS.Bindings
+
+
+
diff --git a/SDK/AppCenter/Microsoft.AppCenter.iOS/Properties/AssemblyInfo.cs b/SDK/AppCenter/Microsoft.AppCenter.iOS/Properties/AssemblyInfo.cs
index e54d91558..81be5dc03 100644
--- a/SDK/AppCenter/Microsoft.AppCenter.iOS/Properties/AssemblyInfo.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter.iOS/Properties/AssemblyInfo.cs
@@ -27,6 +27,6 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
[assembly: InternalsVisibleTo("Microsoft.AppCenter.Test.Functional, PublicKey=002400000480000094000000060200000024000052534131000400000100010055c4e2f76a6f3430448b1fd5b9ced790181e698a86759ece168bd955efc4297c9f89a303204019a9d2e8e92d204ba87e4825b36f8ba08113dc7297dcebe3d2bc15fabeae1d8c71d69769adedbc37ba7e197efc537cac2d477772ab38c4d4ccee45ddf99ce4343e9b665b663280c4dae2520b508bc7de0faf1978934f094d68e3")]
diff --git a/SDK/AppCenter/Microsoft.AppCenter/AppCenter.cs b/SDK/AppCenter/Microsoft.AppCenter/AppCenter.cs
index 06ded7f05..ff633072f 100644
--- a/SDK/AppCenter/Microsoft.AppCenter/AppCenter.cs
+++ b/SDK/AppCenter/Microsoft.AppCenter/AppCenter.cs
@@ -46,6 +46,10 @@ static void PlatformSetUserId(string userId)
{
}
+ static void PlatformSetCountryCode(string countryCode)
+ {
+ }
+
static bool PlatformConfigured { get; }
static void PlatformConfigure(string appSecret)
@@ -63,10 +67,6 @@ static void PlatformStart(string appSecret, params Type[] services)
Debug.WriteLine(ErrorMessage);
}
- static void PlatformSetCustomProperties(CustomProperties customProperties)
- {
- }
-
static Task PlatformSetMaxStorageSizeAsync(long sizeInBytes)
{
return Task.FromResult(false);
diff --git a/SDK/AppCenter/Microsoft.AppCenter/CustomProperties.cs b/SDK/AppCenter/Microsoft.AppCenter/CustomProperties.cs
deleted file mode 100644
index fb1254217..000000000
--- a/SDK/AppCenter/Microsoft.AppCenter/CustomProperties.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-namespace Microsoft.AppCenter
-{
- public partial class CustomProperties
- {
- CustomProperties PlatformSet(string key, string value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, System.DateTime value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, int value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, long value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, float value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, double value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, decimal value)
- {
- return this;
- }
-
- CustomProperties PlatformSet(string key, bool value)
- {
- return this;
- }
-
- CustomProperties PlatformClear(string key)
- {
- return this;
- }
- }
-}
diff --git a/SDK/AppCenter/Microsoft.AppCenter/Microsoft.AppCenter.csproj b/SDK/AppCenter/Microsoft.AppCenter/Microsoft.AppCenter.csproj
index 6d7309668..0ba3d7969 100644
--- a/SDK/AppCenter/Microsoft.AppCenter/Microsoft.AppCenter.csproj
+++ b/SDK/AppCenter/Microsoft.AppCenter/Microsoft.AppCenter.csproj
@@ -8,9 +8,9 @@
Microsoft Corp. All rights reserved.
Microsoft.AppCenter.Core
Microsoft Corporation
- 4.4.0-SNAPSHOT
+ 4.5.0-SNAPSHOT
0.0.0.0
- 4.4.0.0
+ 4.5.0.0
Microsoft.AppCenter.Core
bin\$(Configuration)\$(TargetFramework)\Microsoft.AppCenter.xml
true
diff --git a/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Properties/AssemblyInfo.cs b/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Properties/AssemblyInfo.cs
index e7b3c35f2..df82a2721 100644
--- a/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Properties/AssemblyInfo.cs
+++ b/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Properties/AssemblyInfo.cs
@@ -21,8 +21,8 @@
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("4.4.0.0")]
-[assembly: AssemblyInformationalVersion("4.4.0-SNAPSHOT")]
+[assembly: AssemblyFileVersion("4.5.0.0")]
+[assembly: AssemblyInformationalVersion("4.5.0-SNAPSHOT")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
diff --git a/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Transforms/EnumFields.xml b/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Transforms/EnumFields.xml
index 68cc7fd68..d363e6a71 100644
--- a/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Transforms/EnumFields.xml
+++ b/SDK/AppCenterAnalytics/Microsoft.AppCenter.Analytics.Android.Bindings/Transforms/EnumFields.xml
@@ -2,11 +2,11 @@
+
+
+
+
+
+
$version$
@@ -74,6 +84,11 @@
+
+
+
+
+
@@ -82,6 +97,10 @@
+
+
+
+
diff --git a/nuget/AppCenterAnalytics.nuspec b/nuget/AppCenterAnalytics.nuspec
index 9f4b9b8b2..a05e141df 100644
--- a/nuget/AppCenterAnalytics.nuspec
+++ b/nuget/AppCenterAnalytics.nuspec
@@ -35,6 +35,11 @@
+
+
+
+
+
@@ -43,6 +48,10 @@
+
+
+
+
diff --git a/nuget/AppCenterCrashes.nuspec b/nuget/AppCenterCrashes.nuspec
index 07f516954..50d1e5eb1 100644
--- a/nuget/AppCenterCrashes.nuspec
+++ b/nuget/AppCenterCrashes.nuspec
@@ -41,6 +41,11 @@
+
+
+
+
+
@@ -49,6 +54,10 @@
+
+
+
+
diff --git a/nuget/MacAppCenter.nuspec b/nuget/MacAppCenter.nuspec
index a334a7023..edb12c771 100644
--- a/nuget/MacAppCenter.nuspec
+++ b/nuget/MacAppCenter.nuspec
@@ -37,5 +37,11 @@
+
+
+
+
+
+
diff --git a/nuget/MacAppCenterAnalytics.nuspec b/nuget/MacAppCenterAnalytics.nuspec
index 313a9db6b..0bfd2186d 100644
--- a/nuget/MacAppCenterAnalytics.nuspec
+++ b/nuget/MacAppCenterAnalytics.nuspec
@@ -34,5 +34,10 @@
+
+
+
+
+
diff --git a/nuget/MacAppCenterCrashes.nuspec b/nuget/MacAppCenterCrashes.nuspec
index bf2b25482..53fb12ad4 100644
--- a/nuget/MacAppCenterCrashes.nuspec
+++ b/nuget/MacAppCenterCrashes.nuspec
@@ -34,5 +34,10 @@
+
+
+
+
+
diff --git a/nuget/WindowsAppCenter.nuspec b/nuget/WindowsAppCenter.nuspec
index 2298b735e..07fe69d63 100644
--- a/nuget/WindowsAppCenter.nuspec
+++ b/nuget/WindowsAppCenter.nuspec
@@ -23,14 +23,16 @@
-
+
+
+
+
-
@@ -46,10 +48,18 @@
+
+
+
+
+
+
+
+
@@ -62,6 +72,10 @@
+
+
+
+
diff --git a/nuget/WindowsAppCenterAnalytics.nuspec b/nuget/WindowsAppCenterAnalytics.nuspec
index f70f2fd7a..60e98a425 100644
--- a/nuget/WindowsAppCenterAnalytics.nuspec
+++ b/nuget/WindowsAppCenterAnalytics.nuspec
@@ -28,6 +28,10 @@
+
+
+
+
diff --git a/nuget/WindowsAppCenterCrashes.nuspec b/nuget/WindowsAppCenterCrashes.nuspec
index 5794faadf..d7e75ecfc 100644
--- a/nuget/WindowsAppCenterCrashes.nuspec
+++ b/nuget/WindowsAppCenterCrashes.nuspec
@@ -34,6 +34,10 @@
+
+
+
+
diff --git a/scripts/configuration/VersionReader.cake b/scripts/configuration/VersionReader.cake
index f541d3032..42e8ab9ff 100644
--- a/scripts/configuration/VersionReader.cake
+++ b/scripts/configuration/VersionReader.cake
@@ -1,27 +1,27 @@
public class VersionReader
{
private const string SdkVersionTag = "sdkVersion";
- private const string IosVersionTag = "iosVersion";
+ private const string AppleVersionTag = "appleVersion";
private const string AndroidVersionTag = "androidVersion";
public static string SdkVersion { get; private set; }
- public static string IosVersion { get; private set; }
+ public static string AppleVersion { get; private set; }
public static string AndroidVersion { get; private set; }
public static void ReadVersions()
{
XmlReader reader = ConfigFile.CreateReader();
string sdkVersion = null;
- string iosVersion = null;
+ string appleVersion = null;
string androidVersion = null;
while (reader.Read())
{
ReadVersion(SdkVersionTag, reader, ref sdkVersion);
- ReadVersion(IosVersionTag, reader, ref iosVersion);
+ ReadVersion(AppleVersionTag, reader, ref appleVersion);
ReadVersion(AndroidVersionTag, reader, ref androidVersion);
}
SdkVersion = sdkVersion;
- IosVersion = iosVersion;
+ AppleVersion = appleVersion;
AndroidVersion = androidVersion;
reader.Close();
}
@@ -37,10 +37,10 @@ public class VersionReader
}
}
- public static void WriteIosVersion(string value)
+ public static void WriteAppleVersion(string value)
{
- Statics.Context.Information($"Replacing build config versions: {IosVersionTag} from {IosVersion} to {value}.");
- Statics.Context.ReplaceTextInFiles(ConfigFile.Path, $"<{IosVersionTag}>{IosVersion}{IosVersionTag}>", $"<{IosVersionTag}>{value}{IosVersionTag}>");
+ Statics.Context.Information($"Replacing build config versions: {AppleVersionTag} from {AppleVersion} to {value}.");
+ Statics.Context.ReplaceTextInFiles(ConfigFile.Path, $"<{AppleVersionTag}>{AppleVersion}{AppleVersionTag}>", $"<{AppleVersionTag}>{value}{AppleVersionTag}>");
}
public static void WriteAndroidVersion(string value)
diff --git a/scripts/configuration/ac-build-config.xml b/scripts/configuration/ac-build-config.xml
index a6e3d53d6..f51e4f47d 100644
--- a/scripts/configuration/ac-build-config.xml
+++ b/scripts/configuration/ac-build-config.xml
@@ -1,9 +1,9 @@
- 4.4.0-SNAPSHOT
- 4.3.0
- 4.3.1
+ 4.5.0-SNAPSHOT
+ 4.4.1
+ 4.4.2
@@ -15,6 +15,14 @@
+
+
+
+
+
+
+
+
@@ -40,6 +48,11 @@
+
+
+
+
+
diff --git a/scripts/generated/AvalancheIngestion.cs b/scripts/generated/AvalancheIngestion.cs
index 359924bb9..0c306877e 100644
--- a/scripts/generated/AvalancheIngestion.cs
+++ b/scripts/generated/AvalancheIngestion.cs
@@ -162,8 +162,6 @@ private void Initialize()
DeserializationSettings.Converters.Add(new PolymorphicDeserializeJsonConverter("type"));
SerializationSettings.Converters.Add(new PolymorphicSerializeJsonConverter("type"));
DeserializationSettings.Converters.Add(new PolymorphicDeserializeJsonConverter("type"));
- SerializationSettings.Converters.Add(new PolymorphicSerializeJsonConverter("type"));
- DeserializationSettings.Converters.Add(new PolymorphicDeserializeJsonConverter("type"));
CustomInitialize();
}
///
diff --git a/scripts/generated/Microsoft.AppCenter.Ingestion.Models.cs b/scripts/generated/Microsoft.AppCenter.Ingestion.Models.cs
index d70b7f8d3..79e49312d 100644
--- a/scripts/generated/Microsoft.AppCenter.Ingestion.Models.cs
+++ b/scripts/generated/Microsoft.AppCenter.Ingestion.Models.cs
@@ -148,8 +148,6 @@ private void Initialize()
};
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("type"));
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("type"));
- SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("type"));
- DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("type"));
CustomInitialize();
}
///
diff --git a/scripts/generated/Microsoft.AppCenter.Ingestion.cs b/scripts/generated/Microsoft.AppCenter.Ingestion.cs
index b6a14b112..0aecfc993 100644
--- a/scripts/generated/Microsoft.AppCenter.Ingestion.cs
+++ b/scripts/generated/Microsoft.AppCenter.Ingestion.cs
@@ -145,8 +145,6 @@ private void Initialize()
};
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("type"));
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("type"));
- SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("type"));
- DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("type"));
CustomInitialize();
}
///
diff --git a/scripts/generated/Models/BooleanProperty.cs b/scripts/generated/Models/BooleanProperty.cs
deleted file mode 100644
index 3856308d3..000000000
--- a/scripts/generated/Models/BooleanProperty.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Boolean property.
- ///
- [Newtonsoft.Json.JsonObject("boolean")]
- public partial class BooleanProperty : CustomProperty
- {
- ///
- /// Initializes a new instance of the BooleanProperty class.
- ///
- public BooleanProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the BooleanProperty class.
- ///
- /// Boolean property value.
- public BooleanProperty(string name, bool value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets boolean property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public bool Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/BooleanTypedProperty.cs b/scripts/generated/Models/BooleanTypedProperty.cs
deleted file mode 100644
index 68353feb9..000000000
--- a/scripts/generated/Models/BooleanTypedProperty.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Boolean property.
- ///
- [Newtonsoft.Json.JsonObject("boolean")]
- public partial class BooleanTypedProperty : TypedProperty
- {
- ///
- /// Initializes a new instance of the BooleanTypedProperty class.
- ///
- public BooleanTypedProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the BooleanTypedProperty class.
- ///
- /// Property key.
- /// Boolean property value.
- public BooleanTypedProperty(string name, bool value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets boolean property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public bool Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/ClearProperty.cs b/scripts/generated/Models/ClearProperty.cs
deleted file mode 100644
index 3397d40f7..000000000
--- a/scripts/generated/Models/ClearProperty.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Clear an existing property.
- ///
- [Newtonsoft.Json.JsonObject("clear")]
- public partial class ClearProperty : CustomProperty
- {
- ///
- /// Initializes a new instance of the ClearProperty class.
- ///
- public ClearProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the ClearProperty class.
- ///
- public ClearProperty(string name)
- : base(name)
- {
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/CustomProperty.cs b/scripts/generated/Models/CustomProperty.cs
deleted file mode 100644
index 77bf57927..000000000
--- a/scripts/generated/Models/CustomProperty.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.Rest;
- using Newtonsoft.Json;
- using System.Linq;
-
- public partial class CustomProperty
- {
- ///
- /// Initializes a new instance of the CustomProperty class.
- ///
- public CustomProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the CustomProperty class.
- ///
- public CustomProperty(string name)
- {
- Name = name;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- ///
- [JsonProperty(PropertyName = "name")]
- public string Name { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public virtual void Validate()
- {
- if (Name == null)
- {
- throw new ValidationException(ValidationRules.CannotBeNull, "Name");
- }
- if (Name != null)
- {
- if (Name.Length > 128)
- {
- throw new ValidationException(ValidationRules.MaxLength, "Name", 128);
- }
- if (!System.Text.RegularExpressions.Regex.IsMatch(Name, "^[a-zA-Z][a-zA-Z0-9\\-_]*$"))
- {
- throw new ValidationException(ValidationRules.Pattern, "Name", "^[a-zA-Z][a-zA-Z0-9\\-_]*$");
- }
- }
- }
- }
-}
diff --git a/scripts/generated/Models/CustomPropertyLog.cs b/scripts/generated/Models/CustomPropertyLog.cs
deleted file mode 100644
index beea783b1..000000000
--- a/scripts/generated/Models/CustomPropertyLog.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.Rest;
- using Newtonsoft.Json;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
-
- ///
- /// Set or remove custom properties.
- ///
- [Newtonsoft.Json.JsonObject("customProperties")]
- public partial class CustomPropertyLog : Log
- {
- ///
- /// Initializes a new instance of the CustomPropertyLog class.
- ///
- public CustomPropertyLog()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the CustomPropertyLog class.
- ///
- /// Log timestamp, example:
- /// '2017-03-13T18:05:42Z'.
- ///
- /// When tracking an analytics session, logs can be
- /// part of the session by specifying this identifier.
- /// This attribute is optional, a missing value means the session
- /// tracking is disabled (like when using only error reporting
- /// feature).
- /// Concrete types like StartSessionLog or PageLog are always part of a
- /// session and always include this identifier.
- ///
- /// optional string used for associating logs with
- /// users.
- ///
- /// Custom property changes.
- public CustomPropertyLog(Device device, System.DateTime? timestamp = default(System.DateTime?), System.Guid? sid = default(System.Guid?), string userId = default(string), IList properties = default(IList))
- : base(device, timestamp, sid, userId)
- {
- Properties = properties;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets custom property changes.
- ///
- [JsonProperty(PropertyName = "properties")]
- public IList Properties { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- if (Properties != null)
- {
- if (Properties.Count > 60)
- {
- throw new ValidationException(ValidationRules.MaxItems, "Properties", 60);
- }
- if (Properties.Count < 1)
- {
- throw new ValidationException(ValidationRules.MinItems, "Properties", 1);
- }
- foreach (var element in Properties)
- {
- if (element != null)
- {
- element.Validate();
- }
- }
- }
- }
- }
-}
diff --git a/scripts/generated/Models/DateTimeProperty.cs b/scripts/generated/Models/DateTimeProperty.cs
deleted file mode 100644
index 5d99a3d6f..000000000
--- a/scripts/generated/Models/DateTimeProperty.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Date and time property.
- ///
- [Newtonsoft.Json.JsonObject("dateTime")]
- public partial class DateTimeProperty : CustomProperty
- {
- ///
- /// Initializes a new instance of the DateTimeProperty class.
- ///
- public DateTimeProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the DateTimeProperty class.
- ///
- /// Date time property value.
- public DateTimeProperty(string name, System.DateTime value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets date time property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public System.DateTime Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/DateTimeTypedProperty.cs b/scripts/generated/Models/DateTimeTypedProperty.cs
deleted file mode 100644
index 5580e833c..000000000
--- a/scripts/generated/Models/DateTimeTypedProperty.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Date and time property.
- ///
- [Newtonsoft.Json.JsonObject("dateTime")]
- public partial class DateTimeTypedProperty : TypedProperty
- {
- ///
- /// Initializes a new instance of the DateTimeTypedProperty class.
- ///
- public DateTimeTypedProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the DateTimeTypedProperty class.
- ///
- /// Property key.
- /// Date time property value.
- public DateTimeTypedProperty(string name, System.DateTime value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets date time property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public System.DateTime Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/NumberProperty.cs b/scripts/generated/Models/NumberProperty.cs
deleted file mode 100644
index 6d48736a9..000000000
--- a/scripts/generated/Models/NumberProperty.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// Number property.
- ///
- [Newtonsoft.Json.JsonObject("number")]
- public partial class NumberProperty : CustomProperty
- {
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- public NumberProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the NumberProperty class.
- ///
- /// Number property value.
- public NumberProperty(string name, double value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets number property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public double Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- }
- }
-}
diff --git a/scripts/generated/Models/StringProperty.cs b/scripts/generated/Models/StringProperty.cs
deleted file mode 100644
index 760e72f51..000000000
--- a/scripts/generated/Models/StringProperty.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//
-
-namespace Microsoft.AppCenter.Ingestion.Models
-{
- using Microsoft.Rest;
- using Newtonsoft.Json;
- using System.Linq;
-
- ///
- /// String property.
- ///
- [Newtonsoft.Json.JsonObject("string")]
- public partial class StringProperty : CustomProperty
- {
- ///
- /// Initializes a new instance of the StringProperty class.
- ///
- public StringProperty()
- {
- CustomInit();
- }
-
- ///
- /// Initializes a new instance of the StringProperty class.
- ///
- /// String property value.
- public StringProperty(string name, string value)
- : base(name)
- {
- Value = value;
- CustomInit();
- }
-
- ///
- /// An initialization method that performs custom operations like setting defaults
- ///
- partial void CustomInit();
-
- ///
- /// Gets or sets string property value.
- ///
- [JsonProperty(PropertyName = "value")]
- public string Value { get; set; }
-
- ///
- /// Validate the object.
- ///
- ///
- /// Thrown if validation fails
- ///
- public override void Validate()
- {
- base.Validate();
- if (Value == null)
- {
- throw new ValidationException(ValidationRules.CannotBeNull, "Value");
- }
- if (Value != null)
- {
- if (Value.Length > 128)
- {
- throw new ValidationException(ValidationRules.MaxLength, "Value", 128);
- }
- }
- }
- }
-}
diff --git a/swagger/ingestion.yaml b/swagger/ingestion.yaml
index 7d3c12675..c27c5004c 100644
--- a/swagger/ingestion.yaml
+++ b/swagger/ingestion.yaml
@@ -109,7 +109,6 @@ definitions:
type: string
# Define typed properties for events.
- # Unfortunately incompatible with push custom properties.
TypedProperty:
type: object
@@ -321,101 +320,6 @@ definitions:
items:
type : string
- # Start defining custom properties for push.
- # Unfortunately not compatible with event typed properties.
-
- CustomPropertyLog:
- type: object
- description: Set or remove custom properties.
- x-ms-discriminator-value: customProperties
- allOf:
- - $ref: '#/definitions/Log'
- properties:
- properties:
- type: array
- description: Custom property changes.
- minItems: 1
- maxItems: 60
- items:
- $ref: '#/definitions/CustomProperty'
-
- CustomProperty:
- type: object
- discriminator: type
- properties:
- type:
- type: string
- name:
- type: string
- maxLength: 128
- pattern: '^[a-zA-Z][a-zA-Z0-9\-_]*$'
- required:
- - type
- - name
-
- StringProperty:
- type: object
- description: String property.
- x-ms-discriminator-value: string
- allOf:
- - $ref: '#/definitions/CustomProperty'
- properties:
- value:
- type: string
- maxLength: 128
- description: String property value.
- required:
- - value
-
- NumberProperty:
- type: object
- description: Number property.
- x-ms-discriminator-value: number
- allOf:
- - $ref: '#/definitions/CustomProperty'
- properties:
- value:
- type: number
- description: Number property value.
- required:
- - value
-
- BooleanProperty:
- type: object
- description: Boolean property.
- x-ms-discriminator-value: boolean
- allOf:
- - $ref: '#/definitions/CustomProperty'
- properties:
- value:
- type: boolean
- description: Boolean property value.
- required:
- - value
-
- DateTimeProperty:
- type: object
- description: Date and time property.
- x-ms-discriminator-value: dateTime
- allOf:
- - $ref: '#/definitions/CustomProperty'
- properties:
- value:
- type: string
- format: date-time
- description: Date time property value.
- required:
- - value
-
- ClearProperty:
- type: object
- description: Clear an existing property.
- x-ms-discriminator-value: clear
- allOf:
- - $ref: '#/definitions/CustomProperty'
-
- # End of push custom property definitions.
-
StartSessionLog:
type: object
description: Required explicit begin session log (a marker event for analytics service).
diff --git a/test-tools.cake b/test-tools.cake
index 8619340d9..c7bce199f 100644
--- a/test-tools.cake
+++ b/test-tools.cake
@@ -135,7 +135,7 @@ Setup(context =>
// Distribution Tasks
-Task("CreateIosArchive").IsDependentOn("IncreaseIosVersion").Does(()=>
+Task("CreateIosArchive").IsDependentOn("IncreaseAppleVersion").Does(()=>
{
MSBuild(CurrentApp.ProjectPath, settings => settings.SetConfiguration("Release")
.WithTarget("Build")
@@ -178,7 +178,7 @@ Task("CreateAndroidArchive").IsDependentOn("IncreaseAndroidVersion").Does(()=>
CopyFile(unsignedApk, CurrentApp.AppPath);
});
-Task("IncreaseIosVersion").Does(()=>
+Task("IncreaseAppleVersion").Does(()=>
{
var infoPlistLocation = CurrentApp.ProjectDirectory + "/Info.plist";
var plist = File(infoPlistLocation);
diff --git a/version.cake b/version.cake
index 5ac8d88d8..57ade74b6 100644
--- a/version.cake
+++ b/version.cake
@@ -123,7 +123,7 @@ Task("StartNewVersion").Does(() =>
// Fills Android and iOS versions in the build config file with the relevant ones.
Task("UpdateNativeVersionsToLatest")
.IsDependentOn("UpdateAndroidVersionToLatest")
- .IsDependentOn("UpdateIosVersionToLatest");
+ .IsDependentOn("UpdateAppleVersionToLatest");
Task("UpdateAndroidVersionToLatest").Does(() =>
{
@@ -139,18 +139,18 @@ Task("UpdateAndroidVersionToLatest").Does(() =>
VersionReader.WriteAndroidVersion(androidLatestVersion);
}).OnError(HandleError);
-Task("UpdateIosVersionToLatest").Does(() =>
+Task("UpdateAppleVersionToLatest").Does(() =>
{
var appleLatestVersion = GetLatestGitHubReleaseVersion(AppleSdkRepoName);
Information($"Received latest apple sdk release version {appleLatestVersion}. Verifying if it's a valid semver version...");
ParseSemVer(appleLatestVersion);
- var versionsAreEqual = VersionReader.IosVersion.Equals(appleLatestVersion);
+ var versionsAreEqual = VersionReader.AppleVersion.Equals(appleLatestVersion);
if (versionsAreEqual)
{
Information($"Nothing to replace. Exiting...");
return;
}
- VersionReader.WriteIosVersion(appleLatestVersion);
+ VersionReader.WriteAppleVersion(appleLatestVersion);
}).OnError(HandleError);
Task("IncreasePatchVersion").Does(() =>
@@ -476,7 +476,7 @@ string GetReleaseTag(string currentRepoName)
case AndroidSdkRepoName:
return VersionReader.AndroidVersion;
case AppleSdkRepoName:
- return VersionReader.IosVersion;
+ return VersionReader.AppleVersion;
default:
return null;
}