iOS-开发进阶06:XCFramework

iOS 开发进阶 文章汇总

目录

  • 一、XCFramework简介
  • 二、创建XCFramework
  • 参考


一、XCFramework简介

XCFramework:是2019苹果官方提出的Framework的另一种先进格式,可以更方便的表示多个平台和架构的分发二进制库的格式。
需要Xcode11以上支持。
是为更好的支持Mac CatalystARM芯片的macOS

和传统的Framework相比:

  1. 可以用单个.xcframework文件提供多个平台的分发二进制文件;
  2. 与Fat Header相比,可以按照平台划分,可以包含相同架构的不同平台的文件;
  3. 在使用时,不需要再通过脚本去剥离不需要的架构体系。

lipo指令和XCFramework
iOS lipo使用
swift framework工程下调用Objective-C或C类库

Swift framework 与 OC 混编
iOS 静态库和动态库打包framework流程(纯swift版/swift、OC混编版)

二、创建XCFramework

准备如下代码(创建Framework Project):


添加代码后编译

模拟器编译失败,真机编译成功创建的XCFramework也可以在模拟器和真机上运行

1、创建模拟器和真机平台下的Framework

build.sh中的命令如下:

xcodebuild archive -project 'SYTimer.xcodeproj' \
-scheme 'SYTimer' \
-configuration Release \
-destination 'generic/platform=iOS Simulator' \
-archivePath '../archives/SYTimer.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO

xcodebuild archive -project 'SYTimer.xcodeproj' \
-scheme 'SYTimer' \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath '../archives/SYTimer.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO

引入Pod依赖时修改如下:

xcodebuild archive -workspace MyFramework.xcworkspace \
-scheme MyFramework \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath '../archives/MyFramework.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO

三方库不支持x86_86架构时修改如下:

xcodebuild archive -project 'FFTGStickerView.xcodeproj' \
-scheme 'FFTGStickerView' \
-configuration Release \
-sdk iphonesimulator \
-arch arm64 \
-archivePath '../archives/FFTGStickerView.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO

List of destinations

执行build.sh脚本:

2、创建XCFramework

创建xcframework文件夹

cd xcframework文件夹路径

xcodebuild -create-xcframework \
-framework '../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-framework '../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-output 'SYTimer.xcframework'

一般XCFramework需要包含BitCode(Xcode Build Settings开启)和dSYMs方便崩溃时恢复调用栈,那么修改创建XCFramework的命令如下:

xcodebuild -create-xcframework \
-framework '../archives/SYTimer.framework-iphoneos.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-debug-symbols '/Users/ztkj/Desktop/创建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/1F3E7957-8302-390B-AE49-34E61B49E11E.bcsymbolmap' \
-debug-symbols '/Users/ztkj/Desktop/创建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/BCSymbolMaps/5C6DD85F-0EFE-3551-B330-5AC4A91D32ED.bcsymbolmap' \
-debug-symbols '/Users/ztkj/Desktop/创建XCFramework/archives/SYTimer.framework-iphoneos.xcarchive/dSYMs/SYTimer.framework.dSYM' \
-framework '../archives/SYTimer.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/SYTimer.framework' \
-debug-symbols '/Users/ztkj/Desktop/创建XCFramework/archives/SYTimer.framework-iphonesimulator.xcarchive/dSYMs/SYTimer.framework.dSYM' \
-output 'SYTimer.xcframework'

️注意:1、只有真机才有BitCode。2、BitCode和dSYMs的文件路径必须传绝对路径
3、lipo合并不同平台的Framework要求Framework之间不能有相同的架构

3、使用XCFramework

Xcode会根据不同的编译平台拷贝XCFramework中相应平台架构下的二进制代码


参考

Session视频地址

developer.apple.com/videos/play…

文档说明

devstreaming-cdn.apple.com/videos/wwdc…

其他第三方的资料

appspector.com/blog/xcfram…

github.com/bielikb/xcf…

juejin.im/post/684490…

你可能感兴趣的:(iOS-开发进阶06:XCFramework)