Plist和缓存路径

时间:2012-02-03 09:45:16

标签: cocoa app-store

根据Mac App Store规则2.30: “程序只能写入允许的位置。”

我的应用(com.SomeApp)包含带有自己ID的捆绑应用(com.SomeHelper)。 不幸的是,这个帮助应用程序可以编写自己的首选项(〜/ Library / Preferences / com.SomeHelper.plist)和缓存文件(〜/ Library / Caches / com.SomeHelper)。 评论家拒绝了整个应用!没有办法讨论这个愚蠢的规则。 开发人员只能在iTC中为MAS应用程序注册一个ID,并且我不能对捆绑的应用程序使用相同的ID(以防止冲突并通过iTC元信息验证)。 网络服务生成的缓存文件(在URL请求上)。

如何解决这个难题? 有没有办法禁用plist和缓存? 或者也许有一种方法可以更改首选项和缓存文件的位置? 有更好的解决方案吗?

1 个答案:

答案 0 :(得分: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方式转发...
  3. 我检查过 - 现在没有缓存和plist文件正在生成。 这个难题已经解决了!