2012-02-03 63 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文件正在生成。 谜题解决了!