我试图让我的应用程序能够打开 iCloud Drive 文件,当用户点击 Apple“文件”应用程序中的文件并选择我的应用程序以查看它时。一切都设置得很好,这样应用程序被打开,并在用户点击文件时通知。但是无法打开该文件,错误是该应用程序无权这样做。
我的应用程序将“支持打开文档到位”Info.plist设置为“是”。这意味着 URL 指向应用程序外部的 iCloud 目录,这可能是问题的原因。如果我将其设置为 NO,则 URL 是应用程序内文件的副本,并且一切正常。但该应用程序需要该设置为 YES。
我已经验证过,该文件实际上存在于手机上。
有谁知道如何使这项工作?
我的openURL:方法目前看起来像:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
NSLog(@"path=%@", url);
NSError *error = nil;
NSData *data = [[NSData alloc] initWithContentsOfURL:url options:0 error:&error];
NSLog(@"error=%@", error);
}
Run Code Online (Sandbox Code Playgroud)
给出的错误是:
错误域=NSCocoaErrorDomain 代码=257“无法打开文件“Kili.gpx”,因为您没有查看它的权限。UserInfo={NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/Kili.gpx, NSUnderlyingError=0x283ac83f0 {Error Domain=NSPOSIXErrorDomain Code=1“不允许操作”}}
我找到了解决方案。你需要用startAccessingSecurityScopedResource和包围 url 的阅读stopAccessingSecurityScopedResource:
[url startAccessingSecurityScopedResource];
NSError *error = nil;
NSData *data = [[NSData alloc] initWithContentsOfURL:url options:0 error:&error];
[url stopAccessingSecurityScopedResource];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |