Xcode 为什么苹果';s PackagedDocument MacOS iCloud示例项目找不到URLForUbiquityContainerIdentifier?
为了开发MacOS和iOS产品之间的同步系统,我一直在试验iCloud示例代码和教程。在iOS方面,我构建和运行在iCloud文档容器中处理数据的代码没有问题,但在MacOS方面,使用Apple MacOSPackagedDocument示例项目,我无法成功地将任何数据放置在iCloud中。我相信基本问题是找不到我的应用程序的URLForUbiquityContainerIdentifier,可能是由于iCloud授权规范中的某些错误。但是,在花了很多时间摆弄开发人员门户和Xcode 6/PackagedDocument设置之后,我一直无法找到问题的根源 我的iCloud帐户以前是MobileMe帐户,用于在MacOS和iOS设备之间同步苹果应用程序,因此我相信我的iCloud帐户工作正常 这里,我演示了我指定调用以获取iCloud文档容器的不同方式。无论如何指定,获取iCloud容器URL的调用都返回nil: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
// 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
我想这意味着这仍然是某种权利问题
更多信息