0

私の質問は上記のタイトルに記載されていますが、ここでもう一度書きます

別のplistをアプリケーションバンドルコードにコピーすることは可能ですか?

これは実際には私の前の質問に少し関連しています;)プログラムで辞書のプロパティリストを作成します

しかし、私はplistを書き出すことができるので(そして私が何か間違ったことをしているのかどうかをテストする)、私は自分の書いたファイルをコピーできるかどうか疑問に思いました

[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];

コードで私のアプリケーションバンドルに(それがここから読むことができるように) NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];

たとえば、mainBundleではなく別のパスからplistを直接読み取ることができる場合は、別の方法も適しています。

4

2 に答える 2

2

何をしているのか正確にはわかりませんが、アプリケーションによっては、アプリケーションサポートディレクトリを使用することをお勧めします。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
    // Create the directory if it doesn't exist, etc.
} else {
    NSLog(@"Fail!");
    // ...
}
于 2009-07-16T08:31:28.337 に答える
2

物理的には、はい、それは時々可能です。

いいえ、それをしないでください!

わかりました...AppBundleにコンテンツをコピーするのは悪いことです。AppBundleは、設定やデータを保持する場所ではありません。アプリバンドルは読み取り専用と考える必要があります。これは、いくつかの理由で行う必要があります。

  1. ほとんどの場合、Mac OS Xシステムのユーザーはアプリへの書き込み権限を持っていますが、そうでない場合もあります。管理者アカウントを使用していない子供や、学校でのラボの展開について考えてみてください。
  2. コード署名が無効になります。アプリケーションに署名すると、署名が変更されてコード署名が壊れ、あらゆる種類の奇妙な問題が発生します(アプリが持っているファイアウォールのアクセス許可を失う、アプリが変更されたことをユーザーに通知し、キーチェーンのアクセス許可を再度要求するなど)。将来的には、アプリの改ざんはセキュリティ上の大きな危険信号であるため、これによってあらゆる種類の警告が表示される可能性もあります。
  3. iPhoneでは動作しません。これは問題ではないかもしれませんが、iPhoneでこのコードを使用する場合、アプリのバンドルは読み取り専用でサンドボックス化されます。

この種のものを置く正しい場所は、アプリケーションサポートフォルダのサブフォルダにあります

于 2009-07-16T08:41:28.100 に答える