[msbuild] Rename the GetMinimumOSVersion task to ReadAppManifest and make it read more properties from the app manifest. (#12485)
* Read CFBundleDisplayName and CFBundleVersion and use them in the _CompileITunesMetadata task. * Read numerous other app manifest values and pass them to the ACTool and IBTool tasks. This makes it possible to not parse the Info.plist in these tasks, which will become more complicated in the future, when we might either not have an Info.plist, or have many partial ones. Also enable nullability.
This commit is contained in:
Родитель
d3c9f4b1b6
Коммит
6f9a8ebbbd
|
@ -882,7 +882,7 @@
|
|||
</Target>
|
||||
|
||||
<Target Name="_CompileNativeExecutable"
|
||||
DependsOnTargets="_DetectSdkLocations;_ComputeTargetArchitectures;_GenerateBundleName;_GetMinimumOSVersion;_ComputeNativeExecutableInputs;_AOTCompile;"
|
||||
DependsOnTargets="_DetectSdkLocations;_ComputeTargetArchitectures;_GenerateBundleName;_ReadAppManifest;_ComputeNativeExecutableInputs;_AOTCompile;"
|
||||
Inputs="@(_CompileNativeExecutableFile)"
|
||||
Outputs="@(_CompileNativeExecutableFile -> '%(OutputFile)')"
|
||||
>
|
||||
|
|
|
@ -53,31 +53,20 @@ namespace Xamarin.MacDev.Tasks
|
|||
get { return "actool"; }
|
||||
}
|
||||
|
||||
static bool IsMessagesExtension (PDictionary plist)
|
||||
{
|
||||
PDictionary extension;
|
||||
PString id;
|
||||
|
||||
if (!plist.TryGetValue ("NSExtension", out extension))
|
||||
return false;
|
||||
|
||||
if (!extension.TryGetValue ("NSExtensionPointIdentifier", out id))
|
||||
return false;
|
||||
|
||||
return id.Value == "com.apple.message-payload-provider";
|
||||
bool IsMessagesExtension {
|
||||
get {
|
||||
return NSExtensionPointIdentifier == "com.apple.message-payload-provider";
|
||||
}
|
||||
}
|
||||
|
||||
protected override void AppendCommandLineArguments (IDictionary<string, string> environment, CommandLineArgumentBuilder args, ITaskItem[] items)
|
||||
{
|
||||
var plist = GetAppManifest ();
|
||||
PString value = null;
|
||||
|
||||
var assetDirs = new HashSet<string> (items.Select (x => BundleResource.GetVirtualProjectPath (ProjectDir, x, !string.IsNullOrEmpty (SessionId))));
|
||||
|
||||
if (plist?.TryGetValue (ManifestKeys.XSAppIconAssets, out value) == true && !string.IsNullOrEmpty (value.Value)) {
|
||||
int index = value.Value.IndexOf (".xcassets" + Path.DirectorySeparatorChar, StringComparison.Ordinal);
|
||||
if (!string.IsNullOrEmpty (XSAppIconAssets)) {
|
||||
int index = XSAppIconAssets.IndexOf (".xcassets" + Path.DirectorySeparatorChar, StringComparison.Ordinal);
|
||||
string assetDir = null;
|
||||
var rpath = value.Value;
|
||||
var rpath = XSAppIconAssets;
|
||||
|
||||
if (index != -1)
|
||||
assetDir = rpath.Substring (0, index + ".xcassets".Length);
|
||||
|
@ -95,15 +84,15 @@ namespace Xamarin.MacDev.Tasks
|
|||
args.Add ("--app-icon");
|
||||
args.AddQuoted (assetName);
|
||||
|
||||
if (IsMessagesExtension (plist))
|
||||
if (IsMessagesExtension)
|
||||
args.Add ("--product-type com.apple.product-type.app-extension.messages");
|
||||
}
|
||||
}
|
||||
|
||||
if (plist?.TryGetValue (ManifestKeys.XSLaunchImageAssets, out value) == true && !string.IsNullOrEmpty (value.Value)) {
|
||||
int index = value.Value.IndexOf (".xcassets" + Path.DirectorySeparatorChar, StringComparison.Ordinal);
|
||||
if (!string.IsNullOrEmpty (XSLaunchImageAssets)) {
|
||||
int index = XSLaunchImageAssets.IndexOf (".xcassets" + Path.DirectorySeparatorChar, StringComparison.Ordinal);
|
||||
string assetDir = null;
|
||||
var rpath = value.Value;
|
||||
var rpath = XSLaunchImageAssets;
|
||||
|
||||
if (index != -1)
|
||||
assetDir = rpath.Substring (0, index + ".xcassets".Length);
|
||||
|
@ -123,8 +112,8 @@ namespace Xamarin.MacDev.Tasks
|
|||
}
|
||||
}
|
||||
|
||||
if (plist?.TryGetValue (ManifestKeys.CLKComplicationGroup, out value) == true && !string.IsNullOrEmpty (value.Value))
|
||||
args.Add ("--complication", value);
|
||||
if (!string.IsNullOrEmpty (CLKComplicationGroup))
|
||||
args.Add ("--complication", CLKComplicationGroup);
|
||||
|
||||
if (OptimizePNGs)
|
||||
args.Add ("--compress-pngs");
|
||||
|
@ -150,10 +139,8 @@ namespace Xamarin.MacDev.Tasks
|
|||
args.Add ("uikit");
|
||||
}
|
||||
|
||||
if (plist != null) {
|
||||
foreach (var targetDevice in GetTargetDevices ())
|
||||
args.Add ("--target-device", targetDevice);
|
||||
}
|
||||
foreach (var targetDevice in GetTargetDevices ())
|
||||
args.Add ("--target-device", targetDevice);
|
||||
|
||||
args.Add ("--minimum-deployment-target", MinimumOSVersion);
|
||||
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
using System;
|
||||
|
||||
using Microsoft.Build.Framework;
|
||||
|
||||
using Xamarin.Localization.MSBuild;
|
||||
using Xamarin.Utils;
|
||||
|
||||
namespace Xamarin.MacDev.Tasks {
|
||||
public abstract class GetMinimumOSVersionTaskBase : XamarinTask {
|
||||
public ITaskItem AppManifest { get; set; }
|
||||
|
||||
[Required]
|
||||
public string SdkVersion { get; set; }
|
||||
|
||||
[Output]
|
||||
public string MinimumOSVersion { get; set; }
|
||||
|
||||
public override bool Execute ()
|
||||
{
|
||||
PDictionary plist = null;
|
||||
|
||||
if (!string.IsNullOrEmpty (AppManifest?.ItemSpec)) {
|
||||
try {
|
||||
plist = PDictionary.FromFile (AppManifest.ItemSpec);
|
||||
} catch (Exception ex) {
|
||||
Log.LogError (null, null, null, AppManifest.ItemSpec, 0, 0, 0, 0, MSBStrings.E0010, AppManifest.ItemSpec, ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var minimumOSVersionInManifest = plist?.Get<PString> (PlatformFrameworkHelper.GetMinimumOSVersionKey (Platform))?.Value;
|
||||
if (string.IsNullOrEmpty (minimumOSVersionInManifest)) {
|
||||
MinimumOSVersion = SdkVersion;
|
||||
} else if (!IAppleSdkVersion_Extensions.TryParse (minimumOSVersionInManifest, out var _)) {
|
||||
Log.LogError (null, null, null, AppManifest.ItemSpec, 0, 0, 0, 0, MSBStrings.E0011, minimumOSVersionInManifest);
|
||||
return false;
|
||||
} else {
|
||||
MinimumOSVersion = minimumOSVersionInManifest;
|
||||
}
|
||||
|
||||
if (Platform == ApplePlatform.MacCatalyst) {
|
||||
// Convert the min macOS version to the min iOS version, which the rest of our tooling expects.
|
||||
if (!MacCatalystSupport.TryGetiOSVersion (Sdks.GetAppleSdk (Platform).GetSdkPath (SdkVersion, false), MinimumOSVersion, out var convertedVersion))
|
||||
Log.LogError (MSBStrings.E0187, MinimumOSVersion);
|
||||
MinimumOSVersion = convertedVersion;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
using Microsoft.Build.Framework;
|
||||
|
||||
using Xamarin.Localization.MSBuild;
|
||||
using Xamarin.Utils;
|
||||
|
||||
namespace Xamarin.MacDev.Tasks {
|
||||
public abstract class ReadAppManifestTaskBase : XamarinTask {
|
||||
public ITaskItem? AppManifest { get; set; }
|
||||
|
||||
[Required]
|
||||
public string? SdkVersion { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? CLKComplicationGroup { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? CFBundleDisplayName { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? CFBundleVersion { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? MinimumOSVersion { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? NSExtensionPointIdentifier { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? UIDeviceFamily { get; set; }
|
||||
|
||||
[Output]
|
||||
public bool WKWatchKitApp { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? XSAppIconAssets { get; set; }
|
||||
|
||||
[Output]
|
||||
public string? XSLaunchImageAssets { get; set; }
|
||||
|
||||
public override bool Execute ()
|
||||
{
|
||||
PDictionary? plist = null;
|
||||
|
||||
if (!string.IsNullOrEmpty (AppManifest?.ItemSpec)) {
|
||||
try {
|
||||
plist = PDictionary.FromFile (AppManifest!.ItemSpec);
|
||||
} catch (Exception ex) {
|
||||
Log.LogError (null, null, null, AppManifest!.ItemSpec, 0, 0, 0, 0, MSBStrings.E0010, AppManifest.ItemSpec, ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var minimumOSVersionInManifest = plist?.Get<PString> (PlatformFrameworkHelper.GetMinimumOSVersionKey (Platform))?.Value;
|
||||
if (string.IsNullOrEmpty (minimumOSVersionInManifest)) {
|
||||
MinimumOSVersion = SdkVersion;
|
||||
} else if (!IAppleSdkVersion_Extensions.TryParse (minimumOSVersionInManifest, out var _)) {
|
||||
Log.LogError (null, null, null, AppManifest?.ItemSpec, 0, 0, 0, 0, MSBStrings.E0011, minimumOSVersionInManifest);
|
||||
return false;
|
||||
} else {
|
||||
MinimumOSVersion = minimumOSVersionInManifest;
|
||||
}
|
||||
|
||||
if (Platform == ApplePlatform.MacCatalyst) {
|
||||
// Convert the min macOS version to the min iOS version, which the rest of our tooling expects.
|
||||
if (!MacCatalystSupport.TryGetiOSVersion (Sdks.GetAppleSdk (Platform).GetSdkPath (SdkVersion, false), MinimumOSVersion, out var convertedVersion))
|
||||
Log.LogError (MSBStrings.E0187, MinimumOSVersion);
|
||||
MinimumOSVersion = convertedVersion;
|
||||
}
|
||||
|
||||
CFBundleDisplayName = plist?.GetCFBundleDisplayName ();
|
||||
CFBundleVersion = plist?.GetCFBundleVersion ();
|
||||
CLKComplicationGroup = plist?.Get<PString> (ManifestKeys.CLKComplicationGroup)?.Value;
|
||||
NSExtensionPointIdentifier = plist?.GetNSExtensionPointIdentifier ();
|
||||
UIDeviceFamily = plist?.GetUIDeviceFamily ().ToString ();
|
||||
WKWatchKitApp = plist?.GetWKWatchKitApp () == true;
|
||||
XSAppIconAssets = plist?.Get<PString> (ManifestKeys.XSAppIconAssets)?.Value;
|
||||
XSLaunchImageAssets = plist?.Get<PString> (ManifestKeys.XSLaunchImageAssets)?.Value;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -26,8 +26,6 @@ namespace Xamarin.MacDev.Tasks
|
|||
|
||||
#region Inputs
|
||||
|
||||
public ITaskItem AppManifest { get; set; }
|
||||
|
||||
public string BundleIdentifier { get; set; }
|
||||
|
||||
[Required]
|
||||
|
@ -77,22 +75,28 @@ namespace Xamarin.MacDev.Tasks
|
|||
|
||||
#endregion
|
||||
|
||||
bool loadedAppManifest;
|
||||
protected PDictionary GetAppManifest ()
|
||||
{
|
||||
if (!loadedAppManifest) {
|
||||
if (AppManifest != null) {
|
||||
try {
|
||||
plist = PDictionary.FromFile (AppManifest.ItemSpec);
|
||||
} catch (Exception ex) {
|
||||
Log.LogError (null, null, null, AppManifest.ItemSpec, 0, 0, 0, 0, "{0}", ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
loadedAppManifest = true;
|
||||
}
|
||||
#region Inputs from the app manifest
|
||||
|
||||
return plist;
|
||||
public string CLKComplicationGroup { get; set; }
|
||||
|
||||
public string NSExtensionPointIdentifier { get; set; }
|
||||
|
||||
public string UIDeviceFamily { get; set; }
|
||||
|
||||
public bool WKWatchKitApp { get; set; }
|
||||
|
||||
public string XSAppIconAssets { get; set; }
|
||||
|
||||
public string XSLaunchImageAssets { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public IPhoneDeviceType ParsedUIDeviceFamily {
|
||||
get {
|
||||
if (!string.IsNullOrEmpty (UIDeviceFamily))
|
||||
return (IPhoneDeviceType) Enum.Parse (typeof (IPhoneDeviceType), UIDeviceFamily);
|
||||
return IPhoneDeviceType.NotSet;
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract string DefaultBinDir {
|
||||
|
@ -118,30 +122,15 @@ namespace Xamarin.MacDev.Tasks
|
|||
get { return false; }
|
||||
}
|
||||
|
||||
protected static bool IsWatchExtension (PDictionary plist)
|
||||
{
|
||||
PDictionary extension;
|
||||
PString id;
|
||||
|
||||
if (plist == null)
|
||||
return false;
|
||||
|
||||
if (!plist.TryGetValue ("NSExtension", out extension))
|
||||
return false;
|
||||
|
||||
if (!extension.TryGetValue ("NSExtensionPointIdentifier", out id))
|
||||
return false;
|
||||
|
||||
return id.Value == "com.apple.watchkit";
|
||||
protected bool IsWatchExtension {
|
||||
get {
|
||||
return NSExtensionPointIdentifier == "com.apple.watchkit";
|
||||
}
|
||||
}
|
||||
|
||||
protected IEnumerable<string> GetTargetDevices ()
|
||||
{
|
||||
var plist = GetAppManifest ();
|
||||
var devices = plist?.GetUIDeviceFamily () ?? IPhoneDeviceType.NotSet;
|
||||
var watch = plist?.GetWKWatchKitApp () == true;
|
||||
var watchExtension = IsWatchExtension (plist);
|
||||
return GetTargetDevices (devices, watch, watchExtension);
|
||||
return GetTargetDevices (ParsedUIDeviceFamily, WKWatchKitApp, IsWatchExtension);
|
||||
}
|
||||
|
||||
IEnumerable<string> GetTargetDevices (IPhoneDeviceType devices, bool watch, bool watchExtension)
|
||||
|
|
|
@ -2,7 +2,7 @@ using Xamarin.Messaging.Build.Client;
|
|||
|
||||
namespace Xamarin.MacDev.Tasks
|
||||
{
|
||||
public class GetMinimumOSVersion : GetMinimumOSVersionTaskBase
|
||||
public class ReadAppManifest : ReadAppManifestTaskBase
|
||||
{
|
||||
public override bool Execute ()
|
||||
{
|
|
@ -110,7 +110,6 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetDirectories" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetFileSystemEntries" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetFullPath" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetMinimumOSVersion" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetNativeExecutableName" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.GetPropertyListValue" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.IBTool" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
|
@ -118,6 +117,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<UsingTask TaskName="Xamarin.MacDev.Tasks.ParseBundlerArguments" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.PrepareResourceRules" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.PropertyListEditor" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.ReadAppManifest" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.ReadItemsFromFile" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.ResolveNativeReferences" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.SmartCopy" AssemblyFile="$(_TaskAssemblyName)" />
|
||||
|
@ -274,7 +274,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<_CompileAppManifestDependsOn>
|
||||
$(_CompileAppManifestDependsOn);
|
||||
_DetectSdkLocations;
|
||||
_GetMinimumOSVersion;
|
||||
_ReadAppManifest;
|
||||
_GenerateBundleName;
|
||||
_DetectSigningIdentity;
|
||||
_ComputeTargetFrameworkMoniker;
|
||||
|
@ -319,6 +319,35 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<Delete SessionId="$(BuildSessionId)" Condition="'$(IsMacEnabled)' == 'true'" Files="$(DeviceSpecificOutputPath)*.bcsymbolmap" />
|
||||
</Target>
|
||||
|
||||
<PropertyGroup>
|
||||
<_ReadAppManifestDependsOn>
|
||||
$(_ReadAppManifestDependsOn);
|
||||
_DetectAppManifest;
|
||||
_DetectSdkLocations;
|
||||
_ComputeTargetFrameworkMoniker;
|
||||
</_ReadAppManifestDependsOn>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="_ReadAppManifest" DependsOnTargets="$(_ReadAppManifestDependsOn)">
|
||||
<ReadAppManifest
|
||||
Condition="'$(IsMacEnabled)' == 'true'"
|
||||
SessionId="$(BuildSessionId)"
|
||||
AppManifest="$(_AppManifest)"
|
||||
SdkVersion="$(_SdkVersion)"
|
||||
TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
|
||||
>
|
||||
<Output TaskParameter="CLKComplicationGroup" PropertyName="_CLKComplicationGroup" />
|
||||
<Output TaskParameter="CFBundleDisplayName" PropertyName="_CFBundleDisplayName" />
|
||||
<Output TaskParameter="CFBundleVersion" PropertyName="_CFBundleVersion" />
|
||||
<Output TaskParameter="MinimumOSVersion" PropertyName="_MinimumOSVersion" />
|
||||
<Output TaskParameter="NSExtensionPointIdentifier" PropertyName="_NSExtensionPointIdentifier" />
|
||||
<Output TaskParameter="UIDeviceFamily" PropertyName="_UIDeviceFamily" />
|
||||
<Output TaskParameter="WKWatchKitApp" PropertyName="_WKWatchKitApp" />
|
||||
<Output TaskParameter="XSAppIconAssets" PropertyName="_XSAppIconAssets" />
|
||||
<Output TaskParameter="XSLaunchImageAssets" PropertyName="_XSLaunchImageAssets" />
|
||||
</ReadAppManifest>
|
||||
</Target>
|
||||
|
||||
<PropertyGroup>
|
||||
<_CompileEntitlementsDependsOn>
|
||||
$(_CompileEntitlementsDependsOn);
|
||||
|
@ -382,7 +411,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<PropertyGroup>
|
||||
<_CoreCompileInterfaceDefinitionsDependsOn>
|
||||
_BeforeCoreCompileInterfaceDefinitions;
|
||||
_GetMinimumOSVersion;
|
||||
_ReadAppManifest;
|
||||
_DetectSigningIdentity;
|
||||
_ComputeTargetFrameworkMoniker;
|
||||
</_CoreCompileInterfaceDefinitionsDependsOn>
|
||||
|
@ -398,12 +427,13 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
Condition="'$(IsMacEnabled)' == 'true'"
|
||||
ToolExe="$(IBToolExe)"
|
||||
ToolPath="$(IBToolPath)"
|
||||
AppManifest="$(_AppManifest)"
|
||||
BundleIdentifier="$(_BundleIdentifier)"
|
||||
CLKComplicationGroup="$(_CLKComplicationGroup)"
|
||||
EnableOnDemandResources="$(EnableOnDemandResources)"
|
||||
InterfaceDefinitions="@(InterfaceDefinition)"
|
||||
IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)"
|
||||
MinimumOSVersion="$(_MinimumOSVersion)"
|
||||
NSExtensionPointIdentifier="$(_NSExtensionPointIdentifier)"
|
||||
IsWatchApp="$(IsWatchApp)"
|
||||
IsWatch2App="$(IsWatch2App)"
|
||||
ProjectDir="$(MSBuildProjectDirectory)"
|
||||
|
@ -415,6 +445,10 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
SdkPlatform="$(_SdkPlatform)"
|
||||
SdkVersion="$(_SdkVersion)"
|
||||
TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
|
||||
UIDeviceFamily="$(_UIDeviceFamily)"
|
||||
WKWatchKitApp="$(_WKWatchKitApp)"
|
||||
XSAppIconAssets="$(_XSAppIconAssets)"
|
||||
XSLaunchImageAssets="$(_XSLaunchImageAssets)"
|
||||
>
|
||||
<Output TaskParameter="BundleResources" ItemName="_BundleResourceWithLogicalName" />
|
||||
|
||||
|
@ -458,20 +492,21 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
<Target Name="_CoreCompileImageAssets"
|
||||
Inputs="@(ImageAsset);$(_AppManifest)"
|
||||
Outputs="$(_ACTool_PartialAppManifestCache);$(_ACTool_BundleResourceCache)"
|
||||
DependsOnTargets="_DetectAppManifest;_GetMinimumOSVersion;_DetectSdkLocations;_BeforeCoreCompileImageAssets;_GetMinimumOSVersion;_DetectSigningIdentity;_ComputeTargetFrameworkMoniker">
|
||||
DependsOnTargets="_DetectAppManifest;_ReadAppManifest;_DetectSdkLocations;_BeforeCoreCompileImageAssets;_DetectSigningIdentity;_ComputeTargetFrameworkMoniker">
|
||||
|
||||
<ACTool
|
||||
SessionId="$(BuildSessionId)"
|
||||
Condition="'$(IsMacEnabled)' == 'true' And '@(ImageAsset)' != ''"
|
||||
ToolExe="$(ACToolExe)"
|
||||
ToolPath="$(ACToolPath)"
|
||||
AppManifest="$(_AppManifest)"
|
||||
BundleIdentifier="$(_BundleIdentifier)"
|
||||
CLKComplicationGroup="$(_CLKComplicationGroup)"
|
||||
DeviceModel="$(TargetDeviceModel)"
|
||||
DeviceOSVersion="$(TargetDeviceOSVersion)"
|
||||
EnableOnDemandResources="$(EnableOnDemandResources)"
|
||||
ImageAssets="@(ImageAsset)"
|
||||
MinimumOSVersion="$(_MinimumOSVersion)"
|
||||
NSExtensionPointIdentifier="$(_NSExtensionPointIdentifier)"
|
||||
OptimizePNGs="$(OptimizePNGs)"
|
||||
OutputPath="$(DeviceSpecificOutputPath)"
|
||||
IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)"
|
||||
|
@ -484,6 +519,10 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
SdkPlatform="$(_SdkPlatform)"
|
||||
SdkVersion="$(_SdkVersion)"
|
||||
TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
|
||||
UIDeviceFamily="$(_UIDeviceFamily)"
|
||||
WKWatchKitApp="$(_WKWatchKitApp)"
|
||||
XSAppIconAssets="$(_XSAppIconAssets)"
|
||||
XSLaunchImageAssets="$(_XSLaunchImageAssets)"
|
||||
>
|
||||
<Output TaskParameter="PartialAppManifest" ItemName="PartialAppManifest" />
|
||||
<Output TaskParameter="BundleResources" ItemName="_BundleResourceWithLogicalName" />
|
||||
|
@ -751,7 +790,7 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="_SmeltMetal" Condition="'$(_CanOutputAppBundle)' == 'true' And '@(Metal)' != ''" DependsOnTargets="_DetectSdkLocations;_ComputeTargetFrameworkMoniker;_GetMinimumOSVersion">
|
||||
<Target Name="_SmeltMetal" Condition="'$(_CanOutputAppBundle)' == 'true' And '@(Metal)' != ''" DependsOnTargets="_DetectSdkLocations;_ComputeTargetFrameworkMoniker;_ReadAppManifest">
|
||||
<Metal
|
||||
SessionId="$(BuildSessionId)"
|
||||
Condition="'$(IsMacEnabled)' == 'true' and '%(Metal.Identity)' != ''"
|
||||
|
@ -915,18 +954,6 @@ Copyright (C) 2018 Microsoft. All rights reserved.
|
|||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="_GetMinimumOSVersion" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_ComputeTargetFrameworkMoniker">
|
||||
<GetMinimumOSVersion
|
||||
Condition="'$(IsMacEnabled)' == 'true'"
|
||||
SessionId="$(BuildSessionId)"
|
||||
AppManifest="$(_AppManifest)"
|
||||
SdkVersion="$(_SdkVersion)"
|
||||
TargetFrameworkMoniker="$(_ComputedTargetFrameworkMoniker)"
|
||||
>
|
||||
<Output TaskParameter="MinimumOSVersion" PropertyName="_MinimumOSVersion" />
|
||||
</GetMinimumOSVersion>
|
||||
</Target>
|
||||
|
||||
<Target Name="_DetectSigningIdentity" Condition="'$(_CanOutputAppBundle)' == 'true'" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_ComputeTargetFrameworkMoniker;_GenerateBundleName">
|
||||
<DetectSigningIdentity
|
||||
SessionId="$(BuildSessionId)"
|
||||
|
|
|
@ -15,7 +15,11 @@ namespace Xamarin.iOS.Tasks
|
|||
#region Inputs
|
||||
|
||||
[Required]
|
||||
public string AppBundleDir { get; set; }
|
||||
public string BundleIdentifier { get; set; }
|
||||
|
||||
public string BundleDisplayName { get; set; }
|
||||
|
||||
public string BundleVersion { get; set; }
|
||||
|
||||
public ITaskItem[] ITunesMetadata { get; set; }
|
||||
|
||||
|
@ -44,31 +48,21 @@ namespace Xamarin.iOS.Tasks
|
|||
return false;
|
||||
}
|
||||
} else {
|
||||
var manifest = Path.Combine (AppBundleDir, "Info.plist");
|
||||
PDictionary plist;
|
||||
|
||||
try {
|
||||
plist = PDictionary.FromFile (manifest);
|
||||
} catch (Exception ex) {
|
||||
Log.LogError (null, null, null, manifest, 0, 0, 0, 0, MSBStrings.E0010, manifest, ex.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
var displayName = plist.GetCFBundleDisplayName ();
|
||||
var bundleVersion = plist.GetCFBundleVersion ();
|
||||
var displayName = BundleDisplayName;
|
||||
var bundleVersion = BundleVersion;
|
||||
|
||||
metadata = new PDictionary ();
|
||||
|
||||
metadata.Add ("genre", new PString ("Application"));
|
||||
if (bundleVersion != null)
|
||||
if (!string.IsNullOrEmpty (bundleVersion))
|
||||
metadata.Add ("bundleVersion", (PString) bundleVersion);
|
||||
if (displayName != null)
|
||||
if (!string.IsNullOrEmpty (displayName))
|
||||
metadata.Add ("itemName", (PString) displayName);
|
||||
metadata.Add ("kind", (PString) "software");
|
||||
if (displayName != null)
|
||||
metadata.Add ("playlistName", (PString) displayName);
|
||||
metadata.Add ("softwareIconNeedsShine", (PBoolean) true);
|
||||
metadata.Add ("softwareVersionBundleId", (PString) plist.GetCFBundleIdentifier ());
|
||||
metadata.Add ("softwareVersionBundleId", (PString) BundleIdentifier);
|
||||
}
|
||||
|
||||
Directory.CreateDirectory (Path.GetDirectoryName (OutputPath.ItemSpec));
|
||||
|
|
|
@ -224,13 +224,15 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved.
|
|||
</PropertyGroup>
|
||||
|
||||
<Target Name="_CompileITunesMetadata" Condition="'$(ComputedPlatform)' == 'iPhone' And '$(IsAppExtension)' == 'false' And '$(IsWatchApp)' == 'false'"
|
||||
DependsOnTargets="_DetectSdkLocations;_DetectAppManifest;_GenerateBundleName;_CompileAppManifest"
|
||||
Inputs="$(_AppManifest);@(ITunesMetadata)"
|
||||
DependsOnTargets="_DetectSdkLocations;_DetectAppManifest;_GenerateBundleName;_CompileAppManifest;_ReadAppManifest"
|
||||
Inputs="@(ITunesMetadata)"
|
||||
Outputs="$(DeviceSPecificOutputPath)iTunesMetadata.plist" >
|
||||
<CompileITunesMetadata
|
||||
SessionId="$(BuildSessionId)"
|
||||
Condition="'$(IsMacEnabled)' == 'true'"
|
||||
AppBundleDir="$(AppBundleDir)"
|
||||
CFBundleIdentifier="$(_BundleIdentifier)"
|
||||
CFBundleVersion="$(_CFBundleVersion)"
|
||||
CFBundleDisplayName="$(_CFBundleDisplayName)"
|
||||
ITunesMetadata="@(ITunesMetadata)"
|
||||
OutputPath="$(DeviceSpecificOutputPath)iTunesMetadata.plist"
|
||||
/>
|
||||
|
|
|
@ -47,7 +47,6 @@ namespace Xamarin.iOS.Tasks
|
|||
interfaceDefinitions.Add (new TaskItem (item));
|
||||
|
||||
var task = CreateTask<IBTool> ();
|
||||
task.AppManifest = new TaskItem (Path.Combine (projectDir, "Info.plist"));
|
||||
task.InterfaceDefinitions = interfaceDefinitions.ToArray ();
|
||||
task.IntermediateOutputPath = intermediateOutputPath;
|
||||
task.MinimumOSVersion = PDictionary.FromFile (Path.Combine (projectDir, "Info.plist")).GetMinimumOSVersion ();
|
||||
|
|
Загрузка…
Ссылка в новой задаче