2016-12-02 133 views
3

我试图对应用程序进行存档并准备将其分发到App Store中。 在存档(这可以从Xcode的组织者被触发)的验证以下错误弹出:使用嵌套框架进行IPA验证时,代码签名失败

enter image description here

从我可以告诉我的一些框架,其中包含嵌套的框架不能codesigned。如果我删除了所有包含嵌套框架的框架,那么它就会重新开始工作。

举个例子如下框架会导致这样的错误:

enter image description here

框架正在生成使用Carthage

这里是日志输出我看到:

2016-12-02 10:16:53 +0000 Processing step: IDEDistributionCodesignStep 
2016-12-02 10:16:53 +0000 Applying entitlements delta for <IDEDistributionItem: 0x7fbc6f6e2a00 'com.hearst.ObjectMapper' '<DVTFilePath:0x7fbc530bde70:'/Users/gruener/Library/Developer/Xcode/Archives/2016-12-02/TestSubmitApp 02-12-16 11.16.xcarchive/Products/Applications/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework'>'> from <IDEiCloudEntitlementsProcessor: 0x7fbc6e036e70>: { 
} 
2016-12-02 10:16:53 +0000 Combining entitlements for <DVTFilePath:0x7fbc525ceb00:'/var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/Root/Payload/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework'> 
    bundleIdentifier = com.hearst.ObjectMapper 
    profileEntitlements = { 
} 
    storedEntitlements = { 
} 
    extraEntitlements = { 
} 
2016-12-02 10:16:53 +0000 Entitlements for <IDEDistributionItem: 0x7fbc6f6e2a00 'com.hearst.ObjectMapper' '<DVTFilePath:0x7fbc530bde70:'/Users/gruener/Library/Developer/Xcode/Archives/2016-12-02/TestSubmitApp 02-12-16 11.16.xcarchive/Products/Applications/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework'>'>: { 
} 
2016-12-02 10:16:53 +0000 Writing entitlements for <IDEDistributionItem: 0x7fbc6f6e2a00 'com.hearst.ObjectMapper' '<DVTFilePath:0x7fbc530bde70:'/Users/gruener/Library/Developer/Xcode/Archives/2016-12-02/TestSubmitApp 02-12-16 11.16.xcarchive/Products/Applications/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework'>'> to: /var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/entitlementsuaGdWl 
2016-12-02 10:16:53 +0000 Running /usr/bin/codesign '-vvv' '--force' '--sign' 'A54D9A9C895E402713C0528523674342C777C825' '--preserve-metadata=identifier,resource-rules' '--entitlements' '/var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/entitlementsuaGdWl' '/var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/Root/Payload/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework' 
2016-12-02 10:16:53 +0000 Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)! 
2016-12-02 10:16:53 +0000 /var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/Root/Payload/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework: replacing existing signature 
2016-12-02 10:16:53 +0000 /var/folders/3r/_6fw2smn4vj099_d7j2jtt0cg18svh/T/XcodeDistPipeline.bXb/Root/Payload/TestSubmitApp.app/Frameworks/Dto.framework/Frameworks/ObjectMapper.framework: invalid resource directory (directory or signature have been modified) 
2016-12-02 10:16:53 +0000 /usr/bin/codesign exited with 1 

I als o尝试用Fastlane的GYM构建IPA文件。在此它的工作原理,但是当我尝试提交应用我收到此错误:

WARNING ITMS-90686: "The binary you uploaded was invalid. (1102)" 

谷歌搜索的错误代码1102没有结果;

回答

1

我终于想通了什么问题了。

我在终端上运行了lipo info /path/to/Dto.framework/Dto,一切看起来都很好 - 不必要的架构被正确地剥离了。但仔细看看嵌套框架,我意识到这不是他们的情况。

相反,我发现在与迦太基一起工作时,您必须将链接到应用程序级别为的所有框架,并且不得将它们封装在您自己的框架中。

所以为了解决这个问题,我删除了Copy files Phase(它将所有框架复制到框架目录中)。迦太基很聪明地认识到这一点,并检查嵌套的依赖关系,并为你建立它们。您唯一需要做的就是将其添加到XCode中的链接库构建阶段。

0

您可以检查Dto.framework和ObjectMapper.framework中的架构是什么类型吗? 您可以

$ file /path/to/Dto.framework/Dto 

似乎类似于我不得不与设备和模拟器内置一些嵌入式框架问题做到这一点。仿真器拱门是通过调试构建的,并且它们不能提交给AppStore(特别适合存档的存档)。如果它们包含模拟器archs(x86_64i386),您可以使用这个博客中描述的脚本时发布版本的应用程序的剥离模拟器archs:https://gkbrown.org/2015/12/17/creating-a-universal-ios-framework-in-xcode-7/