2011-01-07 48 views
1

我还能说什么,我该如何硬编码应用程序中的CFBundleIdentifier?如何硬编码CFBundleIdentifier?

感谢

+0

为什么你想要将CFBundleIdentifier硬编码到应用程序中? OS X将它设计为plist,因此如果将它从plist中移除并嵌入到应用程序中,可能会在操作系统透视图上导致出现问题。 – 2011-01-07 15:15:51

回答

5

如果你想在运行时改变CFBundleIdentifier,你不能,除非你写的应用程序包Info.plist。这是不好的做法,因为应用程序包可能已被移动到只读卷,或者其写入权限受系统管理员限制,或数字签名以避免篡改。我想启动服务不会立即识别这种变化,应用程序将不得不重新启动。此外,这也是Mac Apple Store拒绝的原因。另一方面,如果要检测CFBundleIdentifier的篡改,则可以在应用程序启动时始终读取其值,例如,在applicationDidFinishLaunching

- (void)applicationWillFinishLaunching:(NSNotification *)aNotification 
{ 
    NSString *bundleId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; 
    if (! [bundleId isEqualToString:@"com.yourcompany.yourapp"]) 
    { 
     // Ooops, CFBundleIdentifier doesn’t match 
    } 
} 

根据您的要求,您可能想混淆上面的代码,包括文字字符串。但是,一般来说,你将无法阻止一个坚定的对手。