补充一个新问题: xcode升级到12.2版本以后, 在合并模拟器和真机的静态库时报错:have the same architectures (arm64) and can't be in the same fat output file
详细报错如下:
fatal error: /Applications/Xcode.app/Contents/.../usr/bin/lipo: Release-iphoneos/xxxFramework.framework/xxxFramework and Release-iphonesimulator/xxxFramework.framework/xxxFramework have the same architectures (arm64) and can't be in the same fat output file
原因:
查看真机静态库包含的架构: arm64 armv7
查看模拟器静态库包含的架构: arm64 x86_64 i386
两个库中都有arm64架构, 冲突了, 无法合并.(以前的xcode版本打包的模拟器静态库是没有arm64框架的)
解决方法:
使用 lipo xxx -remove arm64 -output xxx
命令将其中一个静态库的arm64的架构删除, 然后再用新生成的库去合并即可
1. 新建一个framework工程

2. 暴露头文件
工程新建后会自动生成 一个 工程名.h
的头文件, 并主动暴露这个头文件. 我们新增的文件, 需要手动添加暴露出来, 打包后才会暴露到header文件夹中:

3. 四次编译
编写好静态库的代码后,需要分别编译四次:真机-debug、真机-release、虚拟机-debug、虚拟机-release。
例如: 真机-debug编译, 需要调整为debug下, 选择真机, 然后run运行, 执行完成后会在 Products文件夹中生成一个.framework文件.
4. 查看 framework支持的架构
lipo -info /Users/~省略路径~/Products/Debug-iphonesimulator/testFramework.framework/testFramework
注意: 查看framework支持的架构, 命令lipo -info
后边跟的是xxx.framework/xxx

5. 合并架构
将真机和模拟器两个framework合并(注意: 只能debug真机和模拟器合并, release真机和模拟器合并)
合并的命令是 lipo -create 真机/xxx.framework/xxx 模拟器/xxx.framework/xxx -output new路径/xxx
实际上是将真机和模拟器的 .framework 下的同名文件(比如testSDK.framework下会有一个testSDK文件)合并, 然后再将这个合并出来的testSDK文件, 替换模拟器或者真机(哪个都行)的.framework中去即可, 替换完成的.framework就是可以同时在真机和模拟器下使用的framework了
lipo -create /Users/~省略路径~/Products/Debug-iphoneos/testFramework.framework/testFramework /Users/~省略路径~/Products/Debug-iphonesimulator/testFramework.framework/testFramework -output /Users/~省略路径~/Products/Debug/testFramework.framework/testFramework

网友评论