iOS打包framework库

环境: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
  1. 公布开放的头文件,在.h中导入头文件
  2. 编译后包的位置:xcode-菜单栏-product-show build finder in folder
  3. 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打包动态库
步骤和上面静态库一样,区别在于:

  1. 需要添加系统库libSystem.tbd
  2. Mach-O Type:Dynamic Library
  3. 合并模拟器和真机库的时候,不能使用lipo -create方式,需要使用
xcodebuild -create-xcframework -framework <第一个库的路径> -framework <第二个库的路径> -output <库名称.xcframework>
<第一个库的路径>示例 /Users/Desktop/WatyMethod.framework
  1. xcframework使用和framework一样,直接拖入工程即可
  2. 如果不需要合并真机和模拟器,只需要使用真机的话,可以直接将编译好的动态库真机版本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)

你可能感兴趣的:(iOS打包framework库)