根据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和缓存? 或者也许有一种方法可以更改首选项和缓存文件的位置? 有更好的解决方案吗?
答案 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);
}
要点:
我检查过 - 现在没有缓存和plist文件正在生成。 这个难题已经解决了!