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

StackOverflow https://stackoverflow.com/questions/1136166

質問

質問はタイトルにありますが、ここにもう一度書きます

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

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

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

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

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

たとえば、mainBundle の代わりに別のパスから plist を直接読み取ることができる場合は、別の代替案も良いです。

役に立ちましたか?

解決

物理的には、確かにそれは可能な場合もあります。

いいえ、そんなことはしないでください!!

わかった...App Bundle に内容をコピーするのはよくありません。App Bundle は設定やデータを保存する場所ではありません。アプリバンドルは読み取り専用であると考える必要があります。これを行う必要があるのには、次のような理由があります。

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

この種のものを置く正しい場所は、Application Support フォルダーのサブフォルダーです。

他のヒント

私はあなたがやっているかを正確に知りませんが、あなたのアプリケーションに応じて、あなたは、アプリケーション・サポート・ディレクトリを使用したい場合があります:

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!");
    // ...
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top