2012-02-03 9 views
0

Mac App Storeのルールに従って2.30: "プログラムは許可された場所にのみ書き込むことができます。"plistとキャッシュのパス

私のアプリ(com.SomeApp)には、独自のID(com.SomeHelper)を持つバンドルアプリが含まれています。 残念なことに、このヘルパーアプリケーションは、〜/ Library/Preferences/com.SomeHelper.plistとキャッシュファイル(〜/ Library/Caches/com.SomeHelper)を作成できます。 レビューアは全アプリを拒否しました!この愚かなルールについて議論する方法はありません。 開発者はiTCにMASアプリのIDを1つしか登録できません。競合を防ぎ、iTCメタ情報の検証を渡すために、バンドルされたアプリに対して同じIDを使用することはできません。 ネットワークサービスによって生成されたキャッシュファイル(URL要求時)。

どのようにこのパズルを解決するには? plistとcacheをまったく無効にする方法はありますか? 環境設定やキャッシュファイルの場所を変更する方法がありますか? もっと良い解決策はありますか?ここで

答えて

0

は、(部分的に疑似コードで、申し訳ありません)私の最終的な解決策です:ヘルパーのmain.mで

//:

@implementation NSUserDefaults (Forwarder) 

-(void)setObject:(id)value forKey:(NSString *)defaultName 
{ 
[[MainAppServer sharedPrefsServer]/* some IPC to parent process*/ setObject:value forKey:defaultName];// I still use distributed objects available before sandboxing rules, next we can use XPC, I hope… 
} 

@end 


int main(int argc,char* argv[]) 
{ 
… 

NSAutoreleasePool * arp = [NSAutoreleasePool new]; 
[NSURLCache setSharedURLCache:[[[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:@"/dev/null"] autorelease]]; 
[[NSUserDefaults standardUserDefaults] addSuiteNamed:@"your.main.app.plist-domain.here"]; 
[arp drain]; 
… 
return NSApplicationMain(argc, (const char **) argv); 
} 

概要:

  1. 我々無効キャッシュ
  2. 私たちはユーザーのデフォルトをスイート経由で読み込み、いくつかのIPCの方法でフォワーディングで書きました...

チェックしました - キャッシュファイルとplistファイルが生成されていません。 パズルが解決しました!