iOS开发-创建自己的Framework、SDK
方案一:参考:最详细的Framework创建步骤
Bug - 配置完之后需要处理一下步骤
-
问题一:报错:
libxxx.a have the same architectures (arm64) and can't be in the same fat output file
:(Xcode12 之后会报这个错)XCode12之前:
编译模拟器静态库支持i386
、x86_64
两架构;
编译真机静态库支持armv7
、arm64
两架构;
使用lipo -create -output
命令可以将两个库合并成一个支持模拟器和真机i386
、x86_64
、armv7
、arm64
四种架构的胖子库。
XCode12编译的模拟器静态库也支持了arm64
,导致出现真机库和模拟器库不能合并的问题。解决方法:
- 如果有静态库工程:
需要在SDK的项目中,打开BuildSetting
->Excluded Architectures
:添加Any iOS Simulator SDK
,并赋值arm64
; - 如果手里只有.a或.framework文件:
使用lipo remove命令将模拟器库的arm64架构移除:$ lipo XXX.a -remove arm64 -output XXX.a
;
- 如果有静态库工程:
-
问题二:静态库工程编译模拟器库报错:
ld: in XXX.a(XXXXXXX.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
:这个是出在静态库工程中包含其他已经编译好的静态库,且该静态库是真机模拟器合并胖子库(支持四种架构)。
由于这个胖子库只支持真机的arm64但不支持模拟器arm64,所以出现了以上报错。
解决办法:同问题一; -
问题三:示例App跟SDK使用同一个workspace:按照方案一配置脚本,编译名为
Framework
的target
时,会报错,如下图:// 报错信息: error: /Applications/Xcode-11-7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lPods-CommonPods-DemoSDK error: /Applications/Xcode-11-7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lPods-CommonPods-DemoSDK is not an object file (not allowed in a library)
解决方法是:删除SDK下的
Frameworks
里面的libPods-xxxxx.a
,再编译即可成功但是如果更新Pod,再编译就会重新生成
libPods-xxxxx.a
,所以每次更新Pod之后,都需要再次删除libPods-xxxxx.a
;(原因未知,有知道的小伙伴可以留言分享给大家。)
-
问题四:报错:
Multiple commands produce
:
分别修改xxxAPP
、xxxSDK
、xxx.workspace
的项目设置:打开Xcode顶部菜单:File
->Workspace Settings
或Project Settings
->Build System:
改为Legacy Build System(Deprecated)
; -
问题五:项目模拟器运行报错:
building for iOS Simulator, but linking in object file built for iOS
:
在Build Settings
里User-Defined
里是否有个VALID_ARCHS
。看看是否有x86_64
架构。没有的话填上。 -
问题六:报错:
/lipo: can't open input file: libDemoSDK.a (No such file or directory)
,如下图:解决方法:SDK需要有内容,才能编译成功,随便给SDK写几个方法即可;
-
问题七: