TestFlight测试包签名校验找不到embedded

static __attribute__((always_inline)) NSString *getTeamID() {
    // 描述文件路径
    NSString *embeddedPath = [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"];
    // 读取application-identifier  注意描述文件的编码要使用:NSASCIIStringEncoding
    NSString *embeddedProvisioning = [NSString stringWithContentsOfFile:embeddedPath encoding:NSASCIIStringEncoding error:nil];
    NSArray *embeddedProvisioningLines = [embeddedProvisioning componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

    for (int i = 0; i < embeddedProvisioningLines.count; i++) {
        if ([embeddedProvisioningLines[i] rangeOfString:@"application-identifier"].location != NSNotFound) {

            NSInteger fromPosition = [embeddedProvisioningLines[i+1] rangeOfString:@"<string>"].location+8;

            NSInteger toPosition = [embeddedProvisioningLines[i+1] rangeOfString:@"</string>"].location;

            NSRange range;
            range.location = fromPosition;
            range.length = toPosition - fromPosition;

            NSString *fullIdentifier = [embeddedProvisioningLines[i+1] substringWithRange:range];
            NSArray *identifierComponents = [fullIdentifier componentsSeparatedByString:@"."];
            NSString *appIdentifier = [identifierComponents firstObject];
            return appIdentifier;
        }
    }
    return nil;
}

在给APP做重签名校验teamID时,本地测试都正常,但是通过archive打包上传testflight后,下载的包一直报重签名校验失败,打印该方法返回null。

  1. 这是为什么呢?
  2. TestFlight测试完成后,可以直接提交审核,那正式版的APP会不会有同样问题?

求教大神解答。

线上包没有 [embedded]的

那线上包不是通过读取embedded来做签名校验的吗?

这个就有意思在这里了,别人重签不上架它就有了,你就可以校验了.

是的呢,我才发现,这个校验方法防的并不是上架的,而是被逆向后的。。

这个方法太容易被绕过了 hook判断路径让你读不到文件就可以了