0

サンドボックスで実行するための要件を満たすために、CoreDataベースのアプリケーションを更新しようとしています。ただし、移行は困難であることが証明されています。NSPersistentDocumentはインプレースで移行を行おうとしており、ユーザーの許可なしにディスクに保存したいと考えているようです。このため、軽量の移行は失敗します。

ディスク上での移行を回避する必要がある人を想像することしかできませんが、NSPersistentDocumentでこれを行う方法を理解することはできません。NSDocumentControllerをサブクラス化し、makeDocumentForURL:...をオーバーライドして、移行が必要かどうかを確認することをお勧めします。その時点でのロジックは、新しい無題のドキュメントを作成し、それにデータを移行することだと思いますが、これが最善のアプローチなのか、他にどのようなアプローチを検討すべきかはわかりません。

サンドボックス化されたコアデータアプリケーションの移行をどのように実行する必要がありますか?

4

2 に答える 2

1

一時的な資格でそれを回避することができました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.temporary-exception.files.absolute-path.read-write</key>
    <string>/Volumes/</string>
    <key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
    <string>/</string>
</dict>
</plist>

これにより、サンドボックスが有効になっていない場合と同様に、自動移行が機能しました。

ただし、本質的にはサンドボックスの大部分を無効にしているため、アプリストアの承認時にアップルがどのように反応するかはわかりません.

developer.apple.com では、一時的な資格を使用しなければならない場合は、バグを送信することをお勧めします。

于 2012-06-19T21:58:25.727 に答える
0

ソリューションは想像以上に複雑であることがわかりました。コードがたくさんあるので、ジャーナルに答えを書きました: http://www.codeotaku.com/blog/2012-06/sandboxing-core-data-and-migrations

ただし、簡単に要約すると、Core Data はデータの移行とファイルへの書き込みを試みます。ファイルへのアクセスは読み取り専用であるため、これはサンドボックスでは機能しません。そのため、Core Data の移行は失敗します。私の場合、ドキュメント作成プロセスをハイジャックして、移行が必要かどうかを確認し、移行が必要な場合は (NSSavePanel を提示して) ユーザーに、移行されたデータの場所を選択するように依頼しました。次に、移行タスクは、適切な一時ディレクトリで移行を行う特殊なクラスに渡されます。最終的なデータは、ユーザーが指定した場所にコピーされ、代わりにそのドキュメントが開かれます。

于 2012-06-10T13:29:14.540 に答える