iOS framework之Embed、Signing
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS framework之Embed、Signing相关的知识,希望对你有一定的参考价值。
参考技术A当我们点击xcode工程的target时,可以看到在Build Phases一样看到framework可选的状态有几种:在xcode 10及之前,有三种状态: Do Not Embed 、 Embed & Sign 和 Embed Without Signing
Embed :嵌入,用于动态库,动态库在运行时链接,所以它们需要被打进bundle里面。如何判断呢?使用终端执行:
如果返回:
态库和动态库的区别
系统的.framework是动态库,我们自己建立的.framework一般是静态库。
* Signing :只用于动态库,如果已经有签名了就不需要再签名。如何判断呢?使用终端执行:
如果返回:
ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因
碰到问题
dyld: Library not loaded: @rpath/xxx.framework/xxx
Referenced from: /var/containers/Bundle/Application/0F41980D-5091-449D-AE29-5D018E3EB554/DemoOC.app/DemoOC
Reason: image not found
enable Always Embed Swift Standard Libraries
option under Build Options,之后依然出现
尝试网上的各种办法都无效,得从根本上解决问题,查看build settings -> linking ->runpath search path为
@executable_path/Frameworks
再看Products生成的app ,显示包内容 Frameworks文件夹下确实没有xxx.framework.
而且查看xcode升级之前的工程,app包的Frameworks中有xxx.framework.
难怪运行时找不到库,那么根本办法是如何让xxx.framework编译到这个文件夹下。
实验1:新建一个swift 工程引用xxx.framework。依然碰到同样的问题,包内容Frameworks中没有xxx.framework
发现xcode升级前的工程Build Phases有Embed Frameworks这一项,而升级后新建的工程都没有这个了。贼坑。。。。
Linked Binary With Libraries 与 Embedded Framework的区别:前者不会拷贝到 App 里的,Embedded Framework会拷贝到 App 里。
在General 下找到了Embed Frameworks ,添加xxx.framewok之后,OK了!!
而且也不需要enable Always Embed Swift Standard Libraries
以上是关于iOS framework之Embed、Signing的主要内容,如果未能解决你的问题,请参考以下文章
iOS加载framework时出现 Library not loaded:XXX.framework; reason:image not found
iOS加载framework时出现 Library not loaded:XXX.framework; reason:image not found
运行自定义 shell 脚本 '[cp] embed pods frameworks' 没有这样的文件或目录
ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因