示例#1
0
        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, 0, 0, 0, 0, MSBStrings.E0010, AppManifest, 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, 0, 0, 0, 0, MSBStrings.E0011, minimumOSVersionInManifest);
                return(false);
            }
            else
            {
                MinimumOSVersion = minimumOSVersionInManifest;
            }

            return(true);
        }
        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);
                }
            }

            CFBundleExecutable   = plist.GetCFBundleExecutable();
            CFBundleDisplayName  = plist?.GetCFBundleDisplayName();
            CFBundleIdentifier   = plist?.GetCFBundleIdentifier();
            CFBundleVersion      = plist?.GetCFBundleVersion();
            CLKComplicationGroup = plist?.Get <PString> (ManifestKeys.CLKComplicationGroup)?.Value;

            MinimumOSVersion = plist?.Get <PString> (PlatformFrameworkHelper.GetMinimumOSVersionKey(Platform))?.Value;
            if (Platform == ApplePlatform.MacCatalyst)
            {
                // The minimum version in the Info.plist is the macOS version. However, the rest of our tooling
                // expects the iOS version, so expose that.
                if (!MacCatalystSupport.TryGetiOSVersion(Sdks.GetAppleSdk(Platform).GetSdkPath(SdkVersion, false), MinimumOSVersion !, out var convertedVersion, out var knownMacOSVersions))
                {
                    Log.LogError(MSBStrings.E0187, MinimumOSVersion, string.Join(", ", knownMacOSVersions));
                }
                MinimumOSVersion = convertedVersion;
            }

            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(!Log.HasLoggedErrors);
        }
示例#3
0
        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);
        }
        public static string GetMinimumSystemVersion(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.LSMinimumSystemVersion);

            return(str == null ? null : str.Value);
        }
        public static string GetComplicationGroup(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.CLKComplicationGroup);

            return(str == null ? null : str.Value);
        }
        public static string GetCFBundleExecutable(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.CFBundleExecutable);

            return(str == null ? null : str.Value);
        }
示例#7
0
 public static PArray GetiCloudServices(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.iCloudServices));
 }
 public static PDictionary GetCFBundleIcons(this PDictionary dict)
 {
     return(dict.Get <PDictionary> (ManifestKeys.CFBundleIcons));
 }
        public static string GetCFBundleShortVersionString(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.CFBundleShortVersionString);

            return(str == null ? null : str.Value);
        }
示例#10
0
 public static PArray GetiCloudContainers(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.iCloudContainers));
 }
示例#11
0
 public static PArray GetAssociatedDomains(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.AssociatedDomains));
 }
示例#12
0
 public static PArray GetApplicationGroups(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.ApplicationGroups));
 }
示例#13
0
 public static PArray GetApplePayMerchants(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.InAppPayments));
 }
示例#14
0
 public static PArray GetPassBookIdentifiers(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.PassBookIdentifiers));
 }
示例#15
0
 public static PArray GetKeychainAccessGroups(this PDictionary dict)
 {
     return(dict.Get <PArray> (EntitlementKeys.KeychainAccessGroups));
 }
        public static string GetLaunchImageAssets(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.XSLaunchImageAssets);

            return(str == null ? null : str.Value);
        }
 public static PArray GetCFBundleIconFiles(this PDictionary dict)
 {
     return(dict.Get <PArray> (ManifestKeys.CFBundleIconFiles));
 }
        public static string GetNSMainNibFile(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.NSMainNibFile);

            return(str == null ? null : str.Value);
        }
        public static string GetCFBundleIdentifier(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.CFBundleIdentifier);

            return(str == null ? null : str.Value);
        }
        public static string GetUILaunchImageFileIPhone(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.UILaunchImageFileIPhone);

            return(str == null? null : str.Value);
        }
        public static IOSExtensionPoint?GetAppExtensionPoint(this PDictionary dict)
        {
            var ext = dict.Get <PDictionary> ("NSExtension");

            if (ext == null)
            {
                return(null);
            }

            var id = ext.Get <PString> ("NSExtensionPointIdentifier");

            if (id == null)
            {
                return(IOSExtensionPoint.Unknown);
            }

            switch (id.Value)
            {
            case "com.apple.widget-extension":
                return(IOSExtensionPoint.Widget);

            case "com.apple.watchkit":
                return(IOSExtensionPoint.WatchKit);

            case "com.apple.fileprovider-nonui":
                return(IOSExtensionPoint.FileProviderNonUI);

            case "com.apple.keyboard-service":
                return(IOSExtensionPoint.KeyboardService);

            case "com.apple.ui-services":
                return(IOSExtensionPoint.Action);

            case "com.apple.share-services":
                return(IOSExtensionPoint.ShareServices);

            case "com.apple.photo-editing":
                return(IOSExtensionPoint.PhotoEditing);

            case "com.apple.broadcast-services":
                return(IOSExtensionPoint.BroadcastServices);

            case "com.apple.callkit.call-directory":
                return(IOSExtensionPoint.CallDirectory);

            case "com.apple.Safari.content-blocker":
                return(IOSExtensionPoint.ContentBlocker);

            case "com.apple.intents-service":
                return(IOSExtensionPoint.IntentsService);

            case "com.apple.intents-ui-service":
                return(IOSExtensionPoint.IntentsUIService);

            case "com.apple.message-payload-provider":
                return(IOSExtensionPoint.MessagePayloadProvider);

            case "com.apple.usernotifications.content-extension":
                return(IOSExtensionPoint.NotificationContent);

            case "com.apple.usernotifications.service":
                return(IOSExtensionPoint.NotificationService);

            case "com.apple.Safari.sharedlinks-service":
                return(IOSExtensionPoint.SharedLinks);

            case "com.apple.spotlight.index":
                return(IOSExtensionPoint.SpotlightIndex);
            }

            return(IOSExtensionPoint.Unknown);
        }
        public static string GetCLKComplicationPrincipalClass(this PDictionary dict)
        {
            var str = dict.Get <PString> (ManifestKeys.CLKComplicationPrincipalClass);

            return(str == null ? null : str.Value);
        }
        bool SetMinimumOSVersion(PDictionary plist)
        {
            var    minimumVersionKey          = PlatformFrameworkHelper.GetMinimumOSVersionKey(Platform);
            var    minimumOSVersionInManifest = plist?.Get <PString> (minimumVersionKey)?.Value;
            string convertedSupportedOSPlatformVersion;
            string minimumOSVersion;

            if (Platform == ApplePlatform.MacCatalyst && !string.IsNullOrEmpty(SupportedOSPlatformVersion))
            {
                // SupportedOSPlatformVersion is the iOS version for Mac Catalyst.
                // But we need to store the macOS version in the app manifest, so convert it to the macOS version here.
                if (!MacCatalystSupport.TryGetMacOSVersion(Sdks.GetAppleSdk(Platform).GetSdkPath(SdkVersion, false), SupportedOSPlatformVersion, out var convertedVersion, out var knowniOSVersions))
                {
                    Log.LogError(MSBStrings.E0188, SupportedOSPlatformVersion, string.Join(", ", knowniOSVersions));
                }
                convertedSupportedOSPlatformVersion = convertedVersion;
            }
            else
            {
                convertedSupportedOSPlatformVersion = SupportedOSPlatformVersion;
            }

            if (Platform == ApplePlatform.MacCatalyst && string.IsNullOrEmpty(minimumOSVersionInManifest))
            {
                // If there was no value for the macOS min version key, then check the iOS min version key.
                var minimumiOSVersionInManifest = plist?.Get <PString> (ManifestKeys.MinimumOSVersion)?.Value;
                if (!string.IsNullOrEmpty(minimumiOSVersionInManifest))
                {
                    // Convert to the macOS version
                    if (!MacCatalystSupport.TryGetMacOSVersion(Sdks.GetAppleSdk(Platform).GetSdkPath(SdkVersion, false), minimumiOSVersionInManifest, out var convertedVersion, out var knowniOSVersions))
                    {
                        Log.LogError(MSBStrings.E0188, minimumiOSVersionInManifest, string.Join(", ", knowniOSVersions));
                    }
                    minimumOSVersionInManifest = convertedVersion;
                }
            }

            if (string.IsNullOrEmpty(minimumOSVersionInManifest))
            {
                // Nothing is specified in the Info.plist - use SupportedOSPlatformVersion, and if that's not set, then use the sdkVersion
                if (!string.IsNullOrEmpty(convertedSupportedOSPlatformVersion))
                {
                    minimumOSVersion = convertedSupportedOSPlatformVersion;
                }
                else
                {
                    minimumOSVersion = SdkVersion;
                }
            }
            else if (!IAppleSdkVersion_Extensions.TryParse(minimumOSVersionInManifest, out var _))
            {
                LogAppManifestError(MSBStrings.E0011, minimumOSVersionInManifest);
                return(false);
            }
            else if (!string.IsNullOrEmpty(convertedSupportedOSPlatformVersion) && convertedSupportedOSPlatformVersion != minimumOSVersionInManifest)
            {
                // SupportedOSPlatformVersion and the value in the Info.plist are not the same. This is an error.
                LogAppManifestError(MSBStrings.E7082, minimumVersionKey, minimumOSVersionInManifest, SupportedOSPlatformVersion);
                return(false);
            }
            else
            {
                minimumOSVersion = minimumOSVersionInManifest;
            }

            // Write out our value
            plist [minimumVersionKey] = minimumOSVersion;

            return(true);
        }
示例#24
0
        public static string GetUbiquityKeyValueStore(this PDictionary dict)
        {
            var str = dict.Get <PString> (EntitlementKeys.UbiquityKeyValueStore);

            return(str == null ? null : str.Value);
        }