为什么Apple的PackagedDocument MacOS iCloud示例项目找不到URLForUbiquityContainerIdentifier?

时间:2015-09-02 00:17:12

标签: xcode macos icloud documents entitlements

我一直在尝试使用iCloud示例代码和教程,以便在我们的MacOS和iOS产品之间开发同步系统。在iOS方面,我在构建和运行操作iCloud Documents容器中的数据的代码时没有问题,但在MacOS方面,使用Apple MacOS PackagedDocument 示例项目,我无法成功将任何数据放在我的iCloud中。我认为基本问题是我的应用程序的URLForUbiquityContainerIdentifier无法找到,可能是由于iCloud权利规范中的一些错误。但是,在花费大量时间花在开发人员门户网站和 Xcode 6 / PackagedDocument 设置上之后,我一直无法找到问题的根源。

我的iCloud帐户以前是MobileMe帐户,用于在MacOS和iOS设备之间同步Apple应用程序,所以我相信我的iCloud帐户可以正常运行。

这里我将说明我指定调用以获取iCloud Documents容器的不同方法。无论指定方式如何,获取iCloud容器URL的调用都返回nil:

    // remember our ubiquity container NSURL for later use
    _ubiquityContainer = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"icloud.com.mycompany.PackagedDocument"];
    _ubiquityContainer = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"7G3Z4SV5WT.com.mycompany.PackagedDocument"];
    _ubiquityContainer = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

在我的iOS实验中,此 URLForUbiquityContainerIdentifier 调用始终会获得所需的网址。

该应用的CFBundleIdentifier为 com.mycompany.PackagedDocument

iCloud授权密钥指定如下:

com.apple.application-identifier 键值为 $(TeamIdentifierPrefix)com.mycompany.PackagedDocument

com.apple.developer.icloud-services 键值为 CloudDocuments

com.apple.developer.icloud-container-identifiers 键值为 的的iCloud $(CFBundleIdentifier)

com.apple.developer.ubiquity-container-identifiers 键值为 的的iCloud $(CFBundleIdentifier)

我也试过这个video tutorial的代码,但在尝试获取普遍容器时得到相同的nil结果:

    - (IBAction)saveToIcloud:(id)sender {

    NSFileManager *fm = [NSFileManager defaultManager];

    NSURL *directory = [[fm URLForUbiquityContainerIdentifier:@"7G3Z4SV5WT.com.mycompany.PackagedDocument"]
        URLByAppendingPathComponent:@"Documents"];
    directory = [[fm URLForUbiquityContainerIdentifier:@"iCloud.com.mycompany.PackagedDocument"]
                        URLByAppendingPathComponent:@"Documents"];
    directory = [[fm URLForUbiquityContainerIdentifier:nil]
                        URLByAppendingPathComponent:@"Documents"];
    directory = [[fm 

    if (directory) {
        [fm createDirectoryAtURL:directory withIntermediateDirectories:NO attributes:nil error:NULL];

        NSURL *filepath = [NSURL URLWithString:@"/Users/leg/Desktop/myjpeg.jpg"];

        NSURL *destination = [directory URLByAppendingPathComponent:[filepath lastPathComponent]];

        [fm setUbiquitous:YES itemAtURL:filepath destinationURL:destination error:nil];
    }
}

总之,我认为问题必须与我的iCloud权利规范和/或访问iCloud Document容器所需的其他规范有关。如果有人对我可能发生的事情有所了解,我非常感谢他们的反馈意见。如果做不到这一点,也许有人可以指出我正在使用非iOS ,macos iCloud Documents示例代码。

其他信息

我在控制台日志PackagedDocument启动时看到以下消息:

  

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.ubiquity-container-identifiers

     

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.icloud-container-identifiers

     

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.ubiquity-container-identifiers

     

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.icloud-container-identifiers

     

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.ubiquity-container-identifiers

     

9/2/15 5:19:11.966 PM taskgated-helper [14145]:不满意的权利com.apple.developer.icloud-container-identifiers

     

9/2/15 5:19:11.967 PM taskgated-helper [14145]:由于配置文件而允许pid = 14144的权利

更多信息

我使用一个有效的iOS iCloud示例项目进行了实验,以验证PackagedDocument iCloud容器:

我将iOS示例的Capabilites / iCloud设置从“使用默认容器”更改为“指定自定义容器”。我检查了示例的默认容器并检查了“iCloud.com.mycompany.PackagedDocument”。

然后我更改了URLForUbiquityContainerIdentifier调用:

    from:  NSURL *baseURL = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil];

    to:    NSURL *baseURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com.mycompany.PackagedDocument"];

现在,当我运行这个iOS应用程序时,它会创建PackagedDocument iCloud容器并将其用于其数据 - 正是我一直在尝试使用PackagedDocument MacOS示例。

然后我回到MacOS PackagedDocument项目并运行它以查看 URLForUbiquityContainerIdentifier 调用现在是否会找到容器。它确实。即使容器现在肯定存在,Nil仍然会返回。

我认为这意味着它仍然是某种权利问题。

更多信息

  1. 我进行了另一项实验,我从我的常用开发者系统(Yosemite 10.10.5)的Xcode 6.4 / Preferences / Actions / Export Accounts ...中导出了我的开发者身份,然后在Mavericks 10.9.5下重新启动了我的MacBook Pro并使用Xcode 6.1 / Preferences / Actions / Import Accounts ...导入身份。 (在我将其升级到Yosemite之前,Mavericks系统磁盘实际上是我MacBook Pro系统磁盘的Carbon Copy。)现在,当我在Mavericks中构建并运行 PackagedDocument 时,一切都运行良好

  2. 然后我重新启动回Yosemite并删除我的身份并使用Xcode 6.1 / Preferences / Actions / Import Accounts ...导入身份。现在,当我在Yosemite中构建并运行 PackagedDocument 时,它仍然无效 - 找不到iCloud容器

  3. 然后我决定在干净安装的El Capitan(10.11 Beta 5)/ Xcode 6.4中尝试相同的实验。同样,它仍然无效 - 找不到iCloud容器

  4. 最后,我决定再试一次。我决定尝试启用 iCloud Drive 。但是,因为我不想将我工作的iCloud帐户转换为 iCloud Drive ,所以我决定为测试创建一个新的iCloud ID,并打开 iCloud Drive 。现在,当我使用 iCloud Drive 在El Capitan中构建并运行 PackagedDocument 时,一切正常

0 个答案:

没有答案