5

私が知る限り(そしてどこでも読む限り)、アプリケーションのドキュメントディレクトリはiPhoneのどこかにあるはず/var/mobile/Library/ですが、取得したディレクトリをログに記録している場合は/var/mobile/Documents.

次のようにディレクトリを取得します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

ここで名前を付けたファイルを作成している場合、これは問題ですか、Settings.xmlそれともアプリ/などに何か問題がありますか?

情報: iOS 4.2.1 を搭載したジェイルブレイクされた iPhone 4 を使用しており、アプリは Cydia または SSH 経由でインストールされます。


アップデート

ええ、でもそのディレクトリは実際には私のアプリケーションとは関係ありません。たとえば、ドキュメント settings.xml を作成していて、別のアプリケーションが同じ NSDocumentDirectory と同じファイル名を使用している場合はどうなるでしょうか? そして、はい、私は知っています。Cydia アプリは /Applications にインストールされましたが、/var/mobile/Documents ではなく、私のアプリ用のドキュメント ディレクトリもあるはずです。http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submissionを見ると、ディレクトリは /var/mobile/Library/ である必要がありますが、前に説明したように、このディレクトリを取得します。

4

7 に答える 7

2

定数NSDocumentDirectoryを使用すると、脱獄アプリの実行時に実際に /var/mobile/Documents が取得されます。一意の名前が付けられていると思われる場合でも、アプリのドキュメントをそこに直接ダンプするのは悪い方針です。

/var/mobile/Library/ フォルダーの内容を見ると、脱獄アプリを含む多くのアプリのデータがそこに保存されていることがわかります。NSDocumentDirectoryそれを取得するために使用できる便利な定数があるかどうかは私にはわかりません。ただし、いつでもソースをハードコーディングして、 内のファイルを探すことができます@"/var/mobile/Library/APPNAME"。このフォルダが変更される可能性はほとんどありません (変更された場合、おそらく他のアプリが壊れる可能性があり、簡単に修正できます)。

リンク先のドキュメントを見ると、次のように指定されています。

Appstore アプリには、インストール プロセスによって作成されるドキュメント フォルダーがあります。ジェイルブレイクされたアプリはそうではありません。独自のフォルダーを作成するのはアプリ次第です。このタイプのフォルダーが必要な場合は、applicationDidFinishLaunching 関数で単純な mkdir コマンドを使用してこれを作成する必要があります。シンプルな関数を追加するだけです: mkdir(“/var/mobile/Library/YOURAPPNAME”, 0755); フォルダーが既に存在する場合、害はありません。インストール プロセスはユーザー root として実行され、アプリはユーザー モバイルとして実行されるため、これを行う必要があります。Cydia がこれを行うと、フォルダーに不適切なアクセス許可が設定されます。

...そのため、そのサブディレクトリを自分で作成する必要があります。そうしないと存在しません。

私の経験では、ジェイルブレイク アプリを作成するには、これらの少し厄介なコーディング プラクティス (パスをハードコーディングし、自分で作成する) のいくつかが必要になるだけです。

更新:以下の Saurik のコメントを必ず確認してください。

于 2011-06-24T06:10:52.187 に答える
0

別のフォルダにインストールされたCydiaアプリを介して、別のディレクトリを取得しているのはそのためです。

于 2011-01-10T20:11:26.600 に答える
0

アプリの起動時に、docs dirに必要なファイルが存在するかどうかを確認し、存在しない場合は、読み取り専用のアプリケーションバンドルからそこにコピーします。アプリを起動するたびに、そこにあります。そして、なんらかの愚かな理由でAppleがそれを変更した場合でも、変更に適応するのに十分な汎用性があるため、コードを調整する必要はありません。元のデータを新しい場所にコピーします(これは最適ではありませんが、静的な場所にあると想定するよりも優れています。これにより、ユーザー間であらゆる種類の混乱が発生し、さらに悪いことに、クラッシュが発生します)。

于 2011-01-23T16:04:09.230 に答える
0

私もこの問題に苦しんでいます...何が起こっているのかまだわからないので、/var/mobile/Documents で作業することに同意しました。ただし、デバイスで (ssh またはモバイル端末経由で) そのディレクトリを手動で作成し、そのアクセス許可を 666 [chmod -r 777 /var/mobile/Documents] に設定して、アプリがそこにファイルを保存およびロードできるようにする必要がありました。

またね!

于 2011-01-20T11:02:00.210 に答える
0

com.companyname.appname.Settings.xml のように、バンドル ID を名前として使用します。異なるアプリで同じになることはめったにありません。また、UUID を使用してファイルに名前を付け、名前に含まれる UUID をアプリケーション バンドルに保存することもできますが、長所と短所があります: 長所: ファイルが別のアプリによって上書きされることはありません 短所: そのようなことを行うのは難しいでしょう。

于 2011-02-19T10:47:06.240 に答える
0

アプリケーションによって作成されたすべてのファイルは、アプリ サンドボックス (例: /var/stash/Applications/AppName) に制限されます。ファイル settings.xml を探すと、上記のコード例を使用して filePath 名を取得できます。

サンドボックスの外にファイルを保存することはお勧めしません。

于 2011-02-23T19:39:10.663 に答える
0

一部の Cydia バイナリは/private/var/lib/(apt-get、openssh など) にインストールされます。その他は/Applications/(Cydia.app、ゲームなど) にインストールされます。

于 2011-01-12T03:16:24.737 に答える