關于 Cocoapods 使用

一、Podfile & .podspec 文件

1、Podfile

1.1. 什么是 pod

簡單來說,一個 pod 就是 xcode 里面的一個 dependency:

Anyway,pod 就是第三方庫的意思。一個 pod 就是指一個第三方庫。

1.2. Podfile 有什么用

Podfile 可以理解為就是一個用 ruby 寫的腳本文件。這個文件的主要功能就和 Xcode 自帶的 Swift Packages Manager (SPM)一樣 —— 用來給自己的 iOS 項目加 dependencies 的。

像圖中的第 11 行代碼,它的意思就是在?Xcode 加一個叫 PrivateMath 的 dependencies,并且和 SPM 一樣,把這個 dependencies 的 target 定為 Calculator.

其實 Podfile 還有另外一個用處,但這個在下面講 pod install 時才會提到。

1.3. 如何配置一個最基本的 Podfile

其實配置一個最基本的 Podfile 并沒有想象中那么困難,只要:

  • 指定 iOS 的版本號
  • 指定 podspecs 倉庫的遠程地址
  • 給特定的 target 加 dependencies

2、.podspec 文件

2.1. 什么是 .podspec 文件

.podspec 的全寫就是 pod specification,就是 pod 說明書。所以從后綴名就可以看出,.podspec 文件就是用來描述一個第三方庫的基本信息的;或者說 .podspec 文件存的是這個第三方庫除源代碼以外的信息(比如這個庫的作者、庫的版本、庫的源代碼的倉庫地址、庫所支持的 swift 版本……)。

以下圖 PrivateMath 這個第三方庫的 .podspec 文件舉例:

這個 .podspec 文件存的就是:

  • 這個庫的名字是 PrivateMath
  • 這個 .podspec 文件描述的是 0.3.0 版本的?PrivateMath 庫
  • PrivateMath 這個庫的首頁地址是:https://github.com/chuanzhima0415/PrivateMath
  • PrivateMath 這個庫只支持 swift 5.0 的版本
  • PrivateMath 這個庫的作者是 chuanzhima0415
  • PrivateMath 這個庫的源代碼地址是:https://github.com/chuanzhima0415/PrivateMath.git
  • PrivateMath 這個庫只支持 iOS 12.0 及以上的 iPhone 運行

2.2. 如何配置一個最基本的?.podspec 文件

在新建一個第三方庫時終端執行 pod lib create?${ 自己寫的庫的名字 } 命令后,cocoapods 會給你生成一個最基本的 .podspec 文件的模版,其中我們要改的部份就是:

  • s.summary:這個庫的大概描述
  • s.description:這個庫的詳細描述
  • s.swift_version:這個庫所適用的 swift 版本
  • s.homepage:這個庫的首頁地址
  • s.source:這個庫的源代碼的地址
  • s.ios.deployment_target:這個庫適用于 iOS 的哪個版本

但需要注意的是:

  • s.description?的內容一定要比 s.summary 的內容長很多,要不然 pod lib lint 和 pod spec lint 會過不了
  • s.source 一定要正確
  • s.homepage 選一個可以打開的網頁地址就行了
  • 一定要指定 swift_version,要不然 pod lib lint 和 pod spec lint 會過不了
  • Xcode 的 iOS app 項目里的 iphone 設備版本一定要大于等于?s.ios.deployment_target

二、podspec 倉庫

1、什么是 podspec 倉庫

看名字就知道了,podspec 倉庫就是專門存第三庫的 .podspec 文件的倉庫。注意,這個倉庫只存第三方庫的? .podspec 文件,不存第三庫的源代碼!!!

2、如何配置 podspec 倉庫

例子:假設我現在要配置一個叫 PrivateSpecs 的 podspec 倉庫,然后這個倉庫內部存有自己寫的 PrivateMath 庫的 .podspec 文件。

step1:在 github 上創建一個遠程的倉庫,名字一般為 xxxSpecs。這里的 README、證書都可以勾,但要把 visibility 設為 Private

step2:終端執行 pod repo add ${ .podspec 遠程倉庫的名字 } ?${ podspec 遠程倉庫的地址 }

step3:終端執行 pod lib create ${ 自己寫的庫的名字 }。后面會跳出多行的選擇,記住 test 的框架要選 none,然后 view 模版也選 no。選完回車后 xcode 會彈出一個模版

step4:在 pods target 下的 Development Pods/${ 自己寫的庫的名字 }/ReplaceMe 文件寫自己的庫代碼了。順便也可以把 ReplaceMe 改為自己庫的名字。

寫第三方庫的源代碼
寫第三方庫的源代碼

把 ReplaceMe 文件名改為 MathTool

step5:寫完之后還要去到 Development Pods/${ 自己寫的庫的名字 }/ Pod 目錄下配置 ${ 自己寫的庫名字 }.podspec:

  • s.description 一定要比 s.summary 要長很多(不然驗證不通過)
  • 一定要規定 s.swift_version
  • 確保 s.source 鏈接一定要正確
  • s.homepage 只要寫一個可以訪問到的 url 就行了

step6:根據 .podspec 的 source 地址在 GitHub 上建一個存庫源代碼的倉庫(README, 證書那三樣都不要勾,否則可能會有分支錯誤

step7:根據 github 的提示,把這個本地的庫項目 push 到遠程 github 存庫源代碼的那個庫

Github 提示

step8:git tag ‘0.1.0’ (tag 號碼一定要跟 .podspec 文件的 s.version 要一致!

版本是 0.1.1!!!

step9:打標簽,即終端運行:git push --tags

step10:驗證庫的源代碼,即終端執行:pod lib lint

step11:驗證庫的 .podspec 文件,即終端執行:pod spec lint

step12:把 .podspec 文件 push 到存 .podspec 的遠程倉庫中,即終端執行:pod repo push ${ 存 .podspec 文件的遠程倉庫名 } ?庫項目下的 .podspec 文件

step13:推送完成

3、如何使用 podspec 倉庫

Xcode 開了一個 app 項目后:
step1:終端執行 pod init 指令(執行完會生成 Podfile 文件)


step2:Xcode 配置 Podfile

step3:終端執行 pod install 命令

step4:打開 .xcworkspace 文件

step5:build 項目,可能會遇到?CoreStore.framework/_CodeSignature" failed: Operation not permitted 報錯,參考下文 pod install 命令介紹的第 3 點。

step6:此時可以使用第三方庫了

三、cocoapods 相關命令

1、pod init

生成 podfile 文件,然后你要在這個 podfile 文件里面寫你要加載的庫(add dependencies)。

注意:這個命令并沒有加載庫,只是要你寫要加載的依賴而已。

2、pod install

2.1. pod install 有什么用

根據 podfile 的內容把庫加載進項目中。即增加依賴,但如果重新 pod install 并不會改變庫的版本;生成 Podfile.lock(這個文件定死了庫的版本)

注意:如果你已經改變了 Podfile 的內容,在 Xcode build 項目前一定要重新執行 pod install!因為一旦改過 dependence 的獲取路徑(比如從本地路徑改為遠程地址),然后如果不執行 pod install,直接 Xcode?build 的話,因為遠程的庫源代碼沒有下載下來,所以Xcode 會找不到這個庫,于是就會報錯說找不到庫。

2.2. pod install 背后的流程

在終端執行 pod install 時,其實 cocoapods 會幫我們做這些事情:

  1. 讀取 Podfile 文件,并根據 Podfile 里指定的版本算出應該獲取這個庫的那個版本。當然,如果有 podfile.lock 文件的話,cocoapods 還會看 podfile.lock 中的版本和 Podfile 的版本是否一致,如果一致的話就算出這個庫應該下載的版本號。
  2. 如果此時的版本號本地緩存里有的話,就不用下載這個存庫源代碼的倉庫了,而是直接用緩存里的庫的源代碼。
  3. 如果緩存沒有這個版本號的話,就要遠程下載庫的源代碼了。然后下載完后把源代碼存進緩存中。
  4. 生成 Pods 項目,并生成一個 Pods.xcodeproj 的文件。以后你只能打開這個文件,因為這個文件把 iOS app 的項目跟所有 dependencies 鏈接在一起了。
  5. 生成一個 .xcworkspace 的文件。
  6. 如果沒有 podfile.lock 文件,就生成 podfile.lock 文件。

2.3. pod install 的坑:CoreStore.framework/_CodeSignature" failed: Operation not permitted?

如果執行 pod install 之后報?# CoreStore.framework/_CodeSignature" failed: Operation not permitted 錯,請不要慌張,解決方法就是 build settings -> 搜 sand boxing -> 把 Yes 改成 No。就解決了。

3、pod update

重寫 Podfile.lock ,把所有舊的版本改成新的;但不會把新的 dependencies 加載進項目,只是僅僅寫 Podfile.lock 而已。

4、pod repo list

顯示所有存 .podspec 的倉庫的名字、遠程地址、本地地址。

5、pod repo remove ${ 存 .podspec 的倉庫的名字 }

刪除 .podspec 倉庫。

6、pod search ${ 存 .podspec 的倉庫的名字 }

找特定的存 .podspec 的倉庫。

7、pod repo add ${ 存 .podspec 的倉庫的名字 }

往 pod repo list 中增加存 .podspec 的倉庫。

8、pod lib create ${ 自己寫的庫的名字 }

讓 cocoapods 給你創建一個第三方庫的模版。

9、pod cache clean --all

清空存有 pod 的源代碼的緩存。

10、pod cache list

列出緩存里所有的庫的地址、名字等信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92442.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編程速遞:2025 年巴西 Embarcadero 會議,期待您的到來

每個英雄都有一段充滿奮斗的旅程,這段旅程引領他走向榮耀,而開發者英雄的旅程是2025年巴西Embarcadero大會的重點,以慶祝Delphi成立30周年。網站現已上線巴西Embarcadero在世界上最受期待的Delphi發展英雄會議召開前90天,推出了Em…

DevOps簡單教程應用

文章目錄概念一、環境準備二、gitlab配置三、.gitlab-ci.yml文件配置概念 Devops是一個概念,就是邊開發邊測試,能夠大大提升開發效率,本文使用pycharmgitlab實現一個簡單的DevOps流程 一、環境準備 需要一個測試環境,模擬部署&…

華為流程管理體系構建與落地 之—— 業務流程規劃【附全文閱讀】

這部分內容聚焦華為業務流程管理,詳細闡述了流程規劃、設計、運營、評估與優化的具體方法和內容,為企業構建和完善流程管理體系提供了全面的指導。流程規劃分類方法:介紹 POS、OES、OMS 等分類法,如 POS 法按規劃、運營、支持劃分…

Android 項目:畫圖白板APP開發(零)——功能介紹(筆鋒,分頁,縮放,多指,硬件加速等)

一、前言 本系列將全面的介紹一些有關Android 畫圖方面的知識。筆觸功能包括:顏色、粗細、透明度、筆鋒、橡皮;繪圖功能包括:分頁、縮放、多指、撤銷恢復、筆畫加速。別看功能這么多,簡單的部分會花較少篇幅介紹,著重會…

香橙派 RK3588 部署千問大模型 Qwen2-VL-2B 推理視頻

演示視頻 香橙派RK3588部署千問大模型Qwen2-VL-2B推理視頻一、場景假設 視頻輸入為一條網絡流,利用大模型對視頻中的圖像幀進行推理。由于大模型推理耗時長,無法對每幀都進行推理,因此采用跳幀推理的方式:當推理完一幀后&#xf…

排序概念以及插入排序

一、排序基本概念1.就地排序:使用恒定的額外空間來產生輸出就地排序只是在原數組空間進行排序處理,也就是輸入的數組和得到的數組是同一個2.內部排序和外部排序:待排序數據可以一次性載入到內存中為內部排序,反之數據量過大就是外…

Webpack 核心配置與最佳實踐指南

Webpack 是現代前端工程化的核心工具,理解其配置原理和優化技巧對開發效率至關重要。 一、Webpack 基礎架構 1、核心概念關系圖 2、核心概念詳解 概念 作用 示例配置 Entry 應用入口起點 entry: ‘./src/index.js’ Output 編譯結果輸出位置 output.path: path.resolve(__d…

GISBox私有云+SaaS:安全協同的地理智能平臺

一、概述 GISBox(GIS 工具箱)是一套能夠對GIS 影像、地形、傾斜攝影進行場景編輯、切片轉化、分發服務的 GIS 工具箱。同時,GISBox還支持私有云并一鍵開啟SaaS服務。 二、什么是私有云? 私有云服務是一種為企業或組織量身定制的…

代理人工智能的隱藏威脅

代理型人工智能的自主性令人興奮,但事實并非如此。主動性越高,不可預測性就越強,這為嚴重的、往往被忽視的安全風險打開了大門。從指令劫持到數字供應鏈的連鎖故障,代理型人工智能不僅智能,而且在不受控制的情況下非常…

SonarQube 掃描多個微服務模塊

SonarQube 掃描多個微服務模塊 在使用 SonarQube/SonarCloud 掃描多個微服務模塊時,核心目標是??確保每個微服務模塊被獨立分析??,并在 SonarQube 界面中以獨立項目展示結果。以下是具體實現方案,分場景說明: ??一、前提條…

當前主流且經過市場驗證的開源 BI 系統推薦

以下是當前主流且經過市場驗證的開源 BI 系統推薦,結合技術特性、適用場景和行業實踐,為不同需求提供針對性解決方案:一、綜合型開源 BI 平臺1. Apache Superset(Apache 2.0 協議)核心優勢:全場景覆蓋&…

第05章 排序與分頁

1.排序數據 1.1 排序規則 1.2 單列排序 1.3 多列排序 2.分頁 2.1 背景 背景1:查詢返回的記錄太多了,查看起來很不方便,怎么樣能夠實現分頁查詢呢? 背景2:表里有 4 條數據,我們只想要顯示第 2、3 條數據怎么辦呢? 2.2 實現規則 分頁原理:所謂分頁顯示,就是將數據…

第4章 程序段的反復執行4.2while語句P128練習題(題及答案)

&#xff08;&#xff08;1&#xff09;閱讀程序#include <bits/stdc.h> using namespace std; //湯永紅 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分別輸入&#xff1a;0 1024 1234567890輸出…

Linux下管道的實現

1.溫故知新在上一篇博客我們知道了動態庫是怎么樣進行鏈接的&#xff0c;我們知道我們的.o文件&#xff0c;可執行文件都是我們的ELF格式的文件&#xff0c;是ELF文件&#xff0c;里面就有ELF header&#xff0c;程序頭表&#xff0c;節&#xff0c;還有節頭表&#xff0c;我們…

光貓、路由器和交換機

光貓&#xff1a;全稱為光調制解調器&#xff0c;負責光信號與電信號的轉換。在光纖入戶的網絡環境中&#xff0c;運營商通過光纖傳輸光信號&#xff0c;光貓將其轉換為電腦、路由器等設備能識別的電信號&#xff0c;反之亦然。它是用戶端與運營商網絡之間的橋梁&#xff0c;保…

從零開始理解編譯原理:設計一個簡單的編程語言

編譯原理是計算機科學的核心領域之一&#xff0c;它研究如何將高級編程語言轉換為目標機器能夠執行的代碼。對于許多開發者來說&#xff0c;編譯原理可能是一個神秘而復雜的領域&#xff0c;但實際上&#xff0c;通過系統的學習和實踐&#xff0c;我們可以逐步掌握其核心概念和…

年輕新標桿!東方心繡臉韌帶年輕技術升級發布

年輕新標桿&#xff01;東方心繡臉韌帶年輕技術升級發布近日&#xff0c;“東方心繡臉韌帶年輕品項升級發布會”圓滿落幕。本次發布會聚焦現代女性面臨的衰老困擾&#xff0c;正式推出技術升級成果——“韌帶年輕”品項&#xff0c;旨在通過更科學的方案&#xff0c;助力求美者…

qt文件操作與qss基礎

文章目錄qt文件操作文件概述文件讀寫文件屬性界面優化qss基礎選擇器的用法結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&#xff0c;Li…

spring.config.import 不存在

確認spring.config.import的語法是否正確根據Spring Cloud的官方文檔&#xff0c;該屬性的值應該指向配置信息&#xff0c;例如對于Nacos配置中心&#xff0c;其格式通常為&#xff1a;spring:config:import: nacos://<nacos-server-addr>/<data-id>?group<gro…

kettle插件-kettle MinIO插件,輕松解決文件上傳到MinIO服務器

場景&#xff1a;周二下班剛下地鐵的時候有一位大佬&#xff0c;咨詢kettle是否可以適配MinIO&#xff0c;功能要實現將圖片或者base64通過kettle直接上傳到MinIO服務器。接到需求&#xff0c;溝通需求&#xff0c;開干。經過3天左右研發和調試MinIO插件已經成功交付&#xff0…