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"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + com.apple.InterfaceBuilder.CocoaPlugin + 762 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + 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. + + + + + + + + + @@ -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}>{value}"); + Statics.Context.Information($"Replacing build config versions: {AppleVersionTag} from {AppleVersion} to {value}."); + Statics.Context.ReplaceTextInFiles(ConfigFile.Path, $"<{AppleVersionTag}>{AppleVersion}", $"<{AppleVersionTag}>{value}"); } 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; }