2010-03-01 53 views
3

是否有任何方式以編程方式在您的iPhone應用程序中查找應用程序標識符前綴?甚至只是爲了獲得整個應用程序標識符字符串?以編程方式查找iPhone應用程序標識符前綴

我看到你可以通過偷看到「embedded.mobileprovision」文件找到它,但有沒有更簡單的方法? (如果你在模擬器中運行,我不這麼認爲)

編輯:對不起,我的意思是標識符PREFIX(10個字符)。我已經意識到,我並不需要這些,因爲ID的其餘部分無論如何都保證是唯一的。

回答

10

捆綁ID以St3fan指定的形式存儲在應用包的Info.plist中,但您不應該直接在Info.plist上摸索。相反,使用:

[[NSBundle mainBundle] bundleIdentifier] 
0

如果我理解正確,您正在尋找包標識符?如果你可以得到這種方式。

NSString* appID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; 
+2

匿名用戶認爲這是簡單的:'的NSString *的appid = [[一個NSBundle mainBundle] bundleIdentifier]' – mplungjan 2011-12-19 08:36:04

4

可以通過編程通過查看現有鑰匙串項目的訪問組屬性(即kSecAttrAccessGroup)檢索捆綁種子ID。在下面的代碼中,我查找現有的KeyChain條目並創建一個,如果它不存在。一旦我有一個KeyChain條目,我從它提取訪問組信息並返回由「。」分隔的訪問組的第一個組件。 (期間)作爲捆綁種子ID。

+ (NSString *)bundleSeedID { 
    NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys: 
          kSecClassGenericPassword, kSecClass, 
          @"bundleSeedID", kSecAttrAccount, 
          @"", kSecAttrService, 
          (id)kCFBooleanTrue, kSecReturnAttributes, 
          nil]; 
    CFDictionaryRef result = nil; 
    OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, (CFTypeRef *)&result); 
    if (status == errSecItemNotFound) 
     status = SecItemAdd((CFDictionaryRef)query, (CFTypeRef *)&result); 
    if (status != errSecSuccess) 
     return nil; 
    NSString *accessGroup = [(NSDictionary *)result objectForKey:kSecAttrAccessGroup]; 
    NSArray *components = [accessGroup componentsSeparatedByString:@"."]; 
    NSString *bundleSeedID = [[components objectEnumerator] nextObject]; 
    CFRelease(result); 
    return bundleSeedID; 
} 
+0

張貼複製和樣板/逐字答案粘貼到多個問題時一定要小心,這些往往被標記作爲社區的「垃圾」。如果你這樣做,那麼它通常意味着問題是重複的,所以標記它們。 http://stackoverflow.com/a/11841898/419 – Kev 2012-08-09 22:44:55

+0

謝謝你的擡頭。最初,我添加了一個只有一個鏈接指向我的其他答案的答案,但SO會自動將其轉換爲對該問題的評論。我認爲在這裏複製我的答案會更有幫助,因爲所有其他答案者都誤解了這個問題並給出了錯誤的答案。我應該刪除這個答案並鏈接到另一個答案作爲對這個問題的評論嗎? – 2012-08-09 23:00:13

+0

另外,我檢查了SO的「標誌」功能,並沒有找到合適的選項來標記此問題。這個問題有其他一些信息,其他問題缺乏,所以它不是一個確切的副本。 – 2012-08-09 23:10:19

相關問題