2016-11-07 10 views
1

Androidアプリケーション開発者はkeystoreを使ってアプリケーションに署名します。彼らはPackageManagerのようないくつかのAndroid SDKを使ってkeystoreのダイジェストを取得できます。キーストアのダイジェストは、更新後も同じアプリで一意です。iOSアプリケーションで同等のAndroidキーストアダイジェストとは何ですか

3人目の開発者の中には、3人目のAPIでこのダイジェストを使用するものがあります。たとえば、googleのMaps APIで使用しています。

今、私はiOSにこのようなものがあるのか​​と疑問に思っています。私たちはiOS SDKからそれを取り出すことができ、それは私のアプリケーションのすべてのバージョンでユニークなものになるでしょうか?

答えて

0

ベースあなたのヘルパー関数は次のようなものを見ることができます。

チームIDは、iTunes Connectの開発チームに関連付けられた一意の識別子であり、あらゆる種類のAppleアカウント(組織、個人、または企業を含む)で公開されている各アプリケーションには、

iOS SDKからplistでハードコードしないでください。私はコードの下に使用します。

CFUUIDRef theUUID = CFUUIDCreate(NULL); 
CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
CFRelease(theUUID); 


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

最後にbundleSeedIDは、現在のアプリケーションのteamIDが含まれています。

-1

サードパーティのAPIキーを格納するためにplist構成ファイルを別に作成し、[ヘルパー機能]を使用して取得することができます。 custom runtime flagを追加して、デバッグキーまたはリリースキーを選択することができます。

func valueForAPIKey(named keyname:String) -> String { 
    // Credit to the original source for this technique at 
    // http://blog.lazerwalker.com/blog/2014/05/14/handling-private-api-keys-in-open-source-ios-apps 
    let filePath = NSBundle.main().path(forResource: "ApiKeys", ofType: "plist") 
    let plist = NSDictionary(contentsOfFile:filePath!) 
    #if DEBUG 
     keyname = "\(keyname)-DEBUG" 
    #endif 
    let value = plist?.object(forKey: keyname) as! String 
    return value 
} 

出典::私たちは、アプリの署名者を識別するための同等のようTeam ID使用することができます私の研究上のhttp://dev.iachieved.it/iachievedit/using-property-lists-for-api-keys-in-swift-applications/

+0

私はアプリのサインに深刻なものが必要です。 –

+0

実行時に正しいキーを取得するために、異なるビルド構成で[custom Swift flags](http://stackoverflow.com/a/24112024/7106197)を使用することができます。 GOOGLE-KEYとGOOGLE-KEY-DEBUGという名前のキーを1つ使用し、次のように使用できます。 –

+0

func valueForAPIKey(keyname:String) - > String { //この手法の元のソースには // http://blog.lazerwalker.com/blog/2014/05/14/handling-private-api-keys-in-open-source-ios-apps let filePath = NSBundle.main()。path(forResource: " "plist") let plist = NSDictionary(contentsOfFile:filePath!) let value = plist?.object(forKey:keyname)as!文字列 戻り値 } –

関連する問題