Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:如何检索代码签名标识符_Ios_Code Signing - Fatal编程技术网

iOS:如何检索代码签名标识符

iOS:如何检索代码签名标识符,ios,code-signing,Ios,Code Signing,出于诊断目的,有时希望能够读取正在运行的应用程序的代码签名标识符 此信息存在于应用程序包中的embedded.mobileprovision文件中,如下所示: <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>AppID

出于诊断目的,有时希望能够读取正在运行的应用程序的代码签名标识符

此信息存在于应用程序包中的
embedded.mobileprovision
文件中,如下所示:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AppIDName</key>
    <string>Happy</string>
    <key>ApplicationIdentifierPrefix</key>
    <array>
    <string>7YCRDE64W6</string>
    </array>

AppIDName
高兴的
ApplicationIdentifierPrefix
7YCRDE64W6

什么代码片段可以用来读取这些信息?

以下是Objective-C代码,它可以为我们完成这项工作:

-(NSString*_Nullable)codeSignId
{
    NSString *provisPath = [[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil];
    NSData *provisData = [NSData dataWithContentsOfFile:provisPath];

    NSData *tokApplicationIdentifierPrefix = [@"ApplicationIdentifierPrefix" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *tokStringStart = [@"<string>" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *tokStringEnd = [@"</string>" dataUsingEncoding:NSUTF8StringEncoding];
    #define RangeOK(rng) rng.location != NSNotFound
    NSUInteger len = provisData.length;

    NSRange range1 = [provisData rangeOfData:tokApplicationIdentifierPrefix options:0 range:NSMakeRange(0, len)];
    if (RangeOK(range1)) { //found ApplicationIdentifierPrefix
        NSRange range2 = [provisData rangeOfData:tokStringStart options:0 range:NSMakeRange(range1.location, len-range1.location)];
        if (RangeOK(range2)) { //found <string>
            NSRange range3 = [provisData rangeOfData:tokStringEnd options:0 range:NSMakeRange(range2.location, len-range2.location)];
            if (RangeOK(range3)) { //found </string>
                NSString *appIdPrefix = [[NSString alloc] initWithData:[provisData subdataWithRange:NSMakeRange(range2.location+8, range3.location - range2.location -8)] encoding:NSUTF8StringEncoding];
                return appIdPrefix;
            }
        }
    }
    return nil;
}
-(NSString*_Nullable)代码签名
{
NSString*ProvisionPath=[[NSBundle mainBundle]pathForResource:@“embedded.mobileprovision”,类型为nil];
NSData*ProvisitData=[NSData dataWithContentsOfFile:ProvisitPath];
NSData*tokApplicationIdentifierPrefix=[@“ApplicationIdentifierPrefix”数据使用编码:NSUTF8StringEncoding];
NSData*tokStringStart=[@“数据使用编码:NSUTF8StringEncoding];
NSData*tokStringEnd=[@“数据使用编码:NSUTF8StringEncoding];
#定义范围OK(rng)rng.location!=NSNotFound
NSU整数len=provisionData.length;
NSRange range 1=[provisionData rangeOfData:tokApplicationIdentifierPrefix选项:0范围:NSMakeRange(0,len)];
如果(RangeOK(range1)){//找到ApplicationIdentifierPrefix
NSRange range 2=[provisionData rangeOfData:tokStringStart选项:0范围:NSMakeRange(range1.location,len-range1.location)];
如果(RangeOK(range2)){//找到
NSRange range 3=[provisionData rangeOfData:tokStringEnd选项:0范围:NSMakeRange(range2.location,len-range2.location)];
如果(RangeOK(range3)){//找到
NSString*appIdPrefix=[[NSString alloc]initWithData:[ProvisiData subdataWithRange:NSMakeRange(range2.location+8,range3.location-range2.location-8)]编码:NSUTF8StringEncoding];
返回appIdPrefix;
}
}
}
返回零;
}
编辑


我刚刚了解到,有时文件
embedded.mobileprovision
包含
ApplicationIdentifierPrefix
TeamIdentifier
的不同值。我很高兴了解这两者之间的区别。

以下是Objective-C代码,它可以为我们完成这项工作:

-(NSString*_Nullable)codeSignId
{
    NSString *provisPath = [[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil];
    NSData *provisData = [NSData dataWithContentsOfFile:provisPath];

    NSData *tokApplicationIdentifierPrefix = [@"ApplicationIdentifierPrefix" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *tokStringStart = [@"<string>" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *tokStringEnd = [@"</string>" dataUsingEncoding:NSUTF8StringEncoding];
    #define RangeOK(rng) rng.location != NSNotFound
    NSUInteger len = provisData.length;

    NSRange range1 = [provisData rangeOfData:tokApplicationIdentifierPrefix options:0 range:NSMakeRange(0, len)];
    if (RangeOK(range1)) { //found ApplicationIdentifierPrefix
        NSRange range2 = [provisData rangeOfData:tokStringStart options:0 range:NSMakeRange(range1.location, len-range1.location)];
        if (RangeOK(range2)) { //found <string>
            NSRange range3 = [provisData rangeOfData:tokStringEnd options:0 range:NSMakeRange(range2.location, len-range2.location)];
            if (RangeOK(range3)) { //found </string>
                NSString *appIdPrefix = [[NSString alloc] initWithData:[provisData subdataWithRange:NSMakeRange(range2.location+8, range3.location - range2.location -8)] encoding:NSUTF8StringEncoding];
                return appIdPrefix;
            }
        }
    }
    return nil;
}
-(NSString*_Nullable)代码签名
{
NSString*ProvisionPath=[[NSBundle mainBundle]pathForResource:@“embedded.mobileprovision”,类型为nil];
NSData*ProvisitData=[NSData dataWithContentsOfFile:ProvisitPath];
NSData*tokApplicationIdentifierPrefix=[@“ApplicationIdentifierPrefix”数据使用编码:NSUTF8StringEncoding];
NSData*tokStringStart=[@“数据使用编码:NSUTF8StringEncoding];
NSData*tokStringEnd=[@“数据使用编码:NSUTF8StringEncoding];
#定义范围OK(rng)rng.location!=NSNotFound
NSU整数len=provisionData.length;
NSRange range 1=[provisionData rangeOfData:tokApplicationIdentifierPrefix选项:0范围:NSMakeRange(0,len)];
如果(RangeOK(range1)){//找到ApplicationIdentifierPrefix
NSRange range 2=[provisionData rangeOfData:tokStringStart选项:0范围:NSMakeRange(range1.location,len-range1.location)];
如果(RangeOK(range2)){//找到
NSRange range 3=[provisionData rangeOfData:tokStringEnd选项:0范围:NSMakeRange(range2.location,len-range2.location)];
如果(RangeOK(range3)){//找到
NSString*appIdPrefix=[[NSString alloc]initWithData:[ProvisiData subdataWithRange:NSMakeRange(range2.location+8,range3.location-range2.location-8)]编码:NSUTF8StringEncoding];
返回appIdPrefix;
}
}
}
返回零;
}
编辑

我刚刚了解到,有时文件
embedded.mobileprovision
包含
ApplicationIdentifierPrefix
TeamIdentifier
的不同值。我很高兴了解这两者之间的区别