很早以前就制作过.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框架
- 启用
Validate WorkSpace
让Xcode
对frameworks
进行自动化管理
Build Setting
->Build Options
->Validate WorkSpace
设置为YES
2.使用XCFramework
XCFramework教程
2. 合并真机和模拟器
先在桌面上创建
xxx.framework
文件夹lipo -create 真机路径文件 模拟器路径文件 -output 桌面xxx.framework/xxx
把真机文件中的
Headers
,Modules
拷贝到xxx.framework文件夹中,在把模拟器Modules
文件内容拷贝到xxx.framework中-
拆分
lipo 文件 -thin 架构(例如armv7)-output 输出路径/文件名
QQ20210823-103440.png
3. 验证是否可用
1.创建Swift的工程验证是否可以正常使用
2.创建OC的工程验证是否可以正常使用