如何硬编码CFBundleIdentifier?

时间:2011-01-07 12:34:23

标签: objective-c macos

我还能说什么,如何在应用程序中对CFBundleIdentifier进行硬编码?

由于

1 个答案:

答案 0 :(得分:5)

如果要在运行时更改CFBundleIdentifier,除非您写入应用程序包Info.plist,否则无法进行更改。这是不好的做法,因为应用程序包可能已被移动到只读卷,或者其写入权限受系统管理员限制,或者经过数字签名以避免篡改。我想Launch Services不会立即识别出这种变化,并且必须重新启动应用程序。此外,这也是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
    }
}

根据您的要求,您可能希望对上面的代码进行模糊处理,包括文字字符串。但是,一般来说,你将无法阻止坚定的对手。