一日,同事让帮解决一个问题,问题是:App 无法在真机上运行,控制台报错:
<code class="hljs oxygene has-numbering">dyld: <span class="hljs-keyword">Library</span> <span class="hljs-keyword">not</span> loaded: @rpath/libswiftAssetsLibrary Referenced <span class="hljs-keyword">from</span>: /<span class="hljs-keyword">var</span>/mobile/Containers/Bundle/Application/<span class="hljs-number">3</span>FC2DC5C-A908-<span class="hljs-number">42</span>C4-<span class="hljs-number">8508</span>-<span class="hljs-number">1320</span>E01E0D5B/test.app/test Reason: no suitable image found. Did find: /<span class="hljs-keyword">private</span>/<span class="hljs-keyword">var</span>/mobile/Containers/Bundle/Application/<span class="hljs-number">3</span>FC2DC5C-A908-<span class="hljs-number">42</span>C4-<span class="hljs-number">8508</span>-<span class="hljs-number">1320</span>E01E0D5B/testapp.app/Frameworks/libswiftCore.dylib: mmap() errno=<span class="hljs-number">1</span> validating first page <span class="hljs-keyword">of</span> <span class="hljs-string">'/private/var/mobile/Containers/Bundle/Application/3FC2DC5C-A908-42C4-8508-1320E01E0D5B/testapp.app/Frameworks/libswiftAssetsLibrary'</span> (lldb) </code><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul><ul class="pre-numbering" style=""><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
百度了一下,主要搜到了 stackoverflow 的几篇帖子。于是参考帖子上各种招数,什么 clean、重启 Xcode/Mac,删除 DerivedData 目录,修改 target 的 “Embedded Content Contains Swift Code flag”和“Runpath Search Paths ”设置…甚至重装了 Xcode,但没一个靠谱。白白浪费了 2 个小时。
后来新建了一个工程,什么代码都不写,也是无法在真机上运行,报的错误和前面差不多的样子。
想来想去,觉得以前遇到过类似的问题,但一时想不起来了。搜了一下关键字 no suitable image found,结果搜到了一个结果,竟然是自己在去年发的老帖:苹果的又一个坑:InHouse打包后程序不能启动
这下明确了这个问题应该和证书有关。
打开同事那台 Mac 的钥匙串程序,结果让我大跌眼镜,竟然没有安装苹果根证书(Apple Worldwide Developer Relations Certification Authority)!
于是重新下载和安装了苹果根证书,问题得到解决。
注意:苹果根证书应该安装在钥匙串的”登录“下面,不要安装在“系统”下面,否则是无效的。
另外,如果开发证书(以及provisioning profile )没有更新,也会出现同样的问题,原因请参考 苹果的又一个坑:InHouse打包后程序不能启动 一文。