XCFramework 從0到發(fā)布
- 蘋果官方解釋
An XCFramework makes it possible to bundle a binary framework or library for multiple
platforms —including iOS devices, iOS simulators, and Mac Catalyst — into a single distributable
.xcframework bundle that your developers can use within their own applications. An
.xcframework bundle can be added to an Xcode target’s Link Libraries phase and Xcode uses the
right platform’s version of the included framework or library at build time. Creation of
frameworks is supported from the command line using xcodebuild -create-xcframework.
Frameworks or libraries bundled in an XCFramework should be built with the Build Libraries for
Distribution build setting set to YES
流程
1.創(chuàng)建Framework工程嵌灰,編寫測試代碼
2.Framework工程配置
3.Framework打包
4.本地化測試
5.Git倉庫配置
6.本地Pod倉庫配置
7.發(fā)布到CocoaPod
創(chuàng)建工程
1.選擇Framework
2.起名??
3.配置iOS Deployment Target
,此處我設(shè)置為 13.0
4.編寫測試代碼,測試代碼我們會使用
Cocoapods
引入 Alamofire
三方庫的依賴,更加貼合實際的開發(fā)份名。OK,至此我們名為 YYNetStatusTest
的SDK就建立好了桐罕。
項目配置
1.配置 Buid Libraries for Distribution = YES
YYNetStatusTest
- 用到的所有第三方SDK也需要配置其馏,此處我們用到的是
Alamofire
2.配置 Buid Configuration = release
虐唠,下方的shared確保已經(jīng)勾選
Framework 打包
1.終端進入到工程根目錄下蓝晒,創(chuàng)建文件夾archives
2.執(zhí)行以下代碼打真機包(ABC為你的工程名稱)贷痪,因為本工程是用到了Cocoapod
幻妓,因此需要加上 -workspace ABC.xcworkspace
否則會找不到用到的三方庫Alamofire
xcodebuild archive \
-workspace ABC.xcworkspace \
-scheme ABC \
-sdk iphoneos \
-archivePath "./archives/ios_devices.xcarchive" \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
SKIP_INSTALL=NO
3.執(zhí)行以下代碼打包模擬器包
xcodebuild archive \
-workspace ABC.xcworkspace \
-scheme ABC \
-sdk iphonesimulator \
-archivePath "./archives/ios_simulators.xcarchive" \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
SKIP_INSTALL=NO
4.執(zhí)行以下代碼合并剛剛打好的兩個包
xcodebuild -create-xcframework \
-framework ./archives/ios_devices.xcarchive/Products/Library/Frameworks/ABC.framework \
-framework ./archives/ios_simulators.xcarchive/Products/Library/Frameworks/ABC.framework \
-output archives/ABC.xcframework
5.最終得到的ABC.xcframework
即為我們需要的包(此處亦可以將上面的代碼放到一個腳本文件中,方便后續(xù)更新使用)
本地化測試
1.新建測試工程劫拢,名字隨意
2.將打包好的ABC.framework
拖入新建好的工程中
3.command + B 編譯肉津,此時會報錯强胰。是因為我們的xcframework
用到了三方庫 Alamofire
,此時需要我們使用 Cocoapod
進行三方庫的安裝
4.安裝成功后妹沙,測試模擬器和真機偶洋,編譯通過,然后運行測試工程距糖。不出意外的出意外了玄窝,如下圖所示。Symbol not found ...
5.(4)中的解決方法就是悍引,將我們測試工程中安裝的Alamofire
也要將 Build Libraries for Distribution
選項設(shè)置為 YES
6.再次運行哆料,發(fā)現(xiàn)控制臺已經(jīng)可以正常打印我們封裝的xcframework
中打印的內(nèi)容。至此吗铐,本地化測試已經(jīng)完成
接下來我們將演示如何將我們封裝好的庫Push
到遠(yuǎn)程的Cocoapod
庫东亦,供其他人使用
Git 倉庫配置
1.進入到Github
,新建一個git倉庫唬渗,配置倉庫名稱為我們的framework
名稱典阵,倉庫的權(quán)限根據(jù)自己需要設(shè)置為公開或者私有。
2.其他配置镊逝,此處需要選擇license
壮啊,我選擇的 MIT
。進行此處配置的原因不再贅述撑蒜,詳細(xì)信息可自行搜索歹啼。
3.點擊創(chuàng)建倉庫,完成座菠。
本地Pod倉庫配置
1.將上一步創(chuàng)建好的Git倉庫克隆到本地狸眼,因為我們的git倉庫和xcframework名稱一致,所以可以選擇新建一個文件夾保存我們的倉庫
2.將之前打包好的xcframework
(打包在archives文件夾下面的包)浴滴,拖入到新克隆下來的工程根目錄下
3.終端進入xcframework
同級目錄下拓萌,創(chuàng)建pod工程配置文件。
pod spec create XXX
4.創(chuàng)建成功之后升略,xcframework
同級目錄會生成一個xxx.podsepc
的文件
5.打開創(chuàng)建好的xxx.podsepc
文件微王,會發(fā)現(xiàn)里面東西一大堆,都是用來配置倉庫信息的(好在有注釋品嚣,可以看懂)本文中只對用到的信息進行配置及解釋炕倘,其他的詳細(xì)信息請自行搜索,可以直接拷貝本文中的配置到你創(chuàng)建的 xxx.podsepc
中進行修改翰撑。
Pod::Spec.new do |s|
# 倉庫名稱
s.name = "YYNetStatusTest"
# 倉庫版本
s.version = "1.0.0"
# 描述
s.summary = "test"
# 描述
s.description = <<-DESC
test desc
DESC
# 倉庫主頁
s.homepage = "https://github.com/ChuanqingYang/YYNetStatusTest"
# 證書信息罩旋,創(chuàng)建倉庫時選擇的
s.license = { :type => "MIT", :file => "LICENSE" }
# 作者信息
s.author = { "ChuanqingYang" => "15318119557@163.com" }
# 開發(fā)平臺,當(dāng)時我們設(shè)置的是13.0
s.ios.deployment_target = '13.0'
# 我們用到的swift版本
s.swift_version = '5.0'
# git倉庫地址
s.source = { :git => 'https://github.com/ChuanqingYang/YYNetStatusTest.git', :tag => s.version }
# 封裝的framework名稱
s.ios.vendored_frameworks = 'YYNetStatusTest.xcframework'
# 封裝的framework依賴的第三方庫
s.dependency 'Alamofire'
# 如果還有其他的依賴,依次添加即可
# s.dependency 'ObjectMapper'
# 工程配置
s.user_target_xcconfig = { 'BUILD_LIBRARY_FOR_DISTRIBUTION' => 'YES' }
s.pod_target_xcconfig = { 'BUILD_LIBRARY_FOR_DISTRIBUTION' => 'YES' }
end
6.xxx.podsepc
文件配置完成之后瘸恼,接下來我們要進行pod倉庫配置的驗證劣挫,驗證成功后會出現(xiàn)提示
pod lib lint --allow-warnings --verbose
7.接下來我們便可以將我們的代碼push到倉庫啦
git add .
git commit -a -m "test"
git push
8.push 成功之后需要對我們的倉庫進行git tag
的push册养,此處的tag需要和我們在xxx.podspec
文件中設(shè)置的version
保持一致
git tag "1.0.0"
git push --tags
9.接下來就可以執(zhí)行以下命令將我們的pod
倉庫push到遠(yuǎn)程啦东帅,若是第一次進行此項目的創(chuàng)建,會讓你進行trunk
的注冊球拦,注冊成功之后再次執(zhí)行push命令
- trunk注冊
pod trunk register 郵箱 用戶名
創(chuàng)建成功之后可以使用 pod trunk me
查看信息
- push靠闭,注意要在我們的
xcframework
文件目錄下執(zhí)行此命令
pod trunk push *.podspec --allow-warnings
耐心等待一下....
此時會對我們配置的xxx.podspec
文件進行驗證,若出現(xiàn)問題可以直接根據(jù)提示的錯誤信息進行更正坎炼。
出現(xiàn)下面的提示后即表示我們已經(jīng)push成功了愧膀!
如果你的網(wǎng)絡(luò)不是特別穩(wěn)定的話可能會出現(xiàn) time out
超時的情況,多試幾次即可谣光。
10.接下來進行線上的驗證檩淋,新建一個工程驗證,在Podfile
中引入我們上傳的pod庫萄金,執(zhí)行安裝命令后可能會出現(xiàn)找不到我們倉庫的錯誤提示(推測應(yīng)該是還沒有完全同步完成)蟀悦,不過我們可以通過指定git
倉庫地址的方式進行安裝
pod 'YYNetStatusTest', :git => 'https://github.com/ChuanqingYang/YYNetStatusTest.git'
執(zhí)行 pod install
發(fā)現(xiàn) Alamofire
也已經(jīng)自動添加到我們的項目中
11.運行項目,若出現(xiàn)了和本地測試中一樣的問題氧敢,直接去做修改即可
Finally
筆記時間:2022年08月22日日戈,本文書寫時,筆者從頭至尾重新做了一遍孙乖,相信只要按照筆者的流程和代碼進行書寫浙炼,一定是可以成功的~
文章中若有不妥的地方,還忘留言指出~
Happy Coding~