即使配置正确,URLForUbiquityContainerIdentifier也会返回nil

时间:2011-12-14 13:29:52

标签: iphone objective-c ios icloud

我遇到了问题,即使用户在设置中正确设置了所有内容,URLForUbiquityContainerIdentifier在某些情况下也会返回nil。我的代码:

dispatch_async(someQueue, ^{

    if (![[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) {
        ErrLog(@"iCloud container not available.");
        return;
    }

    dispatch_async(dispatch_get_main_queue(), ^{
       [...]
    });

});

有人遇到同样的问题吗?我将nil设置为容器标识符,该标识符应该根据Apple文档工作,但我对此不再那么信服。此代码也适用于大多数用户,但不是每个人都适用。

8 个答案:

答案 0 :(得分:8)

检查您是否在权利中启用了iCloud容器。启用权利时,默认情况下不会添加容器。点击目标/摘要/权利中的“+”符号以添加您的appId。

答案 1 :(得分:8)

带iOS7的iPad mini。我刚刚经历过URLForUbiquityContainerIdentifier突然开始返回nil。我尝试重启设备,但没有帮助。

在“设置”应用内,在“iCloud”菜单下。我注意到'Documents&数据'设置为关闭。

解决方案是改变'文件&数据'到'开'。

答案 2 :(得分:7)

如果有任何人在使用iOS8 Betas时遇到同样的问题,那么在Xcode 6中生成Entitlements的方式似乎存在一个错误。几天来我一直在反对这个问题,直到Apple Developer发表这篇文章论坛:https://devforums.apple.com/thread/229509?

基本上,Xcode应该生成一个名为com.apple.developer.icloud-container-identifiers的密钥,它应该是com.apple.developer.ubiquity-container-identifiers普遍性,而不是 icloud )。当值iCloud.$(CFBundleIdentifier)时,它也可能设置为$(TeamIdentifierPrefix).$(CFBundleIdentifier)

当然,这可能会在下一个测试版中修复,但对于像我这样困惑的人,我希望这会有所帮助。

答案 3 :(得分:3)

我会在我需要将$(TEAMID)更改为个人资料ID的应用上查看您的entitlement.plist 配置文件中dns之前的数字和字母 - 这是一些可以与UIManagedDocument一起使用的代码

/// test iCloud Access
- (void)initializeiCloudAccess {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        if ([[NSFileManager defaultManager]
             URLForUbiquityContainerIdentifier:nil] != nil)
            NSLog(@"iCloud is available\n");
        else
            NSLog(@"This Application requires iCloud, but it is not available.\n");
    });
}

- (NSURL *)iCloudURL
{

    return [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
}

- (NSURL *)iCloudDocumentsURL
{

    return [[self iCloudURL] URLByAppendingPathComponent:@"Documents"];
}

- (NSURL *)iCloudCoreDataLogFilesURL
{

    return [[self iCloudURL] URLByAppendingPathComponent:@"CoreDataLogs"];
}

答案 4 :(得分:2)

URLForUbiquityContainerIdentifier alway return nil

NSURL *ubiquityURL = [fileManager URLForUbiquityContainerIdentifier:nil]; if (ubiquityURL == nil)
  • app build by xcode4.5
  • app is enable icloud
  • ios登录icloud帐户

ubiquityURL在调试中是正常的,但ubiquityURL在分发到appstore后总是为零。

答案 5 :(得分:1)

今天我又遇到了这个问题。

这次是因为我的配置文件无效。

Invalid provisioning profile

在开发者网站上,我必须生成新的配置文件。然后在Xcode5中重新加载配置文件。现在URLForUbiquityContainerIdentifier再次返回有效网址。

答案 6 :(得分:0)

如果您仍有问题,请确保您在设备上运行,因为模拟器不会始终返回有效值。 我试过你的应用程序代码,我没有得到零

答案 7 :(得分:0)

在iPhone的设置中启用“iCloud Drive”