namespace ImaginationOverflow.UniversalDeepLinking.Editor.Xcode { /// /// List of all the capabilities available. /// public sealed class PBXCapabilityType { public static readonly PBXCapabilityType ApplePay = new PBXCapabilityType ("com.apple.ApplePay", true); public static readonly PBXCapabilityType AppGroups = new PBXCapabilityType ("com.apple.ApplicationGroups.iOS", true); public static readonly PBXCapabilityType AssociatedDomains = new PBXCapabilityType ("com.apple.SafariKeychain", true); public static readonly PBXCapabilityType BackgroundModes = new PBXCapabilityType ("com.apple.BackgroundModes", false); public static readonly PBXCapabilityType DataProtection = new PBXCapabilityType ("com.apple.DataProtection", true); public static readonly PBXCapabilityType GameCenter = new PBXCapabilityType ("com.apple.GameCenter", false, "GameKit.framework"); public static readonly PBXCapabilityType HealthKit = new PBXCapabilityType ("com.apple.HealthKit", true, "HealthKit.framework"); public static readonly PBXCapabilityType HomeKit = new PBXCapabilityType ("com.apple.HomeKit", true, "HomeKit.framework"); public static readonly PBXCapabilityType iCloud = new PBXCapabilityType("com.apple.iCloud", true, "CloudKit.framework", true); public static readonly PBXCapabilityType InAppPurchase = new PBXCapabilityType ("com.apple.InAppPurchase", false); public static readonly PBXCapabilityType InterAppAudio = new PBXCapabilityType ("com.apple.InterAppAudio", true, "AudioToolbox.framework"); public static readonly PBXCapabilityType KeychainSharing = new PBXCapabilityType ("com.apple.KeychainSharing", true); public static readonly PBXCapabilityType Maps = new PBXCapabilityType("com.apple.Maps.iOS", false, "MapKit.framework"); public static readonly PBXCapabilityType PersonalVPN = new PBXCapabilityType("com.apple.VPNLite", true, "NetworkExtension.framework"); public static readonly PBXCapabilityType PushNotifications = new PBXCapabilityType ("com.apple.Push", true); public static readonly PBXCapabilityType Siri = new PBXCapabilityType ("com.apple.Siri", true); public static readonly PBXCapabilityType Wallet = new PBXCapabilityType ("com.apple.Wallet", true, "PassKit.framework"); public static readonly PBXCapabilityType WirelessAccessoryConfiguration = new PBXCapabilityType("com.apple.WAC", true, "ExternalAccessory.framework"); private readonly string m_ID; private readonly bool m_RequiresEntitlements; private readonly string m_Framework; private readonly bool m_OptionalFramework; public bool optionalFramework { get { return m_OptionalFramework; } } public string framework { get { return m_Framework; } } public string id { get { return m_ID; } } public bool requiresEntitlements { get { return m_RequiresEntitlements; } } public struct TargetCapabilityPair { public string targetGuid; public PBXCapabilityType capability; public TargetCapabilityPair(string guid, PBXCapabilityType type) { targetGuid = guid; capability = type; } } /// /// This private object represents what a capability changes in the PBXProject file /// /// The string used in the PBXProject file to identify the capability and mark it as enabled. /// This capability requires an entitlements file therefore we need to add this entitlements file to the code signing entitlement. /// Specify which framework need to be added to the project for this capability, if "" no framework are added. /// Some capability (right now only iCloud) adds a framework, not all the time but just when some option are checked /// this parameter indicates if one of them is checked. private PBXCapabilityType(string _id, bool _requiresEntitlements, string _framework = "", bool _optionalFramework = false) { m_ID = _id; m_RequiresEntitlements = _requiresEntitlements; m_Framework = _framework; m_OptionalFramework = _optionalFramework; } public static PBXCapabilityType StringToPBXCapabilityType(string cap) { switch (cap) { case "com.apple.ApplePay": return ApplePay; case "com.apple.ApplicationGroups.iOS": return AppGroups; case "com.apple.SafariKeychain": return AssociatedDomains; case "com.apple.BackgroundModes": return BackgroundModes; case "com.apple.DataProtection": return DataProtection; case "com.apple.GameCenter": return GameCenter; case "com.apple.HealthKit": return HealthKit; case "com.apple.HomeKit": return HomeKit; case "com.apple.iCloud": return iCloud; case "com.apple.InAppPurchase": return InAppPurchase; case "com.apple.InterAppAudio": return InterAppAudio; case "com.apple.KeychainSharing": return KeychainSharing; case "com.apple.Maps.iOS": return Maps; case "com.apple.VPNLite": return PersonalVPN; case "com.apple.Push": return PushNotifications; case "com.apple.Siri": return Siri; case "com.apple.Wallet": return Wallet; case "WAC": return WirelessAccessoryConfiguration; default: return null; } } } }