【问题标题】:No permission to read iCloud Drive file没有读取 iCloud Drive 文件的权限
【发布时间】:2019-12-27 01:00:50
【问题描述】:

我试图让我的应用程序能够打开 iCloud Drive 文件,当用户在 Apple“文件”应用程序中点击文件并选择我的应用程序来查看它时。一切都设置得很好,例如应用程序被打开,并在用户点击文件时得到通知。但是无法打开文件,错误是应用程序没有权限这样做。

我的应用在Info.plist 中将“支持在适当位置打开文档”设置为“是”。这意味着 URL 指向应用程序外部的 iCloud 目录,这可能是问题的原因。如果我将其设置为 NO,则 URL 是应用程序内文件的副本,并且一切正常。但该应用程序需要该设置为“是”。

我已验证,该文件实际上存在于手机上。

有人知道怎么做吗?

我的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);
}

给出的错误是:

错误域=NSCocoaErrorDomain 代码=257 "文件“Kili.gpx” 无法打开,因为您无权查看。” UserInfo={NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/Kili.gpx, NSUnderlyingError=0x283ac83f0 {Error Domain=NSPOSIXErrorDomain Code=1 "不允许操作"}}

【问题讨论】:

    标签: ios icloud-drive


    【解决方案1】:

    我找到了解决方案。你需要用startAccessingSecurityScopedResourcestopAccessingSecurityScopedResource包围url的阅读:

    [url startAccessingSecurityScopedResource];
    NSError *error = nil;
    NSData *data = [[NSData alloc] initWithContentsOfURL:url options:0 error:&error];
    [url stopAccessingSecurityScopedResource];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2016-05-07
      • 1970-01-01
      • 2018-09-21
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多