23
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NSURL と bookmark と Sandbox の関係

23
Last updated at Posted at 2013-06-13

Bookmark とは

Snow Leopard から、 NSURL に bookmark という機能が加わった。 Bookmark はあるファイルシステムリソース(つまりファイルやフォルダ)を指す一種の URL であり、そのリソースのパスを表す NSURL から生成できる。 Bookmark は参照しているリソースが移動しても有効であり、 bookmark から移動先のパスを表す NSURL を取得することができる。

// NSURL からbookmark を生成
- (NSData *)bookmarkDataWithOptions:(NSURLBookmarkCreationOptions)options includingResourceValuesForKeys:(NSArray *)keys relativeToURL:(NSURL *)relativeURL error:(NSError **)error;

// Bookmark を解決して NSURL を取得
+ (id)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error;

Security-scoped bookmark

Sandbox が有効な環境では、ユーザーが Open Panel などで与えた URL は Sandbox 内から読み書き可能になるが、アプリケーションを終了すると読み書きの権限は失われる。だがそのような URL から生成した bookmark はアクセス権限の情報を保持するので、これを保存しておくことで、アプリケーションを次に起動したときに読み書き可能な URL を取得できる。アクセス権限の情報を持つ bookmark を security-scoped bookmark といい、そこから生成された URL は security-scoped URL と呼ばれる。 Security-scoped URL が指すリソースに Sandbox 内からアクセスするには、アクセスする前に -startAccessingSecurityScopedResource を呼び、アクセスを終えたら必ず stopAccessingSecurityScopedResource を呼ぶ:

NSURL *URL = <#Resolve bookmark#>;
[URL startAccessingSecurityScopedResource];
NSString *contents = [NSString stringWithContentsOfURL:URL];
[URL stopAccessingSecurityScopedResource];

App-scoped bookmark と document-scoped bookmark

ある Sandbox 化アプリケーションから見てリソースが読み書き可能であるという情報を記録した bookmark は app-scoped bookmark と呼ばれる。

対して、あるドキュメントから見てリソースが読み書き可能であるという情報を記録した bookmark は document-scoped bookmark と呼ばれる。この種の bookmark は、複数の外部リソースへの参照を持つファイルを作るときに有効である。

外部の画像ファイルへの参照を埋め込んだリッチテキスト文書を考えてみよう。あるワープロソフトAは、リッチテキスト文書ファイルの中に画像ファイルへの document-scoped bookmark を記録する。別のワープロソフトBは、リッチテキスト文書ファイルを開き、画像への document-scoped bookmark を解決することで、画像ファイルの読み書き権限も得ることができる。

Document-scoped bookmark を生成するには、-bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error:relativeToURL に基準となるドキュメントの URL を指定する。

23
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?