在我的 Mac OS X 应用程序中,我尝试将下载的文件保存到应用程序的目录(即 HomeDirectory()/Documents),但 App Store 拒绝了我的应用程序,说用户无法轻松访问您下载的文件(即不打开应用程序)。然后我尝试通过在权利中添加读/写权限将下载的文件写入 ~/Downloads 文件夹,但 App Store 再次拒绝应用程序说
Your application accesses the following location(s):
~/Download
The majority of developers encountering this issue are opening files in Read/Write mode instead of Read-Only mode, in which case it should be changed to Read-Only.
Other common reasons for this issue include:
creating or writing files in the above location(s), which are not valid locations for files to be written as stated in documentation.
writing to the above location(s) without using a valid app-id as a container for the written files.
现在的问题是 App Store 不允许我将文件保存在 App 的目录或系统的文件夹中(即下载)。另外我不想每次都使用 NSSavePanel。我想静默下载文件。我应该在哪里保存我的文件?
最佳答案
在安全范围书签、用户选择的读写权限和 NSOpenPanel 的帮助下,我能够读取/写入用户选择的文件夹。
以下是我遵循的步骤,
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
在权利文件中。
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];
}
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];
[urlFromBookmark startAccessingSecurityScopedResource];
启动范围.并在完成读/写操作后使用 [saveFolder stopAccessingSecurityScopedResource];
停止范围注意:我确实尝试直接写入 Documents、Downloads、Desktop 而不在这些目录中创建文件夹,但 Apple 拒绝了该应用程序,并说
Your application access the following locations 'Downloads'.
然后,我没有直接写入这些目录(文档、下载、桌面),而是要求用户选择(创建和选择)一个文件夹,然后使用 Security-Scope-Bookmark 对用户选择的文件夹执行读/写操作。
希望这可以帮助某人。
关于macos - 如何将下载的文件(音频、文档)自动保存到 mac os x 沙盒应用程序中用户的下载文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54147042/