使用CocoaPods建立開源庫和私有庫詳解
筆者看了許多關於使用CocoaPods建立開源庫的文章,大都寫的不盡詳細,尤其是對於從來沒有建立過開源庫的同學,不知道哪個步驟文章沒寫,在驗證 .podspec 檔案時就一堆錯誤,一臉懵逼。本文是一篇從零開始建立一個自己的開源庫甚至是私有庫分享,如有問題,評論交流。
首先,你需要註冊一個CocoaPods賬號,email使用你的GitHub郵箱,起一個使用者名稱,開啟終端:
pod trunk register GitHub_email 'user_name' --verbose
等終端出現下面文字,CocoaPods 會發一個確認郵件到你的郵箱,登入你的郵箱進行確認。
[!] Please verify the session by clicking the link in the verification email that has been sent to [email protected]
驗證成功出現下圖:
回到終端:
pod trunk me
會看到你的註冊資訊:
建立開源庫
首先建立Git遠端公有倉庫
在你本地要建立專案的目錄執行
pod lib create 'ADTextFieldLimit'
根據命令列的提示一步步選擇,最後會為你建立一個模板工程和.podspec檔案、README.md檔案、MIT LICENSE檔案等。 並且還會自動幫你開啟Xcode,目錄結構如下:
我們把要開源的核心程式碼放在紅色區域所在的目錄下,此時通過Cocoapods創建出來的目錄在本地的Git管理下,我們需要把它新增到遠端倉庫:
git add . git commit -m 'Initial Commit' git remote add origin https://github.com/liushuorepo/ADTextFieldLimit.git #新增遠端倉庫 git push origin master #提交到遠端倉庫
此時專案已經被推到了遠端端,下面要做的就是修改.podspec檔案,配置成下面這樣:
Pod::Spec.new do |s|
s.name = 'ADTextFieldLimit' #專案名稱
s.version = '0.0.1' #版本號 與倉庫的標籤號對應
s.summary = 'This is a light library to limit the lenght of what you input.' #專案簡介
s.description = <<-DESC
This is a light library to limit the lenght of what you input. Thankyou!
DESC
s.homepage = 'https://github.com/liushuorepo/ADTextFieldLimit' #Git上專案主頁
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } #開源證書
s.author = { 'liushuorepo' => ' [email protected]' } #專案作者
s.source = { :git => 'https://github.com/liushuorepo/ADTextFieldLimit.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'ADTextFieldLimit/Classes/**/*'
# s.resource_bundles = {
# 'ADTextFieldLimit' => ['ADTextFieldLimit/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'UIKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
- s.source 指定源,你的Git倉庫地址
- s.source_files 指明哪些原始檔會被包含進去,比如s.source_files =
‘ADTextFieldLimit/Classes/**/*’,**表示匹配所有子目錄,*表示匹配所有檔案,.{h,m}表示匹配其中的.h和.m檔案。 - s.license,一般寫法有s.license = ‘MIT’ 或 s.license = { :type => ‘MIT’, :file => ‘LICENSE’ }, LICENSE對應.podspec所在目錄下的名為LICENSE檔案。
- s.platform = :ios, “7.0”,s.ios.deployment_target = ‘7.0’,指定可用平臺和版本,如果支援多個平臺應該使用後者,並指定其他平臺的版本如s.osx.deployment_target =“10.7”。
- s.public_header_files,公開的標頭檔案,如果指定,在pod lint驗證時,會以framework的形式驗證,一般可以不用這個配置。
- s.frameworks、s.libraries,指定依賴的系統庫。兩者內容都需要去除字尾,其中s.libraries需要去除字首lib,如靜態庫依賴是libz.tbd,則s.libraries= ‘z’。
- s.vendored_libraries 、s.vendored_frameworks 如果開源庫中是一個靜態庫,使用這個指定靜態庫。如微博的podspec中s.vendored_libraries = ‘libWeiboSDK/libWeiboSDK.a’
- s.xcconfig 指定專案配置,如HEADER_SEARCH_PATHS 、OTHER_LDFLAGS等,e.g s.xcconfig = { “OTHER_LDFLAGS” => “-ObjC” }
- s.resource_bundles 指定包含的資原始檔。
驗證 .podspec 檔案的格式是否正確:
pod lib lint ADTextFieldLimit.podspec --verbose
- –verbose 會給出詳細的資訊。
- –allow-warnings 允許警告,預設有警告的podspec會驗證失敗。
–fail-fast 遇到錯誤馬上停止,預設會完成全過程再停止。 - –use-libraries 如果專案中引用了.a、.framework,在驗證和提交時需要加。
- –sources 如果此podspec 依賴了其他不包含在官方specs裡的pod,則用它來指明源,比如依賴了某個私有庫。多個值以逗號分隔。
驗證成功出現:
-> ADTextFieldLimit (0.0.1)
ADTextFieldLimit passed validation.
驗證成功後,推到遠端:
git add .
git commit -m '新增關鍵檔案'
git push origin master #提交到遠端倉庫
打標籤:
git tag 0.0.1
git push --tags
釋出 .podspec:
pod trunk push ADTextFieldLimit.podspec
釋出成功,出現下面提示:
釋出成功後,會把podspec更新到官方的repo中,可以訪問:https://cocoapods.org/pods/ADTextFieldLimit 在CocoaPods官網搜尋到自己的pod,也可以執行下面的命令來搜尋:
pod search 'ADTextFieldLimit'
但是有時候你在官網搜到了,而你在終端執行pod search 時卻報錯:
[!] Unable to find a pod with name, author, summary, or description matching `ADTextFieldLimit`
這是因為有可能你本地的repo不是最新的,執行更新,然後重新搜尋:
pod repo update
如果還是搜不到,可能是因為搜尋的快取導致,刪除快取重新搜尋:
rm ~/Library/Caches/CocoaPods/search_index.json
pod search 'ADTextFieldLimit'
搜所結果如下:
然後別人就可以在專案中匯入你的開源倉庫了。
建立私有庫
建立私有庫和公有庫步驟基本類似,區別是:
需要先在Git上建立遠端私有倉庫,然後在本地目錄下執行:
pod repo add 'repoName' 'repo URL'
編輯 .podspec,同上
驗證 .podspec,如果依賴了其他私有庫,需要使用–sources指定source。
pod lib lint BaseFundation.podspec --sources=https://github.com/liushuorepo/XMTextFieldLimit.git
釋出 .podspec
pod repo push 'BaseFundation' BaseFundation.podspec
使用私有庫
platform :ios, '9.0'
use_frameworks!
# 共用的pod第三方
pod 'BaseFundation', :git => 'https://github.com/liushuorepo/BaseFundation.git'
# 專案中的target各自的設定
target "xuanmeng" do
#xuanmeng獨自引用
end
很多時候,在開發過程中,我們希望在開發私有庫的過程中,修改程式碼後不用一直打tag並執行pod update,我們可以這樣寫Podfile:
pod 'BaseFundation', :path => '~/Desktop/BaseFundation'
這樣在普通的修改程式碼時,不需要重新打tag並pod update,但是當工程結構有變化(檔案移動,增刪等)、podspec修改,最好執行一次pod update。
參考文章:
相關推薦
使用CocoaPods建立開源庫和私有庫詳解
筆者看了許多關於使用CocoaPods建立開源庫的文章,大都寫的不盡詳細,尤其是對於從來沒有建立過開源庫的同學,不知道哪個步驟文章沒寫,在驗證 .podspec 檔案時就一堆錯誤,一臉懵逼。本文是一篇從零開始建立一個自己的開源庫甚至是私有庫分享,如有問題,評論交
Linux 多工程式設計——多程序建立:fork() 和vfork() 函式詳解
一、fork() 函式詳解 需要的標頭檔案: #include <sys/types.h> #include <unistd.h> pid_t fork(void); 功能: 用於從一個已存在的程序中建立一個新程序,新程序稱為子程序,原程序稱為父程序。
mysql篇第三課:庫的建立和表的詳解
這節課我們講講怎麼建庫,以及對錶的建立詳細分析一下: 建庫特別簡單: create database dbname; 來試試 接下來講建表,先把建表語句粘一下:
zxing開源庫工作流程原始碼詳解
程式碼獲取 作為移動客戶端開發者來說,對二維碼識別或二維碼生成相關的開發需求肯定並不陌生,Android開發二維碼相關的功能通常都會使用或參考大名鼎鼎的zxing庫。而本文則主要是通過原始碼分析一下該開源庫掃描二維碼的工作流程,對這塊能有個更深的瞭解。 首先使用git將專案程式碼clone到本地,新建專案
C語言函式篇(五)靜態庫和動態庫的建立和使用
使用庫函式是原始碼的一種保護?我猜的. 庫函式其實不是新鮮的東西,我們一直都在用,比如C庫. 我們執行pringf() 這個函式的時候,就是呼叫C庫的函式. 下面記錄靜態庫和動態庫的生成和使用. 靜態庫:libxxx.a 動態庫:libxxx.so
開源庫之EventBus使用詳解
簡介 EventBus是一種用於Android的釋出/訂閱事件匯流排。簡化了應用程式內各元件間、元件與後臺執行緒間的通訊。常用於Activity、Fragment和後臺Service之間通訊、傳
python time庫和datetime庫詳解
import time import datetime ''' 重點是元祖、時間戳、格式化的字串之間互相轉化 元祖轉時間戳:使用time.mktime(元祖) 元祖轉格式化的字串:使用time.strftime(元祖) 時間戳轉元祖: 思路,時間戳首先轉化為格式化的字串,再從
Linux下怎麼建立動態庫和靜態庫
前言 linux下的生成的動態庫和靜態庫沒有windows下方便 linux下gcc編譯預設動態連結和release 程式執行後呼叫動態庫 動態庫: 程式在執行的時候才去連結動態庫的程式碼,多個程式
Node.js中package.json中庫的版本號詳解(^和~區別)
當我們檢視package.json中已安裝的庫的時候,會發現他們的版本號之前都會加一個符號,有的是插入符號(^),有的是波浪符號(~)。那麼他們到底有什麼區別呢?先貼一個例子,對照例子來做解釋: "dependencies": { "bluebird": "^3.3.4", "body-parser": "
【Qt】Qt動態庫和靜態庫的建立和使用
動態庫(共享庫)的建立 在Qt Creator中新建專案,選擇Library 點選“Choose”進入下一步 選擇建立庫的型別:共享庫 選擇Kit套件 選擇需要的模組 配置工程路徑、名字等 Qt Creator自動建立的檔案
github中建立自己的cocoapod私有庫_實操
依託github伺服器,把自己寫的功能類專案當作cocoapods私有庫進行釋出公開,便於他人利用,也便於自己使用和維護。 注意事項: 1、必須包含的檔案:LICENSE、prjectName.podspec 2、相關檔案必須在同一個目錄層級:LICENSE、pr
簡述SAS邏輯庫的概念及建立方法。什麼是臨時庫和永久庫?
libname student 'e:\mysas'; SAS中利用libname命令建立邏輯庫,雖然之後建立的與其關聯的永久資料集還儲存在該邏輯庫所指的目錄中,但重啟SAS後該庫卻沒有顯示於庫目錄中。 例如e:\mysas目錄已存在,程式data student.aaa
問題集合 ---- linux 靜態庫和動態庫建立、檢查、使用建議
=================================================================== linux靜態庫和動態庫分析 本文轉自 http://www.linuxeden.com/html/develop/20100326/94297.html
Linux下gcc生成和使用靜態庫和動態庫詳解
一、基本概念 1.1什麼是庫 在windows平臺和linux平臺下都大量存在著庫。 本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。 由於windows和linux的平臺不同(主要是編譯器、彙編器和聯結器的不同),因此二者庫的二
用CMake建立動態庫和靜態庫(轉)
五,靜態庫與動態庫構建 讀者雲,太能羅唆了,一個Hello World就折騰了兩個大節。OK,從本節開始,我們不再折騰Hello World了,我們來折騰Hello World的共享庫。 本節的任務:1,建立一個靜態庫和動態庫,提供HelloFunc函式供其他程式程式設計使用
【IOS學習】CocoaPods安裝使用及配置私有庫
如何安裝? 1.安裝ruby環境,新增淘寶ruby映象 $ gem sources --remove https://rubygems.org/ //等有反應之後再敲入以下命令 $ gem sources -a http://ruby.taobao.org/ 2
c++中靜態庫和動態庫的建立與連結
2、動態庫 在使用動態庫的時候,往往提供兩個檔案:一個引入庫(.lib)和一個DLL(.dll)檔案。雖然引入庫的字尾也是.lib ,但是動態庫的引入庫檔案和靜態庫檔案有著本質的區別,對一個DLL來說,其引入庫檔案(.lib)包含DLL匯出的函式和變數的符號名,而.dll檔案包含該DLL實際的函式
c語言------靜態庫和動態庫的建立和使用
一. 靜態庫 1. 靜態庫的建立 gcc -c 原始檔 . c //為了得到原始檔的 . o 檔
Linux中如何建立靜態庫和動態庫
函式庫分為靜態庫和動態庫兩種。 靜態庫在程式編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫。 動態庫在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。 程式1: hello.h #ifndef HELLO
github中建立自己的cocoapod私有庫_異常問題解決
1、file patterns: The `source_files` pattern did not match any file. 解決:檢查你.podspec檔案中s.source_files路徑有沒有填錯。 原始檔所在目錄名稱與xx.podspec檔案保持同名,