[msbuild] Implement support for faking the watchOS 4.3 SDK. Fixes #4810. (#4873)

The App Store requires the arm64_32 architecture when building with Xcode 10.

Unfortunately we don't support arm64_32 quite yet, so we need to make the App
Store think watch extensions were built with Xcode 9.4 in order to pass
validation.

Fixes https://github.com/xamarin/xamarin-macios/issues/4810.
This commit is contained in:
Rolf Bjarne Kvinge 2018-09-26 13:02:38 +02:00 коммит произвёл GitHub
Родитель 6a460bb50b
Коммит 8077b509d0
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 59 добавлений и 11 удалений

Просмотреть файл

@ -36,6 +36,8 @@ namespace Xamarin.iOS.Tasks
[Required]
public bool Debug { get; set; }
public bool UseFakeWatchOS4_3Sdk { get; set; }
public string DebugIPAddresses { get; set; }
public string ResourceRules { get; set; }
@ -154,29 +156,65 @@ namespace Xamarin.iOS.Tasks
plist.SetIfNotPresent (ManifestKeys.CFBundleVersion, "1.0");
plist.SetIfNotPresent (ManifestKeys.CFBundleShortVersionString, plist.GetCFBundleVersion ());
string dtCompiler = null;
string dtPlatformBuild = null;
string dtSDKBuild = null;
string dtPlatformName = null;
string dtPlatformVersion = null;
string dtXcode = null;
string dtXcodeBuild = null;
if (!SdkIsSimulator) {
SetValue (plist, "DTCompiler", sdkSettings.DTCompiler);
SetValue (plist, "DTPlatformBuild", dtSettings.DTPlatformBuild);
SetValue (plist, "DTSDKBuild", sdkSettings.DTSDKBuild);
dtCompiler = sdkSettings.DTCompiler;
dtPlatformBuild = dtSettings.DTPlatformBuild;
dtSDKBuild = sdkSettings.DTSDKBuild;
}
plist.SetIfNotPresent ("DTPlatformName", SdkPlatform.ToLowerInvariant ());
dtPlatformName = SdkPlatform.ToLowerInvariant ();
if (!SdkIsSimulator)
SetValue (plist, "DTPlatformVersion", dtSettings.DTPlatformVersion);
dtPlatformVersion = dtSettings.DTPlatformVersion;
var sdkName = sdkSettings.CanonicalName;
var dtSDKName = sdkSettings.CanonicalName;
// older sdksettings didn't have a canonicalname for sim
if (SdkIsSimulator && string.IsNullOrEmpty (sdkName)) {
if (SdkIsSimulator && string.IsNullOrEmpty (dtSDKName)) {
var deviceSdkSettings = currentSDK.GetSdkSettings (sdkVersion, false);
sdkName = deviceSdkSettings.AlternateSDK;
dtSDKName = deviceSdkSettings.AlternateSDK;
}
SetValue (plist, "DTSDKName", sdkName);
if (!SdkIsSimulator) {
SetValue (plist, "DTXcode", AppleSdkSettings.DTXcode);
SetValue (plist, "DTXcodeBuild", dtSettings.DTXcodeBuild);
dtXcode = AppleSdkSettings.DTXcode;
dtXcodeBuild = dtSettings.DTXcodeBuild;
}
if (UseFakeWatchOS4_3Sdk) {
// This is a workaround for https://github.com/xamarin/xamarin-macios/issues/4810
if (Framework == PlatformFramework.WatchOS) {
if (dtPlatformBuild != null)
dtPlatformBuild = "15T212";
if (dtPlatformVersion != null)
dtPlatformVersion = "4.3";
if (dtSDKBuild != null)
dtSDKBuild = "15T212";
if (dtSDKName != null)
dtSDKName = "watchos4.3";
if (dtXcode != null)
dtXcode = "0940";
if (dtXcodeBuild != null)
dtXcodeBuild = "9F1027a";
} else {
Log.LogWarning ("Can only fake the watchOS 4.3 SDK when building for watchOS.");
}
}
SetValueIfNotNull (plist, "DTCompiler", dtCompiler);
SetValueIfNotNull (plist, "DTPlatformBuild", dtPlatformBuild);
SetValueIfNotNull (plist, "DTSDKBuild", dtSDKBuild);
plist.SetIfNotPresent ("DTPlatformName", dtPlatformName);
SetValueIfNotNull (plist, "DTPlatformVersion", dtPlatformVersion);
SetValue (plist, "DTSDKName", dtSDKName);
SetValueIfNotNull (plist, "DTXcode", dtXcode);
SetValueIfNotNull (plist, "DTXcodeBuild", dtXcodeBuild);
SetDeviceFamily (plist);
plist.SetIfNotPresent (ManifestKeys.MinimumOSVersion, minimumOSVersion.ToString ());
@ -235,6 +273,13 @@ namespace Xamarin.iOS.Tasks
return !Log.HasLoggedErrors;
}
void SetValueIfNotNull (PDictionary dict, string key, string value)
{
if (value == null)
return;
SetValue (dict, key, value);
}
void SetRequiredArchitectures (PDictionary plist)
{
PObject capabilities;

Просмотреть файл

@ -24,6 +24,8 @@ Copyright (C) 2015-2016 Xamarin. All rights reserved.
<!-- This must be set before importing Microsoft.CSharp.targets -->
<!-- See Xamarin.iOS.AppExtension.CSharp.targets for a detailed explanation of this variable -->
<CopyNuGetImplementations Condition="'$(CopyNuGetImplementations)' == ''">true</CopyNuGetImplementations>
<UseFakeWatchOS4_3Sdk Condition="'$(UseFakeWatchOS4_3Sdk)' == ''">True</UseFakeWatchOS4_3Sdk>
</PropertyGroup>
<Import Project="$(MSBuildThisFileDirectory)..\iOS\Xamarin.iOS.Common.targets" />

Просмотреть файл

@ -701,6 +701,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved.
SdkPlatform="$(_SdkPlatform)"
SdkIsSimulator="$(_SdkIsSimulator)"
DebugIPAddresses="$(_DebugIPAddresses)"
UseFakeWatchOS4_3Sdk="$(UseFakeWatchOS4_3Sdk)"
>
</CompileAppManifest>