14

私はサンドボックスと少し混乱しています。これは可能ですか?

ありがとう!

4

1 に答える 1

35

はい。ただし、「一時的な例外」資格が必要です。「一時的」とは、OS の将来のバージョンでなくなる可能性があることを意味しますが、それは大きなリスクではありません。より大きな問題は、「例外」という言葉です。これは、権利の使用を正当化する必要があることを意味します。そうしないと、App Store のレビュアーがおそらくあなたを拒否するでしょう.

できるはずなのに、今すぐ にアクセスしないとできないことを正確に説明するバグ レポートを提出し~/Library、理想的には、そのトピックに関するフォーラム スレッドを開始します。アクセスする代わりに使用する回避策を提案する場合があり~/Libraryます (プライベート API を使用することもあるかもしれません)。または、今のところ一時的な例外を使用するように言うかもしれません。その場合は、そうしてください。または、応答しない可能性があります。その場合は、一時的な例外を使用して指を交差させます。いずれの場合でも、App Store 提出レビュー ノートにバグ レポートやフォーラム スレッドへのリンクがあることを確認してください。

これを行うには、プロジェクトの entitlements plist を手動で編集する必要がありますが、それほど難しくありません。com.apple.security.temporary-exception.files.home-relative-path.read-only1 つの文字列を含む配列を作成します"/Library/"。このような:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-only</key>
<array>
    <string>/Library/</string>
</array>

/最後に、ファイルではなくディレクトリにアクセスする必要があることをサンドボックスが認識する方法について説明します。オフのままにしておくと、~/Library要求した 内のすべてのファイルにアクセスできますが、 の (再帰的な) サブディレクトリ内のファイルには~/Libraryアクセスでき~/Library/LaunchAgents/com.mycompany.myapp.myoldagent.12345678-ABCD-EF00-1234-567890ABCDEF.plistません。Entitlement Key Reference ドキュメントのFile Access Temporary Extensionsを参照してください。

~/Libraryまた、コンテナにコピーされるため、またはパスを使用する代わりに適切な API を使用すると間接的に、 の下の特定のものに「無料で」アクセスできることに注意してください。したがって、あなたがしていることを達成するためのより良い方法があるかもしれません。たとえば、アプリの以前のサンドボックス化されていないバージョンによって残されたファイルを読み取るには、それらをコンテナーに移行してそこで読み取ることができる場合があります。

NSHomeDirectory()もう 1 つ: ~/Library にアクセスするだけでは、URLsForDirectory:inDomains:、 などが返されるものは変わりません~/Containers/com.mycompany.myproduct/Data/Library。代わりに取得することはできます。これに対処するための Apple の半公式の推奨事項は、BSD API を使用してユーザーの実際のホーム ディレクトリを取得することであり、最も簡単な方法は次のとおりです。

const char *home = getpwuid(getuid())->pw_dir;
NSString *path = [[NSFileManager defaultManager] 
                  stringWithFileSystemRepresentation:home
                  length:strlen(home)];
NSURL *url = [NSURL fileURLWithPath:path isDirectory:YES];

いくつかのメモ:

  • getpwuid一般に、頻繁に電話をかけることはお勧めできません。最善の解決策は、このコードを早い段階で一度呼び出してから、結果をキャッシュすることNSURLです。
  • これは明らかに、他のユーザーのホーム (したがってLibrary) ディレクトリを取得するためにも使用できますが、App Store では、実際にそれを試みるソフトウェアはほぼ確実に許可されません。
  • ライブラリがあるという事実は、~/Libraryいつか変更される可能性のある「実装の詳細」と見なされます.レベルの問題であり、レビュー ノートで言及する価値があるかもしれません。
于 2012-06-08T21:01:54.153 に答える