他の場所からダウンロードしたファイルを保存する場所をユーザーに尋ねる、サンドボックス化された Mac App Store アプリを開発しています。ユーザーからフォルダーを取得するための次のコードがあります(一部のエラーチェックを取り除きます):
NSOpenPanel* openPanel = [NSOpenPanel openPanel];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setResolvesAliases:YES];
NSInteger result = [openPanel runModal];
NSArray* urls = [openPanel URLs];
NSURL* folderURL = [urls objectAtIndex:0];
NSError* error;
NSData* bookmakeData = [folderURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
_saveFolderBookmark = bookmakeData;
ファイルをこのフォルダーに移動するときは、次のコードがあります。
BOOL isStale;
NSError* error;
NSURL* saveFolder = [NSURL URLByResolvingBookmarkData:_saveFolderBookmark
options:NSURLBookmarkCreationWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:&isStale
error:&error];
BOOL success = [saveFolder startAccessingSecurityScopedResource];
// Move the file somewhere else
NSWorkspace* workspace = [NSWorkspace sharedWorkspace];
NSInteger operationTag;
BOOL copied = [workspace performFileOperation:NSWorkspaceMoveOperation
source:[[self getDocumentsFolder] path]
destination:[saveFolder path]
files:[NSArray arrayWithObject:filename]
tag:&operationTag];
[saveFolder stopAccessingSecurityScopedResource];
startAccessingSecurityScopedResource は、NSOpenPanel から ULR を取得した直後、またはその後の実行で、NSUserDefaults に保存されているブックマーク データを使用して、成功を返さないことを示すコードがたくさんあります。
資格ファイルには、他の項目の中でも特に、次のものがあります。
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
このコードに何か問題がありますか?