创建动/静态库只需创建一个Framework项目,修改Mach-O Type就可以了。以下内容是记录使用动/静态库时常见的问题及解决方案。
注:可以通过配置Build Settings来定位和解决Framework项目的问题:developer.apple.com/documentati…
Swift库中包含OC代码
如果该项目是Swift项目,其中还要包含Objective-C文件,就需要将OC文件导入到该项目(库)的头文件中,如下图所示:
静态库导入问题
如果是静态库,就不能选择Embed Without Signing 或 Embed & Sign。否则真机安装不了,因为静态库不能选择嵌入(Embed),不然会有签名问题:
- 选择
Embed & Sign,报错:The code signature version is no longer supported - 选择
Embed Without Signing,报错:A valid provisioning profile for this executable was not found.
资源访问问题
如果是动态库,我们只需使用库中的某个类名,例如AdministrativeDivisions这个类。再通过Bundle(for: AdministrativeDivisions.self)方法就可以获取到动态库所在的路径。然后就可以访问该库中的资源文件了。
但是静态库是直接链接到主项目的可执行文件中的,不存在单独的路径。使用上面方法得到的是主项目的路径。这种情况下需要我们手动将资源文件拷贝到主项目中,即在Copy Bundle Resources中加入资源文件:
或者使用脚本自动拷贝到主项目中,比如cocoapods就会自动拷贝静态库的资源文件到主项目中。只需配置好podspec就行。
XCFramework
XCFramework是由Xcode创建的二进制包,其中包括为多个平台(iOS,macOS,tvOS和watchOS)构建所需的框架和库,包括模拟器构建。框架可以是静态的或动态的,还包括头文件。文档地址:developer.apple.com/documentati… 。创建步骤如下:
1. 新增一个Scheme或者Framework项目
2. 配置该Scheme或者Framework项目
Build Libraries for Distribution设置为YESSkip Install设置为NOArchitectures设置为默认值
3. 执行归档指令
将MyFramework替换成对应项目名:
xcodebuild archive \
-project MyFramework.xcodeproj \
-scheme MyFramework \
-destination "generic/platform=iOS" \
-archivePath "archives/MyFramework-iOS"
注:
- 如果报 tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance 错误。执行
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer可解决- 这只是归档iOS平台,如果还要支持模拟器平台或者Mac平台,需再执行该命令,并替换
-destination的参数分别为"generic/platform=iOS Simulator"和"generic/platform=macOS"。-archivePath也需要改下名字,分别为archives/MyFramework-iOS_Simulator和archives/MyFramework-macOS
最终结果如下图:
4. 生成XCFramework包
执行以下命令,将各个归档包合并为XCFramework包:
xcodebuild -create-xcframework \
-archive archives/XCFrameworkTest-iOS.xcarchive -framework XCFrameworkTest.framework \
-archive archives/XCFrameworkTest-iOS_Simulator.xcarchive -framework XCFrameworkTest.framework \
-archive archives/XCFrameworkTest-macOS.xcarchive -framework XCFrameworkTest.framework \
-output xcframeworks/XCFrameworkTest.xcframework
结果如下图:
file指令查看二进制文件
如上图所示,使用file指令查看XCFrameworkTest可执行文件的结果如下:
XCFrameworkTest: Mach-O 64-bit dynamically linked shared library arm64