繁体   English   中英

应用程序重新启动后,OSX应用程序失去了读取目录的权限

[英]OSX application loses permissions to read a directory after app re-start

我的OSX应用程序用于监视用户选择的计算机上的文件夹。 很简单,我有一个扫描目录的函数:

- (NSError*)scan:(NSString*)dir {
  NSError *err = nil;
  NSArray *filenames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dir error:&err];
  for(NSString* fn in filenames) {
    NSString *fp = [dir stringByAppendingPathComponent:fn];
    BOOL isDir;
    BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:fp isDirectory:&isDir];
    if(exists && isDir) {
      [self scan:fp];
    }
    else {
      [self handleFile:fp];
    }
  }
  NSLog(@"Scanning %@: %@",dir,err);
  return err;
}

当我第一次启动应用程序时,我提供了一个UI来选择该文件夹,然后立即扫描它。 该操作很有效(没有错误)。

当我重新启动应用程序时,我尝试再次扫描目录,但这次NSLog发出错误:

Scanning /Users/zane/Dropbox/Gifs: Error Domain=NSCocoaErrorDomain Code=257 "The file “Gifs” couldn’t be opened because you don’t have permission to view it." UserInfo=0x608000476d40 {NSFilePath=/Users/zane/Dropbox/Gifs, NSUserStringVariant=(
    Folder
), NSUnderlyingError=0x60800005d3d0 "The operation couldn’t be completed. (OSStatus error -5000.)"} 

请注意,路径未更改。

我怀疑这个问题与.entitlements 这是我得到的: 在此输入图像描述

如果要使用用户已选择的相同文件或文件夹,则需要在用户选择该路径时将路径另存为安全范围的书签。 用户重新启动应用程序时,请读取其书签数据,以便使用保存的路径。 本页中间有安全范围书签的描述。 使用NSURL的URLByResolvingBookmarkData方法返回安全范围的书签。 使用bookmarkDataWithOptions方法或NSURL的等效方法来恢复安全范围的书签。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM