Ejemplo n.º 1
0
 public ICloudCapability(ICloudCapability other)
     : base(other)
 {
     KeyValueStorage     = other.KeyValueStorage;
     iCloudDocuments     = other.iCloudDocuments;
     CloudKit            = other.CloudKit;
     UseCustomContainers = other.UseCustomContainers;
     CustomContainers    = new List <string>(other.CustomContainers);
 }
Ejemplo n.º 2
0
        //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);
        }