2011-01-07 51 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 
    } 
} 

根據您的要求,您可能想混淆上面的代碼,包括文字字符串。但是,一般來說,你將無法阻止一個堅定的對手。