在我的Mac OS X应用程序中,我试图将下载的文件保存到应用程序的目录(即HomeDirectory()/ Documents)中,但是App Store拒绝了我的应用程序,说用户无法轻松访问您的下载文件(即,不打开该应用程序)。然后,我尝试通过在权利中添加“读/写”权限将下载的文件写入〜/ Downloads文件夹,但App Store再次拒绝该应用程序,说
您的应用程序访问以下位置:
〜/下载
大多数遇到此问题的开发人员正在打开文件 在读/写模式而不是只读模式下,在这种情况下,它应该 更改为只读。
此问题的其他常见原因包括:
在上述位置创建或写入文件,这些位置不是文档中所述要写入文件的有效位置。
在不使用有效的app-id作为写入文件的容器的情况下写入上述位置。
现在的问题是App Store不允许我将文件保存在App的目录中或System的文件夹中(即下载)。我也不想每次都使用NSSavePanel。我想静默下载文件。我应该在哪里保存文件?
答案 0 :(得分:0)
借助“安全范围书签”,用户选择的读写权限和NSOpenPanel,我能够对用户选择的文件夹进行读写。
下面是我遵循的步骤,
已添加
NSOpenPanel *openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseDirectories:YES];
[openDlg setCanCreateDirectories:YES];
[openDlg setAllowsMultipleSelection:FALSE];
[openDlg setPrompt:@"Select"];
if ( [openDlg runModal] == NSModalResponseOK )
{
NSURL *url = openDlg.URL;
NSError *error = nil;
NSData *bookmark = [url
bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:bookmark forKey:@"DOWNLOAD_FOLDER_BOOKMARK_PATH"];
[userDefaults synchronize];
}
在权利文件中。
要求用户使用NSOpenPanel选择(或创建并选择)我的应用程序要访问(读取/写入)的所需文件夹。
当用户选择文件夹时,我使用NSURLBookmarkCreationWithSecurityScope在NSUserDefaults中将所选文件夹路径的书签创建为书签路径。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData * bookmarkedPathData = [userDefaults objectForKey:@"DOWNLOAD_FOLDER_BOOKMARK_PATH"];
NSURL* urlFromBookmark = [NSURL URLByResolvingBookmarkData:bookmarkedPathData
options:NSURLBookmarkResolutionWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:nil
error:&error];
将标记的路径保存在NSUserDefaults中之后,以后可以使用NSURLBookmarkResolutionWithSecurityScope访问保存的路径。
[urlFromBookmark startAccessingSecurityScopedResource];
一旦获得了保存的带有书签的URL,就可以使用该URL进行读写操作。在从URL读/写URL之前,请使用[saveFolder stopAccessingSecurityScopedResource];
开始作用域。在完成读/写操作后,使用{{1}}
注意:我确实尝试直接写入“文档”,“下载”,“桌面”,而不在这些目录中创建文件夹,但是Apple拒绝了该应用程序,说
您的应用程序访问以下位置“下载”。
然后,我不是直接写入这些目录(文档,下载,桌面),而是要求用户选择(创建并选择)文件夹,然后使用Security-Scope-Bookmark对用户选择的文件夹执行读/写操作。
希望这对某人有帮助。