背景:由于业务需要维护大量逻辑相似但是又有细微不同的应用,之前采用多target构建相似App的做法,之后由于业务持续扩大,发现在一个控制器可能会存在多个判断,增加耦合度,增加后续维护难度。之后对项目进行重构,分别对两个项目采用了静态库(.a)和框架(framework)的方式来将相似逻辑抽离成为主干,差异化的地方,各自project中实现。这里说明一下,framework方式下,出现的崩溃错误dyld: Library not loaded: @rpath......
在真机运行的时候, bulid成功,但是应用在启动页面就崩溃了。出现的关键错误搜索是:
1、dyld`__abort_with_payload
2、dyld: Library not loaded: @rpath
3、Reason: no suitable image found
我发生的具体错误:
dyld: Library not loaded: @rpath/TYKYGovApprovalFramework.framework/TYKYGovApprovalFramework
Referenced from: /var/containers/Bundle/Application/CC63B6C4-AF48-4540-9E8F-501FE7F54A4E/ZhongKai.app/ZhongKai
Reason: no suitable image found. Did find:
/private/var/containers/Bundle/Application/CC63B6C4-AF48-4540-9E8F-501FE7F54A4E/ZhongKai.app/Frameworks/TYKYGovApprovalFramework.framework/TYKYGovApprovalFramework: no matching architecture in universal wrapper
显示集成主干Framework错误,苹果官方是允许集成静态库,但是不允许集成动态库,在创建Framework的时候,Xcode 首先选择的是Dynamic Library
这里改为Static Library 即可。
2018.07.01
Static Library Archive打包成功,但是Export的时候会出现如下错误:
Found an unexpected Mach-O header code: 0x72613c21
搜索出的解决方案有:
将静态库的添加从Embedded Binaries改为直接在Link Frameworks and Libraries添加。这样打包出来可以成功,但是依赖Framework的文件资源(图片和xib文件)加载不到。
后面的解决方案:
bebug模式的下的running:Framework为Static Library
Archive(release)将Framework改为Dynamic Library
(有大神有更好的请帮忙指出来,谢谢)