diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs index 9154f35293f3..e18498a61a8d 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileAppManifestTaskBase.cs @@ -184,8 +184,41 @@ bool Compile (PDictionary plist) plist.SetIfNotPresent (ManifestKeys.MinimumOSVersion, minimumOSVersion.ToString ()); - if (IsWatchExtension && Debug) - SetAppTransportSecurity (plist); + if (IsWatchExtension) { + // Note: Only watchOS1 Extensions target Xamarin.iOS + if (Framework == PlatformFramework.iOS) { + PObject value; + + if (!plist.TryGetValue (ManifestKeys.UIRequiredDeviceCapabilities, out value)) { + var capabilities = new PArray (); + capabilities.Add (new PString ("watch-companion")); + + plist.Add (ManifestKeys.UIRequiredDeviceCapabilities, capabilities); + } else if (value is PDictionary) { + var capabilities = (PDictionary) value; + + if (!capabilities.ContainsKey ("watch-companion")) + capabilities.Add ("watch-companion", new PBoolean (true)); + } else { + var capabilities = (PArray) value; + bool exists = false; + + foreach (var capability in capabilities.OfType ()) { + if (capability.Value != "watch-companion") + continue; + + exists = true; + break; + } + + if (!exists) + capabilities.Add (new PString ("watch-companion")); + } + } + + if (Debug) + SetAppTransportSecurity (plist); + } // Remove any Xamarin Studio specific keys plist.Remove (ManifestKeys.XSLaunchImageAssets);