XCFramework從0到發(fā)布到Cocoapod

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

WechatIMG113.jpeg

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~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唯袄,一起剝皮案震驚了整個濱河市弯屈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恋拷,老刑警劉巖季俩,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梅掠,居然都是意外死亡酌住,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門阎抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酪我,“玉大人,你說我怎么就攤上這事且叁《伎蓿” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欺矫。 經(jīng)常有香客問我纱新,道長,這世上最難降的妖魔是什么穆趴? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任脸爱,我火速辦了婚禮,結(jié)果婚禮上未妹,老公的妹妹穿的比我還像新娘簿废。我一直安慰自己,他們只是感情好络它,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布族檬。 她就那樣靜靜地躺著,像睡著了一般化戳。 火紅的嫁衣襯著肌膚如雪单料。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天点楼,我揣著相機與錄音扫尖,去河邊找鬼。 笑死盟步,一個胖子當(dāng)著我的面吹牛藏斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播却盘,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼狰域,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了黄橘?” 一聲冷哼從身側(cè)響起兆览,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎塞关,沒想到半個月后抬探,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡帆赢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年小压,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椰于。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡怠益,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘾婿,到底是詐尸還是另有隱情蜻牢,我是刑警寧澤烤咧,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站抢呆,受9級特大地震影響煮嫌,放射性物質(zhì)發(fā)生泄漏抱虐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一宝泵、第九天 我趴在偏房一處隱蔽的房頂上張望好啰。 院中可真熱鬧轩娶,春花似錦鳄抒、人聲如沸椰弊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至清焕,卻和暖如春并蝗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秸妥。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工滚停, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥惧。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓键畴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親突雪。 傳聞我的和親對象是個殘疾皇子起惕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容