如何使用CocoaPods製作私有庫
theme: geek-black
「這是我參與2022首次更文挑戰的第2天,活動詳情查看:2022首次更文挑戰」。
前言
在前面的章節中有介紹過CocoaPods
的使用:
此篇文章會着重介紹下製作過程以及記錄過程遇到的一些問題和解決辦法。
製作過程
首先,我們要先了解整個製作過程,這樣我們來快速的瞭解下製作的整體流程,以便於我們在後面的製作中有一個清晰的步驟。
- 創建私有的源倉庫 (如果已經存在源倉庫,忽略此步)
- 創建私有的
Pod
倉庫 - 添加私有庫源文件 (添加代碼、資源、包等等)
- 修改
.podSpec
文件 - 驗證
.podSpec
文件 - 提交代碼至遠程倉庫
- 推送
.podSpec
文件
創建私有的源倉庫
1.在遠端倉庫中,創建一個源索引庫PodSpecs
。 (遠端倉庫可以選擇github
、gitlab
、碼雲
)
2.將遠端索引庫添加到本地源中(使用終端輸入以及命令)
/**
pod repo add [repoName] [source]
*/
pod repo add component https://github.com/component/specs.git
創建私有的Pod
倉庫
1.在遠端倉庫中,創建一個源代碼pod
庫。 注意⚠️:這裏先不着急關聯到本地;
2. 選擇一個目錄下,創建本地Pod
庫工程。
/**
pod lib create Pod庫名
*/
pod lib create RTCComponent
執行完成後,命令行會有一系例的問題,按需填寫即可;
```
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide: - https://guides.cocoapods.org/making/using-pod-lib-create.html ( hold cmd and double click links to open in a browser. )
What platform do you want to use?? [ iOS / macOS ]
iOS
What language do you want to use?? [ Swift / ObjC ]
Swift
Would you like to include a demo application with your library? [ Yes / No ]
yes
Which testing frameworks will you use? [ Quick / None ]
none
Would you like to do view based testing? [ Yes / No ]
no
`` 命令執行完後會幫我們創建一個Workspace,裏面包含了兩個Project,
RTCComponent是我們Pod庫的運行Demo工程;
Pods`是我們開發庫的代碼工程。
添加私有庫源文件
我們可以在Pods/Development Pods/RTCComponent
目錄下導入我們的代碼文件或者framework。在這一步就是將我們代碼以及資源文件都放置到項目中,導入的文件以及資源目錄後面需要在.podSpec
文件中配置, 這裏就不過多説明。
修改.podSpec
文件
```
Pod::Spec.new do |s|
s.name = 'RTCComponent'
s.version = '0.1.0'
s.summary = '組件'
s.description = 'xxxxxxxxxxxxxxxxx'
s.homepage = 'http://xxxx/component'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }.
s.author = { 'xxxxxxxx' => '[email protected]' }
s.source = { :git => 'http://xxxx/component/RTCComponent.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/
# 這裏是源文件的路徑 s.source_files = 'RTCComponent/Classes/*/'
# 這裏是資源文件的路徑 # s.resource_bundles = { # 'RTCComponent' => ['RTCComponent/Assets/.png'] # } # 這裏是頭文件的路徑 # s.public_header_files = 'Pod/Classes//.h'
# 如果導入了framework s.frameworks = 'OpenAL', 'Accelerate'
# 如果依賴了library(記得把lib前綴,以及.tbd去掉) s.libraries = 'sqlite3', 'resolv', 'c++', 'z'
# 如果依賴了三方pod庫 s.dependency 'HandyJSON', '~> 5.0.2' s.dependency 'TXLiteAVSDK_Professional', '~> 8.9.10382' s.dependency 'SwiftyBeaver', '~> 1.9.3' # Log s.dependency 'SwifterSwift/SwiftStdlib'
# 如果需要修改pod中的target設置,寫在這裏 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64', 'ENABLE_BITCODE' => 'NO' } # s.user_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' } end ``` 這裏如果需要設置請參照 CocoaPods官網文檔
驗證.podSpec
文件
cd到該目錄下;執行以下操作: ``` /* 網絡校驗 / pod spec lint
/ 本地校驗 */
pod lib lint
``
常用附加處理:
- 查看詳細信息,請在命令後加入
--verbose- 忽略警告,請在命令後加入
--allow-warnings- 使用本地庫,請在命令後加入
--use-libraries- 檢查所有問題,請在命令後加入
--no-clean- 依賴了私有庫,需要添加源,請在命令後加入
--sources=(**注意:如果依賴了公有庫,還需要添加公有庫源:
https://github.com/CocoaPods/Specs即
--sources=私有庫名,https://github.com/CocoaPods/Specs`)
提交代碼至遠程倉庫
將本地pod
庫工程提交推送到遠程倉庫,打上Tag發佈。
1.提交本地倉庫,並推送
/** cd Pod工程目錄 */
cd PodProject
/** git commit -m "提交信息" */
git commit -m "commit"
/** git branch -M 分支 */
git branch -M main
/** git remote add origin git倉庫地址 */
git remote add origin https://github.com/XXXX.git
/** git push -u origin 分支 */
git push -u origin main
2.打上Tag發佈
/** 新建tag git tag [tagName] */
git tag "0.0.1"
/** 推送單個tag至遠端 git push origin [tagName] */
git push origin "0.0.1"
/** 推送本地所有tag git push origin --tags */
git push origin --tags
推送.podSpec
文件
檢查下本地repo
,如果有,繼續下一步,反之,則重新在添加一次(pod repo add [name] [源倉庫git地址]
);
pod repo list
本地倉庫檢查無誤後,開始將創建的Pod
庫中的.podspec
文件推送至指定源倉庫;
首先,還是cd
到.podspec
文件的目錄下,執行以下操作:
/** 推送命令: pod repo push [repoName] [name].podspec */
pod repo push component RTCComponent.podspec
到這裏所有流程已經完成;整個過程中的驗證過程可能是最容易出問題的,如果驗證通過,那麼發佈就不會有什麼問題,所以如果驗證沒有通過的話,發佈也是不會成功的;
文章的最後,我會把製作過程中所遇到的問題一一彙總。(後續如果有遇到的其他問題,也會在這裏更新)
問題彙總(Error)
- 問題1: 校驗失敗
** BUILD FAILED ** The following build commands failed: CompileSwift normal x86_64 CompileSwiftSources normal i386 com.apple.xcode.tools.swift.compiler CompileSwift normal i386 CompileSwift normal arm64 (4 failures) Testing with `xcodebuild`.
解決辦法:在.podspec
文件中加入;參考iOS 指令集架構s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }
- 問題2: 組件中依賴的第三方庫中有framework或者.a文件, pod install 報錯
target has transitive dependencies that include statically linked binaries:
解決辦法: 在podfile文件中加入以下代碼;pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {} end
- 問題3: Xcode setting ENABLE_BITCODE
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
解決辦法:將target下ENABLE_BITCODE
設置為 NO
參考文檔:
- LeetCode 初級算法之數組(上),看看你都學會了嗎?
- LeetCode 初級算法之鏈表,看看你都學會了嗎?
- LeetCode 初級算法之字符串(上),看看你都學會了嗎?
- 純代碼佈局,也可以一樣的簡潔
- UIStackView之一問一答
- 使用UIStackView來簡化iOS的界面佈局
- 夏天來了,iOS開發者們該如何減少App耗電?(上)
- 夏天來了,App開發者們如何看待手機發燙問題?
- 聊聊iOS中UITableView複用的那些事
- 曾經經典的微信打飛機遊戲還有人記得嗎?
- iOS 原生渲染與 Flutter 有什麼區別 (上)
- 瞭解 Mach-O文件
- CocoaPods中podsepc文件設置詳解
- iOS 原生渲染與 Flutter 有什麼區別 (下)
- 簡單瞭解 iOS CVPixelBuffer (上)
- 談談 iOS 包瘦身方案
- 播放器重構的探索之路
- 如何使用CocoaPods製作私有庫
- iOS 組件化方案