Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 为什么苹果';s PackagedDocument MacOS iCloud示例项目找不到URLForUbiquityContainerIdentifier?_Xcode_Macos_Icloud_Documents_Entitlements - Fatal编程技术网

Xcode 为什么苹果';s PackagedDocument MacOS iCloud示例项目找不到URLForUbiquityContainerIdentifier?

Xcode 为什么苹果';s PackagedDocument MacOS iCloud示例项目找不到URLForUbiquityContainerIdentifier?,xcode,macos,icloud,documents,entitlements,Xcode,Macos,Icloud,Documents,Entitlements,为了开发MacOS和iOS产品之间的同步系统,我一直在试验iCloud示例代码和教程。在iOS方面,我构建和运行在iCloud文档容器中处理数据的代码没有问题,但在MacOS方面,使用Apple MacOSPackagedDocument示例项目,我无法成功地将任何数据放置在iCloud中。我相信基本问题是找不到我的应用程序的URLForUbiquityContainerIdentifier,可能是由于iCloud授权规范中的某些错误。但是,在花了很多时间摆弄开发人员门户和Xcode 6/Pac

为了开发MacOS和iOS产品之间的同步系统,我一直在试验iCloud示例代码和教程。在iOS方面,我构建和运行在iCloud文档容器中处理数据的代码没有问题,但在MacOS方面,使用Apple MacOSPackagedDocument示例项目,我无法成功地将任何数据放置在iCloud中。我相信基本问题是找不到我的应用程序的URLForUbiquityContainerIdentifier,可能是由于iCloud授权规范中的某些错误。但是,在花了很多时间摆弄开发人员门户和Xcode 6/PackagedDocument设置之后,我一直无法找到问题的根源

我的iCloud帐户以前是MobileMe帐户,用于在MacOS和iOS设备之间同步苹果应用程序,因此我相信我的iCloud帐户工作正常

这里,我演示了我指定调用以获取iCloud文档容器的不同方式。无论如何指定,获取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调用总是得到所需的URL

应用程序的CbundleIdentifier是com.mycompany.PackagedDocument

iCloud授权密钥指定如下:

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

com.apple.developer.icloud服务的关键值是CloudDocuments

com.apple.developer.icloud容器标识符的键值为 iCloud.$(CbundleIdentifier)

com.apple.developer.ubiquity容器标识符的键值是 iCloud.$(CbundleIdentifier)

我也尝试了这段代码,但在尝试获取ubiquity容器时得到了相同的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文档容器所需的其他规范有关。如果有人对我可能发生的事情有线索,我将非常感谢他们的反馈。如果做不到这一点,也许有人可以告诉我使用非iOS的macos iCloud文档示例代码

其他信息

我在控制台日志包文件启动中看到以下消息:

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.ubiquity-container-identifiers

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.icloud-container-identifiers

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.ubiquity-container-identifiers

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.icloud-container-identifiers

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.ubiquity-container-identifiers

2015年9月2日5:19:11.966 PM任务门控助手[14145]:未满足权限com.apple.developer.icloud-container-identifiers

2015年9月2日5:19:11.967 PM taskgated helper[14145]:由于设置配置文件,允许pid=14144的权限

更多信息

我使用一个正在运行的iOS iCloud示例项目执行了一个实验,以验证PackagedDocument iCloud容器:

    - (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];
    }
}
我将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

我想这意味着这仍然是某种权利问题

更多信息

  • 我做了另一个实验,从我常用的开发人员系统(约塞米蒂10.10.5,)的Xcode 6.4/Preferences/Actions/Export Accounts…导出我的开发人员身份,然后在Mavericks 10.9.5下重新启动MacBook Pro,并用Xcode 6.1/Preferences/Actions/Import Accounts导入身份…。(在我升级到约塞米蒂之前,Mavericks系统磁盘实际上是我的MacBook Pro系统磁盘的复写本。)现在,当我在Mavericks中构建并运行PackagedDocument时,一切都很好

  • 然后,我重新启动到约塞米蒂,删除了我的身份,并使用Xcode 6.1/Preferences/Actions/Import Accounts导入了身份…。现在,当我在约塞米蒂构建并运行PackagedDocument时,它仍然不起作用——找不到iCloud容器

  • 然后我决定在El Capitan(10.11 Beta 5)/Xcode 6.4的干净安装中尝试同样的实验。同样,它仍然不起作用——找不到iCloud容器

  • 最后,我决定再试一次。我决定试着打开iCloud Drive。但是,因为我不想将我的工作iCloud帐户转换为iCloud Drive,我决定