阅读 1685

Xcode真机调试中活久见的BUG——【code signature invalid for Framework】

前言

因为疫情的原因,春节至今只能在家用自己的非付费开发人员账号进行真机调试,从而发现这个问题,新建的简单项目一直无法进行真机调试,断断续续卡了我好几天。

关键词:

dyld: Library not loaded: @rpath/xx.framework/xxcode signature invalid for xx.framework

遇到错误的共同条件:

  • 真机调试
  • Xcode 11.3.1 + iOS 13.3.1
  • 非付费开发人员账号和证书
  • 使用Cocoa Pods引入过第三方framework

场景:

满足上述条件下,无论是老项目还是新建一个OC/Swift的空白项目,在模拟器上可以正常运行;但是当使用真机进行调试时,Xcode直接奔溃,控制台输出如上图

解决

依据关键词dyld: Library not loaded: @rpath/xx.framework/xx搜索,大部分的解答都认为是没有找到对应框架,需要嵌入操作(embed),然后进行过如下几种尝试:

  1. cmd + shift + k清理工程

  2. 清空/Users/xx/Library/Developer/Xcode/DerivedData目录

  3. general – embeded binaries 嵌入文件(这一步由于Xcode11的更新,新的做法如下图)

  4. 在 Build Phases 里添加 Copy Files

  5. 修改mach-O Type中的Dynam Library为Static Library

  6. 在keychain中将使用的调试证书的信任改为“使用系统默认”

  7. 重装rvm、Cocoa Pods、Xcode

但以上所有的方式皆未解决问题,于是改变思路为搜索code signature invalid for xx.framework,终于在苹果开发者论坛找到相关提问,并一路链接到GitHub上几个开源框架的issues(flutter和Alamofire无故中招😂)和Stack Overflow,最终找到:

code signature invalid for Framework

Running iOS apps causes runtime error for frameworks “code signature invalid”

App crashes on iPhone but works fine with android emulator, android device and iOS simulator

简单来说,新版Xcode和iOS系统,在当我们使用非付费开发人员账号时,都有概率对嵌入的动态库发生无效签名。而解决的方式有:

  • 有条件的话,清理非付费开发人员账号生成的证书与配置文件,改为付费人员对应的证书
  • 打开Cocoa Pods的Podfile文件,注释掉use_frameworks!
  • 在Podfile文件中添加一句use_modular_headers!
  • 执行pod deintegrate+pod install重新配置一次第三方库