2012-02-03 82 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,並且我不能使用捆綁應用程序的相同ID(以防止衝突並通過iTC元信息驗證)。 由網絡服務生成的緩存文件(基於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文件正在生成。 謎題解決了!