美文网首页
iOS 动态获取TeamID(又名AppIdentifierPr

iOS 动态获取TeamID(又名AppIdentifierPr

作者: 芮淼一线 | 来源:发表于2023-06-29 16:49 被阅读0次

在iOS中,使用Keychain可以把我们要存储的数据以加密的形式存储在独立于App的位置。

通过当前项目的Capabilities>Keychain Sharing>On开启Keychain后,会自动生成一个对应的Keychain Groups,以及一个entitlements文件,文件里会有一个Keychain Access Groups,这里存储了所有想要共享部分Keychain数据的App对应的keychain groups的ID,默认第一项名为“(teamID).你的bundleID”。这个(teamID)就是你开发者账号的teamID,xcode之前的版本也写做${AppIdentifierPrefix}。

那么怎么获取这个teamID,从而避免硬编码呢。示例代码如下:

OC

/** 获取TeamID,又名AppIdentifierPrefix  */
+ (NSString *)teamID
{
    NSDictionary *query = @{(id)kSecClass:(id)kSecClassGenericPassword,
                            (id)kSecAttrAccount:@"bundleSeedID",
                            (id)kSecAttrService:@"",
                            (id)kSecReturnAttributes:(id)kCFBooleanTrue
    };
    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 = [(__bridge NSDictionary *)result objectForKey:(id)kSecAttrAccessGroup];
    NSArray *components = [accessGroup componentsSeparatedByString:@"."];
    NSString *teamID = [[components objectEnumerator] nextObject];
    CFRelease(result);
    return teamID;
}

Swift

    func teamID() -> String {
        let unknown = "unknown"
        let query = NSDictionary(dictionaryLiteral:(kSecClass,kSecClassGenericPassword),
                                 (kSecAttrAccount,"bundleSeedID"),
                                 (kSecAttrService,""),
                                 (kSecReturnAttributes,kCFBooleanTrue as Any)
        )
        var result:CFTypeRef?
        var status = SecItemCopyMatching(query, &result)
        if status  == errSecItemNotFound{
            status = SecItemAdd(query, &result)
        }
        if status != errSecSuccess{
            return unknown
        }
        let accessGroup:String = result?.object(forKey: kSecAttrAccessGroup)! as! String
        let components = accessGroup.components(separatedBy: ".")
        let teamID = components.first!
        return teamID
    }

PS

Keychain 中默认的accessGroup为:teamID.bundleID,例如:39E8LGDFGR.com.company.test

相关文章

  • 查看TeamID

    问题:当我们在注册第三方账号时候,会用到TeamID,如下图 获取TeamID终端输入:security find...

  • iOS App启动优化:动态库手动加载

    一、前言 在介绍动态库手动加载方式之前,我们简单了解下动态库,又名共享库在iOS中是个特殊的存在,除了系统库以外,...

  • app转让及证书

    原账户:A 新账户B 1. 登录B账户获取 TeamID和AppleId 2.登录A账户进行转让操作 注:在这里...

  • 动态获取UILabel的高度和宽度

    title : 动态获取UILabel的高度和宽度category : IOS零碎知识点 在使用UILabel存放...

  • iOS中Runtime常用示例

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • iOS-Runtime

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • IOS账户转让

    1.获取新账户的TeamID 2.打开老账户并点击"转让App"按钮 4.跳入成功转让信息界面 5.跳入成功转让协...

  • iOS Cell动态行高

    在iOS开发中,cell动态行高的设置无疑很让人抓狂,本文在此分享一个cell行高的动态获取方法;首先,本文介绍的...

  • iOS开发之控件封装(又名拧螺丝):排序按钮

    iOS开发之控件封装(又名拧螺丝):排序按钮 iOS开发之控件封装(又名拧螺丝):排序按钮

  • runtime基础

    目前我所了解的Runtime内容大约有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法...

网友评论

      本文标题:iOS 动态获取TeamID(又名AppIdentifierPr

      本文链接:https://www.haomeiwen.com/subject/scxzydtx.html