环境:xcode13以上
打包framework静态库
工程配置修改
1、Dead Code Stripping:NO
2、Link with Standard Libraries:NO
3、Build Active Architecture Only修改为NO
4、Mach-O Type:Relocatable Object File
5、-compatibility_version 1 删除1
6、-current_version 1 删除1
7、Target->BuildSetting->Architectures->Excluded Architectures 展开 添加Any iOS Simulator SDK,在Any iOS Simulator SDK 后面添加arm64。
8、lipo -create <第一个库的路径> <第二个库的路径> -output <合并后库的路径>
<第一个库的路径> 示例 /Users/Desktop/WatyMethod.framework/WatyMethod
- 公布开放的头文件,在.h中导入头文件
- 编译后包的位置:xcode-菜单栏-product-show build finder in folder
- Xcode 12以后模拟器编译生成的framework中也会包含arm64,因此在合并的时候就会出现have the same architectures (arm64) and can't be in the same fat output file的报错。处理方式就是在Any iOS Simulator SDK 后面添加arm64
打包framework动态库
如果项目中引用了两个静态库A、B。并且B中也引用了A,那么此时运行就回报错,重复定义,解决方式可以给B打包动态库
步骤和上面静态库一样,区别在于:
- 需要添加系统库libSystem.tbd
- Mach-O Type:Dynamic Library
- 合并模拟器和真机库的时候,不能使用lipo -create方式,需要使用
xcodebuild -create-xcframework -framework <第一个库的路径> -framework <第二个库的路径> -output <库名称.xcframework>
<第一个库的路径>示例 /Users/Desktop/WatyMethod.framework
- xcframework使用和framework一样,直接拖入工程即可
- 如果不需要合并真机和模拟器,只需要使用真机的话,可以直接将编译好的动态库真机版本framework拖入工程,同时使用的时候,配置下工程:target-general-Frameworks,Libraries,and Embedded Content 里面设置动态库为Embed & Sign。否则运行闪退
Library not loaded: @rpath/WatyMethod.framework/WatyMethod
Referenced from: /private/var/containers/Bundle/Application/89BD7ED4-2712-459D-A18A-1AE25AF46B87/TempPro.app/TempPro
Reason: tried: '/private/var/containers/Bundle/Application/89BD7ED4-2712-459D-A18A-1AE25AF46B87/TempPro.app/Frameworks/WatyMethod.framework/WatyMethod' (no such file), '/private/var/containers/Bundle/Application/89BD7ED4-2712-459D-A18A-1AE25AF46B87/TempPro.app/Frameworks/WatyMethod.framework/WatyMethod' (no such file), '/System/Library/Frameworks/WatyMethod.framework/WatyMethod' (no such file)