2012-03-21 15 views
4

私は自分のアプリケーションをサンドボックスに取り掛けています。私が使用するライブラリは、元のファイルを変更するときに一時ファイルを作成するので、問題があります。Mac SandboxingとTempファイル

「Hello World.txt」で何かが変更されると、同じディレクトリに「Hello World_temp.txt」ファイルが作成され、終了すると両方のファイルが入れ替わります。

これはもちろん、ソースファイルを変更するだけで、フォルダ内の他のファイルを作成することは許可されていないため、サンドボックスルールが壊れます。

私は一時ファイルとは何かに関する推奨事項が見つかりませんので、私は現在、アプリケーションのコンテナに一時ファイルを作成して、書き込みを許可してからファイルをスワップすることにしています。アプリケーションとファイルが異なるディスク上にある場合は、を移動するのではなくコピーするので、それは素晴らしいことではありません。

私たちが書き込みを許可する一時ファイルの場所はありますか?

敬具、

10.7.3+でフランク

答えて

8

(も10.6上のサンドボックスの外に動作します)URLForDirectory:inDomain:appropriateForURL:create:error:(docs)NSFileManager方法を試してみてください。これにより、特定のボリューム上に一時ディレクトリが作成されます。作成したら、replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:を使用してファイルを切り替えることができます。

現在、いくつかの不確実性:10.7で

- > 10.7.2上記の方法サンドボックス内で動作しない場合があります。代わりに、関数NSTemporaryDirectory()(docs)を使用することができます。 replaceItemAtUrl...がこの場合サンドボックスの下で動作しない場合があります。この場合、一時的なバックを読み書きするコードを記述してください。

1

NSTemporaryDirectory()サンドボックスで動作します。 Swiftのサンプルコード:

let path = "\(NSTemporaryDirectory())temp.txt" 
"Hello world".writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil) 
関連する問題