[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:
Rolf Bjarne Kvinge 2021-08-20 09:54:59 +02:00 коммит произвёл GitHub
Родитель d3c9f4b1b6
Коммит 6f9a8ebbbd
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
10 изменённых файлов: 190 добавлений и 157 удалений

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

@ -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 ();