Plist and Cache path



根据Mac应用商店规则2.30:"程序只能写入允许的位置。"

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

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

这是我的最终解决方案(部分采用伪代码,抱歉):

//在助手的主目录中。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文件正在生成。谜题解开了!

最新更新