1

Mac App Storeで、いくつかのグラフィックを表示するプログラムを作成しました。時折、インターネットからこれらを更新します。ほとんどの人と同じように、私は今、自分のアプリをサンドボックス化する必要があります。

ほとんどすべてが機能していますが、更新するとファイルがアプリ自体のバンドルに保存され、「sandboxd:denyfile-write-create」で失敗します。

私はfopen(...、 "wb")を使用します

fopenに渡されるパスは次のとおりです。/Users/MyUser/Library/Developer/Xcode/DerivedData/MyApp-czuwveatgjffaggwqjdqpobjqqop/Build/Products/Debug/My.app/Contents/Resources/the_file.foo

パスは次を使用して作成されます。

CFBundleRef bundle = CFBundleGetMainBundle();
CFURLRef url = CFBundleCopyResourcesDirectoryURL(bundle);
CFURLGetFileSystemRepresentation(url, true, (UInt8*)buf, sizeof(buf));

私はここで明らかに間違ったことをしていますか?私のアプリはマルチプラットフォームなので、理想的にはfopen/etcを使い続けます。私が理解したように、アプリが他の場所で何もできないようにブロックされている場合でも、アプリは独自のバンドルへの書き込みを許可する必要がありますか?

ありがとう!

4

1 に答える 1

8

OS Xアプリは、(サンドボックス化されていない場合でも)アプリバンドルに書き込むことはできませんOS Xでは、アプリケーションはユーザーが自分でアクセスするよりも多くのファイルシステムにアクセスできず、ユーザーは(通常)/Applications内の何かを変更する権限を持ちません。これは、通常はアプリバンドル内にデータを保存するiOSアプリとはまったく異なることに注意してください。

OS Xでは、アプリケーションデータは通常、各ユーザーのLibraryフォルダーに保存され、データの種類に応じていくつかのサブフォルダーの1つに保存されます。主要なファイルについては、「ライブラリディレクトリがアプリ固有のファイルを保存する」に関するAppleのメモを参照してください。各アプリはユーザーのライブラリ内に独自のコンテナを取得するため、サンドボックス化はこれを複雑にします。Appleは、さまざまな種類のデータの正しい場所を決定するためのいくつかの方法を提供しています。「アプリ固有のファイルを保存する場所の決定」を参照してください。

于 2012-05-30T23:28:57.343 に答える