public ICloudCapability(ICloudCapability other) : base(other) { KeyValueStorage = other.KeyValueStorage; iCloudDocuments = other.iCloudDocuments; CloudKit = other.CloudKit; UseCustomContainers = other.UseCustomContainers; CustomContainers = new List <string>(other.CustomContainers); }
//iCloud void ApplyICloudCapability(ICloudCapability capability) { //update pbxproject _pbxproj.EnableSystemCapability("com.apple.iCloud", true); if (capability.CloudKit) { _pbxproj.AddSystemFramework("CloudKit.framework", LinkType.Required); //ensure push is enabled with cloudkit ApplyPushNotificationsCapability(new PushNotificationsCapability()); } //update entitlements file var entitlementChanges = new PListDictionary(); var services = new PListArray(); var ubiquityContainerIds = new PListArray(); var iCloudContainerIds = new PListArray(); if (capability.iCloudDocuments) { services.Add("CloudDocuments"); } if (capability.CloudKit) { services.Add("CloudKit"); } if (capability.iCloudDocuments || capability.CloudKit) { if (capability.UseCustomContainers) { foreach (var item in capability.CustomContainers) { iCloudContainerIds.Add(item); if (capability.iCloudDocuments) { ubiquityContainerIds.Add(item); } } } else { iCloudContainerIds.Add("iCloud.$(CFBundleIdentifier)"); if (capability.iCloudDocuments) { ubiquityContainerIds.Add("iCloud.$(CFBundleIdentifier)"); } } } //always add, even if empty entitlementChanges.Add("com.apple.developer.icloud-container-identifiers", iCloudContainerIds); if (services.Count > 0) { entitlementChanges.Add("com.apple.developer.icloud-services", services); } if (ubiquityContainerIds.Count > 0) { entitlementChanges.Add("com.apple.developer.ubiquity-container-identifiers", ubiquityContainerIds); } if (capability.KeyValueStorage) { entitlementChanges.Add("com.apple.developer.ubiquity-kvstore-identifier", "$(TeamIdentifierPrefix)$(CFBundleIdentifier)"); } ApplyEntitlementsChanges(entitlementChanges, true); }