1. 程式人生 > >CocoaPods製作篇(1)

CocoaPods製作篇(1)

一、建立自己的github倉庫

CocoaPods都託管在github上(官方連結為: https://github.com/CocoaPods ),所有的Pods依賴庫也都依賴github,因此第一步我們需要建立一個屬於自己的github倉庫。倉庫建立介面如下圖:


Paste_Image.png


上圖中標了序號的共6處,對應的說明如下:
1、Repository name
倉庫名稱,這裡寫成HTQRCode,必填的;
2、Description
倉庫的描述資訊,可選的;
3、倉庫的公開性
這裡只能選Public,一個是因為Private是要money的,再一個Private別人看不到還共享個毛;
4、是否建立一個預設的README檔案
一個完整地倉庫,都需要README說明文件,建議選上。當然不嫌麻煩的話你也可以後面再手動建立一個;
5、是否新增.gitignore檔案
.gitignore檔案裡面記錄了若干中檔案型別,凡是該檔案包含的檔案型別,git都不會將其納入到版本管理中。是否選擇看個人需要;
6、license型別
正規的倉庫都應該有一個license檔案,Pods依賴庫對這個檔案的要求更嚴,是必須要有的。因此最好在這裡讓github建立一個,也可以自己後續再建立。我使用的license型別是MIT。

上面的各項都填寫完畢後,點選Create repository按鈕即可,建立成功地介面如圖:


Paste_Image.png


到這,倉庫建立過程就結束了。

二、clone倉庫到本地

為了便於向倉庫中刪減內容,需要先將倉庫clone到本地,操作方式有多種,推薦使用命令列:
$ git clone https://github.com/TeaseTian/HTQRCode.git

操作完成後,github上對應的檔案都會拷貝到本地,目錄結構為:
github上倉庫中的.gitignore檔案是以.開頭的隱藏檔案,因此這裡只能看到兩個。
後續我們的所有檔案增、刪、改都在這個目錄下進行。

三、向本地git倉庫中新增建立Pods依賴庫所需檔案

建立.podspec

首先在你的專案中使用如下命令建立名為 HTQRCode 的 HTQRCode.podspec(當然你也可以使用vim建立,只是沒有預設文字而已)
$ pod spec create HTQRCode

編輯.podspec

建立好的 .podspec 包含大量的註釋說明了每個引數的含義及用法。如果想詳細瞭解可以仔細閱讀。這裡只介紹幾個常用的。

Pod::Spec.new do |s|


  s.name         = "HTQRCode"
  s.version      = "1.0.0"
  s.summary      = "二維碼生成和掃描"
  s.description
= <<-DESC 二維碼生成和掃描,使用 DESC s.homepage = "https://github.com/TeaseTian/HTQRCode" s.license = { :type => "MIT", :file => "LICENSE" } s.author = { "TeaseTian" => "[email protected]" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version } s.source_files = "HTQRCode/*.{h,m}" s.resources = "HTQRCode/*.png" # s.frameworks = "SomeFramework", "AnotherFramework" s.requires_arc = true s.dependency "ZXingObjC", "3.1.0" s.dependency "Masonry" end

s.name:名稱,pod search 搜尋的關鍵詞
s.version:版本
s.summary:簡介,pod search 搜尋的關鍵詞
s.homepage:主頁地址,例如Github地址
s.license:許可證
s.author:作者
s.social_media_url:社交網址
s.platform:平臺
s.source:Git倉庫地址,例如在Github地址後邊加上 .git 就是Git倉庫地址,常見寫法如下
s.source_files:需要包含的原始檔,常見的寫法如下
s.resources:需要包含的圖片等資原始檔
s.dependency:依賴庫,不能依賴未釋出的庫
s.dependency:依賴庫,如有多個可以這樣寫
s.requires_arc:是否要求ARC

s.source_files 常見寫法

"Directory1/*"  表示匹配所有檔案
"Directory1/Directory2/*.{h,m}"  表示匹配所有以.h和.m結尾的檔案
"Directory1/**/*.h"  表示匹配所有子目錄

s.source 常見寫法

s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :commit => "68defea" }
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => 1.0.0 }
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }

commit => "68defea" 表示將這個Pod版本與Git倉庫中某個commit繫結
tag => 1.0.0 表示將這個Pod版本與Git倉庫中某個版本的comit繫結
tag => s.version 表示將這個Pod版本與Git倉庫中相同版本的comit繫結

按照上述規則編輯完成就製作好了 .podspec(最好使用vim進行編輯)。

上傳到Git

將包含配置好的 .podspec 的專案提交 Git,並給這次提交打上 tag

$ git add -A && git commit -m "Release 1.0.0."
$ git tag '1.0.0'
$ git push --tags
$ git push origin master

這時就可以在其他專案中使用 CocoaPods 引入你配置好的 Pod 了。

pod 'HTQRCode', :git => 'https://github.com/TeaseTian/HTQRCode.git', :tag => '1.0.0'

當然,在給其他專案使用前最好先*驗證.podspec的有效性。

驗證.podspec
編輯好後最好先驗證 .podspec 是否有有效
$ pod spec lint

驗證過程中:
-> HTQRCode

驗證成功後:
HTQRCode.podspec passed validation.

驗證失敗後:
[!] The spec did not pass validation, due to 1 error.

驗證 .podspec 會先測試本地 .podspec 檔案是否存在語法錯誤。測試成功再根據 .podspec 檔案找到遠端倉庫對應的版本克隆到本地並進行配置。最後測試檔案是否能夠編譯成功。

.podspec驗證失敗錯誤排查
語法錯誤

如果是因為語法錯誤,驗證失敗後會給出錯誤的準確定位

[!] Invalid `HTQRCode.podspec` file: no .<digit> floating literal anymore; put 0 before dot 
s.version = “1.0.0” 
                 ^
HTQRCode.podspec:5: syntax error, unexpected tFLOAT, expecting '(' 
s.version = “1.0.0” 
                   ^

標記“^”的地方即為有語法錯誤的地方。
上述錯誤是因為使用“文字編輯”進行編輯造成的。使用文字編輯有時候英文""引號會自動變成中文“”引號。

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

使用 vim 將其改為英文的""引號即可。

依賴錯誤

但是,有些非語法錯誤是不會給出錯誤原因的。這個時候可以使用“--verbose”來檢視詳細的驗證過程來幫助定位錯誤。

pod spec lint HTQRCode.podspec --verbose

如下錯誤通過 --verbose 就可以找到原因。

-> HTQRCode (1.0.0) 
- ERROR | [iOS] Encountered an unknown error (The 'Pods' target has transitive dependencies that include static binaries: (/private/var/folders/jz/b_m3k7ln47524cm__h3__mk00000gn/T/CocoaPods/Lint/Pods/BPushSDK/LibBPush/libBPush.a)) during validation.

這個錯誤是因為依賴庫(s.dependency)包含了.a靜態庫造成的。雖然這並不影響Pod的使用,但是驗證是無法通過的。可以通過 --use-libraries 來讓驗證通過。

pod spec lint HTQRCode.podspec --verbose --use-libraries

這種情況下使用 --use-libraries 雖然不會出現錯誤(error),但是有時候會帶來一些警告(waring),警告同樣是無法通過驗證的。這時可以用 --allow-warnings 來允許警告。
pod spec lint HTQRCode.podspec --verbose --use-libraries --allow-warnings

安裝錯誤

如果在其他專案 pod install 的過程中,出現包含“undefined method end_with?' for nil”字樣的報錯。進入“~/.cocoapods/repos”目錄,刪除“master”,並將 master-1 改為 master 即可。如果出現如下錯誤,而你的驗證可以通過,那麼一般更新下版本號就可以解決。[!] Unable to find a specification for 'HTQRCode'.`

再次驗證

如果錯誤發生在 .podspec 中。當修改完時,不需要再次提交就可以直接驗證。如果錯誤發生在程式碼中,則需要再次提交才能驗證。

釋出到CocoaPods

你可以用 .podspec 檔案來方便的管理內部程式碼,當然,也可以釋出自己的 Pod 供其他開發者使用。
CocoaPods 0.33中加入了 Trunk 服務,使用 Trunk 服務可以方便的釋出自己的Pod。雖然一開始使用 GitHub Pull Requests 來整理所有公共 pods 效果很好。但是,隨著 Pod 數量的增加,這個工作對於 spec 維護人員 Keith Smiley 來說變得十分繁雜。甚至一些沒有通過 $ pod lint 的 spec 也被提交上來,造成 repo 無法 build。CocoaPods Trunk 服務的引入,解決了很多類似的問題。每次使用 Trunk 服務釋出 Pod 時都會通過 $ pod lint 驗證 .podspec 是否有效。要想使用 Trunk 服務,首先需要使用如下命令註冊自己的電腦。這很簡單,只要你指明你的郵箱地址(spec檔案中的)和名稱即可。CocoaPods 會給你填寫的郵箱傳送驗證郵件,點選郵件中的連結就可通過驗證。

pod trunk register [email protected]qq.com "TeaseTian"

然後就可以釋出你的 Pod 了。

pod trunk push HTQRCode.podspec

釋出時會驗證 Pod 的有效性,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那麼釋出的時候也應該使用相同的欄位修飾,否則出現相同的報錯。

pod trunk push HTQRCode.podspec --use-libraries --allow-warnings

釋出成功後,就可以使用 pod search 搜尋到你的 Pod 了!

-> HTQRCode (1.0.0) 
integrate APNs rapidly 
pod 'HTQRCode', '~> 1.0.0' 
- Homepage: https://github.com/TeaseTian/HTQRCode 
- Source: https://github.com/TeaseTian/HTQRCode.git 
- Versions: 1.0.0 [master repo]

由於 pod search 是搜尋的本地“~/.cocoapods”,所以在其他裝置上可能無法搜到。這時只需要執行 pod install 更新下 pod 倉庫即可(不要加 --no-repo-update)。
版本升級
當需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號,並修改 s.source 中對應的 Git 版本。提交到Git,並打上對應tag。然後再次執行pod trunk push HTQRCode.podspec
將新的 .podspec 釋出到 CocoaPods。更新完成!
為了更新更加方便,版本控制更加清晰,s.source 建議採用如下寫法:
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }

這樣寫將 Git 的版本與 CocoaPods 的版本進行了繫結。每次提交後再給本次提交打上 tag 就完成了更新。而且在 Git 中就可以清晰的看到哪次提交對應的哪個 CocoaPods 版本。如果與 commit 繫結,則要通過兩次提交才能完成更新,第一次先提交修改程式碼,第二次將上一次 commit id 更新到 s.source 然後再次提交。如果直接與固定 tag 繫結,則每次還都要修改 s.source。如果你的 Pod 是私有庫,那麼 s.source 其實是無用的。因為在 Podfile 中已經指明瞭地址和版本(如下)。這時 s.source 可以隨便填寫,但最好還是按照上述規則以便以後釋出。
pod 'HTQRCode', :git => 'https://github.com/TeaseTian/HTQRCode.git', :tag => 1.0.0

協同工作

當需要其他人來共同維護你的程式碼,需要提供許可權
pod trunk add-owner CLRollingCycleView [email protected]

總結制作pod的步驟

1.從自己的github上建立專案,clone到本地

git clone https://github.com/TeaseTian/HTQRCode.git

2.建立建立podspec檔案和相對應的專案

pod spec create HTQRCode
Pod::Spec.new do |s|


  s.name         = "HTQRCode"
  s.version      = "1.0.0"
  s.summary      = "二維碼生成和掃描"
  s.description  = <<-DESC

        二維碼生成和掃描,使用
                   DESC
  s.homepage     = "https://github.com/TeaseTian/HTQRCode"
  s.license      = { :type => "MIT", :file => "LICENSE" }


  s.author       = { "TeaseTian" => "[email protected]" }
  s.platform     = :ios, "7.0"
  s.source       = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => s.version }
  s.source_files = "HTQRCode/*.{h,m}"
  s.resources    = "HTQRCode/*.png"
  # s.frameworks   = "SomeFramework", "AnotherFramework"
  s.requires_arc = true
  s.dependency "ZXingObjC", "3.1.0"
  s.dependency "Masonry"


end

3.推送的遠端倉庫,校驗podspec檔案

git add -A && git commit -m "Release 1.0.0."
git tag '1.0.0'
git push --tags
git push origin master
pod spec lint

4.使用trunk釋出到CocoaPods(第一次需要register)

pod trunk register [email protected]qq.com "TeaseTian"
pod trunk push HTQRCode.podspec

相關推薦

CocoaPods製作(1)

一、建立自己的github倉庫 CocoaPods都託管在github上(官方連結為: https://github.com/CocoaPods ),所有的Pods依賴庫也都依賴github,因此第一步我們需要建立一個屬於自己的github倉庫。倉庫建立介面如下圖: Paste_Image.png

醬油帶你用cocos2dx3.0完成一款戰棋遊戲 (曹操傳)(一)地圖製作 1

這是醬油第一次寫部落格,所以如果有什麼寫的不好,大家多多海涵啊。那麼廢話就不多說了,直接進入正題吧。 製作一款戰棋遊戲,在醬油看來最大的難度便是 ai的設計以及 實現劇本對遊戲整體的控制,當然啦,這都是比較深的問題了,醬油會放到以後的章節來加以介紹。那麼現在就正式開始打醬油

CocoaPods---製作(最新版)

一.http://blog.csdn.net/wzzvictory/article/details/20067595,使用王中周同學的步驟到第四步結束後停止,因為上傳到官方倉庫已經不可用了 二.

CocoaPods實踐之製作

總結CocoaPods製作步驟: CocoaPods製作要點: 1、需要新增license型別,這裡選擇了MIT License。 2、.podspec檔案內容參考 Pod::Spec.new do |s| s.name

CocoaPods之----製作

如果我們已經做好了一個不錯的庫,並上傳到github,這時,你會想讓這個庫支援pod使用,下面就來介紹如何製作自己的pod。 1.cd進入本地某個目錄,從github上clone下專案,已經有專案的忽略這一步。 2.cd進入專案目錄,這裡我用我的開源專案為T

Python1.15---模塊與包

def lob 是否 函數 16px ont 針對 自己的 bsp 一.模塊 1 什麽是模塊? 一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。 2 為何要使用模塊? 如果你退出python解釋器然後重新進入,那麽你之

[轉]Eclipse插件開發之基礎(1) 插件開發的基礎知識

作用 原本 services 註冊 1-1 啟動 創建 abs class 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名詞翻譯   有一些名詞在翻譯的

iOS-swift-基礎1

自動 lan style blank ase ani dev per 程序 一.swift是啥?答:百度。 二.swift基礎知識。 1.輸出函數:print print("Hello, world!") 2.簡單數據類型 變量聲明:var   常量聲明:let

angularJS初學-1添加隨筆

不可見 src fin count -a one inpu 引導 del 1.頭部引入angularJS文件 <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"

Android學習之——優化(1)

androi static 實用 mod 簡單 keys 階段 數據 秒級 一、優化的品質 1.簡練。2.可讀性強。3.模塊化;4.層次性;5.設計良好。6.高效。7.優雅;8.清晰。 二、常見的編程規範 1. 基本要求 · 結構清晰,簡

react基礎總結1,定義組件實現父子組件傳值

實現 efault () 語法 前端 bsp component 定義 我們 前端時間學習了vue,這幾天開始入手react了。 react項目搭建起來之後,我們一定會定義很多個組件。同樣的也會涉及到父子組件的傳值。今天來整理一下這個知識。 1,定義子組件步驟   1,引入

Python學習-基礎1

什麽 final 相關 pass 所在 正常 語言 技術分享 ash 一、變量: 1)變量定義規範: #1. 變量名只能是 字母、數字或下劃線的任意組合#2. 變量名的第一個字符不能是數字#3. 關鍵字不能聲明為變量名[‘and‘, ‘as‘, ‘assert‘, ‘b

JavaSE基礎1.數據類型和運算符

內存 ring 流程控制 print 命名規範 變量 接下來 半徑 text 本章知識點內容概括 數據類型:   1.基本數據類型     數值型       整數類型         byte(128~127),占1個字節的儲存間         short(

iOS 新手直接寫程序 基礎1

圖片 也有 -c pos 臺電腦 project 搜索 開發者 日常 有些想學iOS開發的朋友們,整天在為各種語法,各種小知識困擾,學了很久還不知道什麽是程序,程序怎麽編寫等一些基本問題。 我也不是什麽大神,但是作為3年多的iOS開發者,也是從基本的iOS開發爬上來的,俗話

MongoDB基礎1:安裝和服務配置

AD gap window server load 執行 顯示 mmu 配置環境 一、下載 請前往官網下載community版本MongoDB,我當前可見最新版本是3.6.4 https://www.mongodb.com/download-center#community

接口自動化HttpClient-基礎1

pen 連接 http httpget ted 創建 斷開連接 ava 對象 基於java+httpclient的接口自動化測試。 一.環境配置 下載+安裝 (Java環境+httpclient包) httpclient包下載地址:https://hc.apache.org

Android開發學習——UI1.0

印象 基本 http IE and androi 技術 ima 9.png Android開發學習——UI篇1.0 從控件開始 TextView 最基本的文本顯示控件 相信同學對剛開始使用Android studio時生成的第一個程序還有印象。興致滿滿地將軟件已經編好的基礎

爬蟲基礎1--爬蟲原理

響應 方式 狀態 key-value 狀態碼 正則 獲取網頁 res -- 1.什麽是爬蟲?請求網站並提取數據的自動化程序(讓程序替你去上網) 2.爬蟲的基本流程(1)向服務器發起請求(2)獲取網頁內容(3)解析內容(4)保存數據 3.什麽是request和response

從零開始的全棧工程師——html1.2

段落 屬性 無限 port 簽名 分享圖片 就是 html 表示 起名方式與CSS 一.起名方式(起名方式也叫選擇器) 起名的目的是為了給標簽添加屬性 常見的3種選擇器有 標簽選擇器 id選擇器(使用的時候加#) class選擇器(使用的時候加.) 樣式的要求是

從零開始的全棧工程師——html1.6

標準 hidden position margin 區別 ext alt 效果 posit 浮動與偽類選擇器 一、浮動(float) 1.標準文檔流 標準文檔流是一種默認的狀態 瀏覽器的排版是根據元素的特征(塊和行級) 從上往下 從左往右排版 這就是標準文檔流 2