iOS制作.framework

很早以前就制作过.framework, 这次因为需求又需要制作但是按照以前的方法制作出来的都不能正常使用,经过查资料又重新整理出一份

1. Xcode 配置一下

  • Edit Scheme -> Run -> Build Configuration 改为Release

  • TARGETS -> Build Settings -> Build Active Architecture Only 设置为 NO (NO编译支持所有版本的架构,YES只编译当前版本的架构)

  • TARGETS -> Build Settings -> Excluded Architectures -> Release 添加 Any iOS Simulator SDK 值为arm64(排除用模拟去编译时生成 arm64的架构,因为在制作.framework时合并真机和模拟器由于都有arm64架构导致失败)

  • TARGET -> Build Settings -> Linking -> Mach-O Type 修改为 Static Library(默认是 Dynamic Library)

  • Module compiled with Swift 5.1 cannot be imported by the Swift 5.1.2 compiler报错是因为编写Swift版本不一样。解决办法:Build Setting -> Build Libraries for Distribution 设置为YES否则Swift编译器不会生成必要的.swiftinterface文件,这是将来编译器能够加载旧库的关键

  • /xxxx/xxx.xcodeproj Building for iOS, but the linked and embedded framework ‘xxx.framework’ was built for iOS + iOS Simulator. (真机和模拟器合成就报这个错误)
    解决办法:
    针对类似于 iOS + iOS Simulator 这种多平台的包,强制使用XCFramework框架

  1. 启用Validate WorkSpaceXcodeframeworks进行自动化管理
    Build Setting -> Build Options -> Validate WorkSpace 设置为YES

2.使用XCFramework
XCFramework教程

2. 合并真机和模拟器

  1. 先在桌面上创建xxx.framework文件夹

  2. lipo -create 真机路径文件 模拟器路径文件 -output 桌面xxx.framework/xxx

  3. 把真机文件中的Headers, Modules拷贝到xxx.framework文件夹中,在把模拟器Modules文件内容拷贝到xxx.framework中

  4. 拆分lipo 文件 -thin 架构(例如armv7)-output 输出路径/文件名

    QQ20210823-103440.png

QQ20210823-103927.png
QQ20210823-103951.png

3. 验证是否可用

1.创建Swift的工程验证是否可以正常使用
2.创建OC的工程验证是否可以正常使用

你可能感兴趣的:(iOS制作.framework)