iCloud Drive Folder不会显示我应用的文件夹。
这是我将文件发送到iCloud Drive的方式:
- (IBAction)btnStoreTapped:(id)sender {
// Let's get the root directory for storing the file on iCloud Drive
[self rootDirectoryForICloud:^(NSURL *ubiquityURL) {
NSLog(@"1. ubiquityURL = %@", ubiquityURL);
if (ubiquityURL) {
// We also need the 'local' URL to the file we want to store
//NSURL *localURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Photo" ofType:@"pdf"]];
NSURL *localURL = [self localPathForResource:@"document" ofType:@"doc"];
NSLog(@"2. localURL = %@", localURL);
// Now, append the local filename to the ubiquityURL
ubiquityURL = [ubiquityURL URLByAppendingPathComponent:localURL.lastPathComponent];
NSLog(@"3. ubiquityURL = %@", ubiquityURL);
// And finish up the 'store' action
NSError *error;
if (![[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:localURL destinationURL:ubiquityURL error:&error]) {
NSLog(@"Error occurred: %@", error);
}else{
NSLog(@"Succeed");
}
}
else {
NSLog(@"Could not retrieve a ubiquityURL");
}
}];
}
- (void)rootDirectoryForICloud:(void (^)(NSURL *))completionHandler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *rootDirectory = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]URLByAppendingPathComponent:@"Documents"];
if (rootDirectory) {
if (![[NSFileManager defaultManager] fileExistsAtPath:rootDirectory.path isDirectory:nil]) {
NSLog(@"Create directory");
[[NSFileManager defaultManager] createDirectoryAtURL:rootDirectory withIntermediateDirectories:YES attributes:nil error:nil];
}
}
dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(rootDirectory);
});
});
}
- (NSURL *)localPathForResource:(NSString *)resource ofType:(NSString *)type {
NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *resourcePath = [[documentsDirectory stringByAppendingPathComponent:resource] stringByAppendingPathExtension:type];
return [NSURL fileURLWithPath:resourcePath];
}
实际上我做了所有解释in this post
一切看起来都很好。我可以成功上传文件,我可以通过终端在我的电脑上显示它们。
我可以看到我刚从iphone上传的文件。
但我的mac或icloud.com中的iCloud Drive文件夹中没有显示任何内容。为什么他们没有显示我的应用程序的文件夹,即使一切看起来都很好,没有错误?
答案 0 :(得分:6)
我在swift中尝试了相同的代码并遇到了同样的问题。
这对我有用:
1)在info.plist源代码中找到以下行
I have fixed the problem a bit different logic.
View myView;
case R.id.btnReset:
if (myView.mBitmap != null) {
myView.mBitmap.eraseColor(Color.TRANSPARENT);
myView.mPath.reset();
myView.invalidate();
}
break;
2)增加版本号。如果是1,则将其增加到2.无论版本号是什么,都执行相同操作。
3)如果需要,请从设备中卸载应用程序,然后按照上述两个步骤重新运行该应用程序
答案 1 :(得分:5)
在现有应用程序中唯一对我有用的东西(我有完全相同的问题)(因此我无法更改软件包ID)是在Documents
下创建URLForUbiquityContainerIdentifier
子文件夹文件夹并在那里写下我的所有文件。
一旦我这样做,他们就出现在Mac上的Finder中。但是,它们没有出现在iCloud Drive中应用程序文件夹的Documents
子文件夹中,它们直接显示在应用程序文件夹中。
答案 2 :(得分:2)
但我的mac或icloud.com中的iCloud Drive文件夹中没有显示任何内容。 为什么他们没有显示我的应用程序的文件夹甚至一切看起来像 很好,没有错误?
这是一个新的应用程序还是新创建的iCloud容器? 原因是:NSUbiquitousContainerIsDocumentScopePublic = true仅在应用程序(以及授权的iCloud容器)经过审核和批准后才生效。
我不记得我在哪里读到“缺少一条信息”(至少我没有从Apple文档中得到它)。
根据我的经验的另一个例子,它似乎证明了这一点:在现有的应用程序中(使用“旧样式 - TeamIdentifierPrefix”iCloud容器),我可以在iCloud驱动器上显示该容器。但是新的容器在iCloud Drive中“不向公众”显示(甚至很难,我可以在我的Mac上使用Terminal.app看到它)。一旦应用程序(使用新容器)获得批准并在AppStore上可用,您就可以再次使用Info.plist(并使新容器可见/隐藏,......)
答案 3 :(得分:0)
答案 4 :(得分:0)