【原】iOS:手把手教你發布代碼到CocoaPods(Trunk方式)

概述

關于CocoaPods的介紹不在本文的主題范圍內,如果你是iOS開發者卻不知道CocoaPods,那可能要面壁30秒了。直奔主題,這篇文章主要介紹如果把你的代碼發布到CocoaPods代碼庫中,讓別人可以使用“pod search yourOpenProject”命令查找到你的代碼。

在2014年5月20日以前,發布代碼到CocoaPods可以使用這篇文章。但時過境遷,出于安全性等方面的考慮,CocoaPods團隊放棄了該方式,使用本文要說的trunk方式,用流程圖表示如下:(圖片來自CocoaPod官方blog)

下面請跟著我的步伐一步一步往下走,我會告訴你其中的一些坑以及如何應對這些坑:

一、注冊trunk

在注冊trunk之前,我們需要確認當前的CocoaPods版本是否足夠新。trunk需要pod在0.33及以上版本,如果你不滿足要求,打開Terminal使用ruby的gem命令更新pod:

1
sudo gem install cocoapods

更新結束后,我們開始注冊trunk:

1
pod trunk?register?zilin_weng@163.com?'weng1250'??--verbose

郵箱以及用戶名請對號入座。用戶名我使用的是Github上的用戶名。--verbose參數是為了便于輸出注冊過程中的調試信息。執行上面的語句后,你的郵箱將會受到一封帶有驗證鏈接的郵件,如果沒有請去垃圾箱找找,有可能被屏蔽了。點擊郵件的鏈接就完成了trunk注冊流程。使用下面的命令可以向trunk服務器查詢自己的注冊信息:

1
pod trunk me

輸出如下信息就表示你注冊成功,可以進行下面的流程:

二、配置PodSpec

在這一部分中我們需要做兩件事:1、為你的代碼添加podspec描述文件;2、將podspec文件通過trunk推送給CocoaPods服務器

2.1?添加podspec描述文件

這一步與更換trunk方式前的操作完全一樣。什么是podspec描述文件呢?簡單地講就是讓CocoaPods搜索引擎知道你的代碼的作者、版本號、源代碼地址、依賴庫等信息的文件。任何支持CocoaPods的開源代碼都必須有podspec文件。CocoaPods在github中用一個repo來管理所有支持CocoaPods的開源代碼:https://github.com/CocoaPods/Specs。

那如何編寫podspec文件呢?官方提供了一個模板并附有非常詳細的注釋說明。關于podspec文件的編寫本文不打算詳細講。強烈建議你看這篇文章的第三節部分,第四第五節不必看因為已經過時了。

建議直接拿一些成熟的開源庫的podspec改就行,生成的模板里有很多冗余的屬性。

這里要注意一點,有時你寫的podspec文件在后面push的時候會提示"The `source_files` pattern did not match any file."錯誤,但是能用pod lib lint命令做本地校驗時又是OK的。為什么呢?上述錯誤的意思是pod在網絡上根據你指定的路徑找不到相關文件。這時候你要核對網上git倉庫的路徑與source_files(其他_files字段同理)要對應。*_files字段指的是網絡git上的路徑

?

2.2 通過trunk推送podspec文件

現在我們已經有了自己的podspec文件,但是在推送podspec文件之前你需要確認以下幾點:

1、確保你的源碼已經push到Github上。如果還沒push源代碼,可以用Terminal cd到本地源代碼的根目錄,執行:

1
2
3
git add -A
git commit -m?"first commit for version 1.0.0"
git push origin master

當然,你也可以使用SourceTree等GUI形式的Git客戶端進行代碼的推送操作。

2、確保你所push的代碼已經打上"version tag",也就是給源代碼打上版本號標簽:

1
2
git tag?'1.0.0'?
git push --tags?

只有確保了以上兩點,CocoaPods才能更準確地找到你的repo。

現在我們開始通過trunk上傳你的podspec文件。先cd到podspec文件所在目錄,執行:

1
pod trunk push WZLBadge.podspec

文件名自行對號入座。上面的代碼做了三件事:(可以對著文章開頭的流程圖看)

1、驗證你的podspec文件是否合法。在trunk方式之前我們一般用“pod lib lint”命令進行驗證。

2、上傳podspec文件到trunk服務器(其實最終也會自動添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁瑣操作)

3、將你上傳的podspec文件轉成json格式文件

執行上面的push操作,就相當于你把你的源代碼提交給CocoaPods團隊審核了,一般需要一到兩個工作日可以審核結束。這種心情有點像提交App給Apple審核,哈哈。

*更正:現在CocoaPods審核只需要幾秒鐘或者幾分鐘就可以完成了。

?

三、更新本地pod依賴

既然代碼提交已經結束,那為什么還要這一步呢?因為你不知道什么時候會審核通過。你可能會說,使用"pod search"命令查一查不就知道了嗎?但遺憾的是如果這一步不執行,那在你的電腦上永遠不知道代碼何時審核通過。舉個例子,我在提交了我的一份開源代碼WZLBadge(截至發稿前已有300+的Star)到pod后的第三天使用search命令仍舊查不到:

這個速度讓我覺得不大對勁。于是我使用

1
pod setup

命令更新本地pod依賴庫后再執行pod search命令(該命令耗時半小時左右,與網速有關),結果如下:

這證明,代碼其實早已經審核通過了!

?

因此,在這一環節中你需要這么做:

在trunk push后,先用"pod search"查找一下你的代碼,有結果的話就歡天喜地;沒有的話執行"pod setup"進行本地依賴庫更新,再search。


?強勢插入:

如果不出意外,大多數同學在執行上述命令后會卡在“Setting up CocoaPods master repo”這一句中。我的經驗是一個字:等!不要關閉Terminal,大概半小時到一小時左右就會完成,提示“Setup completed”。(第一次會比較慢,第一次以后只需要幾秒鐘即可完成)為什么會卡這么久呢?

pod setup其實在做這么一件事:Cocoapods在將https://github.com/CocoaPods/Specs的信息下載到你電腦的~/.cocoapods目錄下并進行文件比對,總數據大小大約在100MB左右,再加上服務器在國外,因此速度會比較慢。在執行過程中你也可以新開一個Terminal窗口,cd到~/.cocoapods目錄,用du -sh *來查看下載進度。

當然,如果你有強迫癥等不了這么久,那也是有解決方法的。你可以參考唐巧的這篇文章的“使用CocoaPods的鏡像索引”部分,將CocoaPods的鏡像地址替換成國內的oschina等服務器地址,速度或許會有提高。但我個人認為沒必要,我在沒梯子的環境下耗時半小時左右,多點耐心。(第一次會比較慢,第一次以后只需要幾秒鐘即可完成)

?


?

**podspec文件更新方法

有時你可能會遇到這種情況:執行pod trunk push操作后發現podspec文件的某個地方寫錯了,想更新一下。對于這種情況,我們可能會先嘗試著在把podspec文件push一次。但是如果你的代碼版本號沒變(podspec里的version自然也沒變)就會提示push失敗,即使你更改了podspec的其他地方,pod也會認為這兩個文件是同一個。 我目前為止找不到trunk的相關update接口,所以只能順水推舟,更新源代碼版本號(如:1.1.1->1.1.2),重新push version tag,然后再執行pod trunk push操作。

?

寫在最后

trunk的方式的確比以前的fork->pull方式省事很多,但目前網上關于trunk提交CocoaPods代碼的資料不多,所以才有了這篇文章。希望這篇文章能各位有一些幫助。

本文轉自編程小翁博客園博客,原文鏈接:http://www.cnblogs.com/wengzilin/p/4742530.html,如需轉載請自行聯系原作者

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

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

相關文章

kafka tool 查看指定group下topic的堆積數量_ELK架構下利用Kafka Group實現Logstash的高可用...

系統運維的過程中,每一個細節都值得我們關注下圖為我們的基本日志處理架構所有日志由Rsyslog或者Filebeat收集,然后傳輸給Kafka,Logstash作為Consumer消費Kafka里邊的數據,分別寫入Elasticsearch和Hadoop,最后使用Kiba…

jquery flot pie畫餅圖

具體效果如下&#xff1a; 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> 5 <title>Insert title here</title> 6 <script language"javas…

研發管理:產品研發團隊的早會

百度百科定義:研發管理就是在研發體系結構設計和各種管理理論基礎之上&#xff0c;借助信息平臺對研發過程中進行的團隊建設、流程設計、績效管理、風險管理、成本管理、項目管理和知識管理等的一系列協調活動。[詳細] 產品研發團隊在履行各種產品研發過程中&#xff0c;從大的…

mysql fetch rows_差異mysql_fetch_array()和mysql_fetch_rows()函數_mysql

區別mysql_fetch_array()和mysql_fetch_rows()函數form:http://www.uphtm.com/php/254.html如果我們不仔細看會發現象mysql_fetch_array()和mysql_fetch_rows()函數沒有什么區別&#xff0c;但是細細的看你會發現它們區別還是蠻大了&#xff0c;如果各位對于此函數的區別不了解…

Linux 狀態命令之網絡狀態 iftop - 查看實時帶寬流量

簡介 Linux 中查看網卡流量工具有 iptraf、iftop 以及 nethogs 等&#xff0c;iftop 可以用來監控網卡的實時流量(可以指定網段)、反向解析IP、顯示端口信息等。 安裝 CentOS yum 方式 # 安裝依賴 yum install flex byacc libpcap ncurses ncurses-devel libpcap-develyum …

Spring Boot 使用常見問題

Json格式化時間&#xff0c;時區設置 spring.jackson.time-zoneGMT8 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss json數據無法序列化到RequestBody對象中 SpringMVC restful 注解之RequestBody進行json與object轉換 轉載于:https://www.cnblogs.com/tonyq/p/7890497.html

Angular15 利用ng2-file-upload實現文件上傳

待更新 轉載于:https://www.cnblogs.com/NeverCtrl-C/p/8279246.html

解讀設計模式----簡單工廠模式(SimpleFactory Pattern),你要什么我就給你什么

本文首發于博客園,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一、模式概述 從設計模式的類型上來說&#xff0c;簡單工廠模式是屬于創建型模式&#xff0c;又叫做靜態工廠方法&#xff08;Static Factory Method&#xff09;模式&#xff0c;但不屬…

Memcached常用操作

memcached是一個高性能的、分布式內存對象緩存系統&#xff0c;應用廣泛。 通過緩存數據庫查詢結果&#xff0c;減少數據庫訪問次數&#xff0c;以提高動態Web應用的速度、 提高可擴展性。 它可以應對任意多個連接&#xff0c;使用非阻塞的網絡IO。由于它的工作機制是在內存中開…

android自定義金額輸入鍵盤_Android 自定義控件 - 仿支付寶數字鍵盤

原標題&#xff1a;Android 自定義控件 - 仿支付寶數字鍵盤簡介在一些帶有支付功能的 App 中&#xff0c;輸入的密碼一般只能是純數字&#xff0c;雖然我們可以指定 EditText 輸入框只能輸入數字&#xff0c;但是為了提供用戶的使用體驗&#xff0c;我們往往更傾向于使用自定義…

博客目錄(python相關)

python 相關 文件格式相關系列 Python 第三方模塊之 beautifulsoup&#xff08;bs4&#xff09;- 解析 HTML Python 第三方模塊之 ElementTree&#xff08;ET&#xff09;- 解析XML文件 Python 第三方模塊之 lxml - 解析 HTML 和 XML 文件 python 第三方模塊 yaml - 處理 …

項目主體思索

1&#xff1a;分布式定義; 2&#xff1a;SSO集成方式 3&#xff1a;menu動態菜單的添加 4&#xff1a;tag頁面展示; 5&#xff1a;tiles的jsp復用&#xff1b; 暫時就想到這些了&#xff0c;以后繼續補充。轉載于:https://www.cnblogs.com/siyan/p/8286738.html

centos mysql pid_centos7 mysql The server quit without updating PID file(錯誤解決)

1 問題[rootlocalhost mysql]# /etc/rc.d/init.d/mysql statusMySQL is not running, but lock file (/var/lock/subsys/mysql[FAILED][rootlocalhost mysql]# /etc/rc.d/init.d/mysql startStarting MySQL...The server quit without updating PID file (/usr/local/mysql/dat…

tfs文件系統之NS配置管理

NameServer簡稱NS 充當著客戶與DS的交互橋梁 1.NS配置文件修改&#xff1a; [public] #log file size default 1GB log_size1073741824 #log file num default 64 log_num 64 #log file level default debug log_leveldebug #main queue size default 10240 task_max_queue_…

插件式架構設計實踐:插件式系統架構設計簡介

本系列博文將使用微軟RIA技術解決方案Silverlight以及擴展性管理框架Managed Extensibility Framework&#xff08;MEF&#xff09;&#xff0c;以插件式架構設計為導線&#xff0c;分享本人在從事基于微軟Silverlight技術構建的RIA系統中實施插件式系統架構設計的相關技術和經…

第十章 動態選路協議

RIP 缺陷&#xff1a; Routing Information Protocol RIP沒有子網的概念在路由器或鏈路發生故障后&#xff0c;需要很長的一段時間才能穩定下來采用跳數作為路由度量忽略了其他一些應該考慮的因素度量最大值為15則限制了可以使用RIP的網絡的大小OSPF Open Shortest Path First …

五種方式讓你在java中讀取properties文件內容不再是難題

2019獨角獸企業重金招聘Python工程師標準>>> 方式1.通過context:property-placeholder加載配置文件jdbc.properties中的內容 <context:property-placeholder location"classpath:jdbc.properties" ignore-unresolvable"true"/> 上面的配置…

hive metastore mysql_Hive MetaStore的結構

本篇主要是介紹Hive在MySQL中存儲的源數據的表結構。Hive MetaStore 數據庫表結構圖test.pngTBLS記錄數據表的信息字段解釋TBL_ID在hive中創建表的時候自動生成的一個id&#xff0c;用來表示&#xff0c;主鍵CREATE_TIME創建的數據表的時間&#xff0c;使用的是時間戳DBS_ID這個…

修煉一名程序員的職業水準

程序就是一系列按步驟進行的操作序列&#xff0c;它有好多種級別&#xff0c;比如最低級的微程序、次低級的匯編程序、高級的各種編程語言程序、最高級的腳本語言程序&#xff0c;也許我列的不對&#xff0c;但沒關系&#xff0c;我要說的是不管是那個級別的程序&#xff0c;其…

Rails開發細節《一》

常用命令 rails new new_app cd new_app rake db:create rails server rails generate controller Blog action1 action2 rails generate scaffold Product title:string description:textrails generate model Comment commenter:string body:text post:references rake db…