使用Cocoapods制作自己的pod

前言

現在大部分的開發者都是用Cocopods來管理第三方庫,Cocoapods為庫的管理提供了便利。在項目的發展當中會出現很多公共組件,如果只是單純拷貝代碼,維護起來會變得非常麻煩,因此制作私有庫將給組件管理帶來極大遍歷,而Cocoapods也提供了這樣的功能。

文章分為兩部分,第一部分是私有庫的制作,第二部分介紹開源自己的庫,將自己的庫發布到Cocoapods公共倉庫。

新建倉庫

Cocoapods使用podspec來管理庫的信息,因此需要一個倉庫來管理這些podspec文件。如果要創建私有庫就需要一個一個自己的倉庫來存儲podspec文件,如果開源就可以上傳到Cocoapods公有的倉庫。因此,創建私有庫之前我們先創建私有的spec repo。

創建私有Spec Repo

  1. 創建spec的git倉庫
    http://192.168.1.100:3000/AndrewShen/MySpecRepo.git

  2. 添加創建的Spec Repo

使用命令行添加倉庫到本地repo,會自動建立git的鏈接

# pod repo add REPO_NAME SOURCE_URL
$ pod repo add MySpecRepo http://192.168.1.100:3000/AndrewShen/MySpecRepo.git

將會執行:

Cloning spec repo `MySpecRepo` from `http://192.168.1.100:3000/AndrewShen/MySpecRepo.git`

執行成功后可以執行pod repo查看已有的repo

新建pod

從零開始創建pod

  1. 如果需要從頭開始寫項目,開發組件,那可以通過pod lib create來創建工程
    我們執行
```Ruby
#pod lib create LIBNAME
pod lib create podDemo
```

之后會問你四個問題,問完后自動執行`pod install`并生成依賴:
  1. 使用什么語言
  2. 是否需要一個例子工程
  3. 選擇一個測試框架
  4. 是否基于View測試
  5. 類的前綴
如果執行`pod install`失敗,則刪掉PodFile里的test target就行了。
  1. 創建成功后我們可以看到目錄結構,我們的pod會存在于Example項目的Pods的Development Pods目錄下。
```
podDemo
├── Example
│   ├── Podfile
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── podDemo
│   ├── podDemo.xcodeproj
│   └── podDemo.xcworkspace
├── LICENSE
├── README.md
├── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
├── podDemo
│   ├── Assets
│   └── Classes
└── podDemo.podspec
```

3.向pod文件夾(此處為podDemo)中加入資源文件(Assets中)和庫文件(Classes中),

  1. 在example文件夾下執行pod update更新工程pod。成功后Development Pods目錄下我們的pod文件便會更新。只要更新了pod文件夾下內容或者更改了podspec文件都需要執行pod update

  2. 通過Cocoapods創建的項目會在本地的git管理下,我們需要將其添加到遠程倉庫。

```ruby
git add .
git commit -m "Initial"
git remote add origin http://git.celebi.com/AndrewShen/podDemo.git           #添加遠端倉庫
git push origin master     #提交到遠端倉庫
```
  1. 由于podspec文件pod源需要tag號,因此我們需要為項目打上tag.
```ruby

git tag -a 0.0.1 -m "tag release 0.0.1" #打tag
git push --tags #提交tag
```

  1. 編輯podspec文件
```Ruby
Pod::Spec.new do |s|
  s.name             = 'podDemo' #pod名稱
  s.version          = '0.1.0'   #pod版本
  s.summary          = '測試pod簡介.' #簡介,需要更改,不然會報警告

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC      #詳細介紹,要比簡介長
                        測試pod的詳細介紹
                       DESC

  s.homepage         = 'http://192.168.1.100:3000/AndrewShen/podDemo' # 項目主頁
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  #協議
  s.author           = { 'AndrewShen' => 'andrewshen@minture.com' }  # 開發者信息
  s.source           = { :git => 'http://git.celebi.com/AndrewShen/podDemo.git', :tag => s.version.to_s } #倉庫地址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '7.0' # 最低版本

  s.source_files = 'podDemo/Classes/**/*' # 庫文件
  
  # s.resource_bundles = {                     #資源目錄
  #   'podDemo' => ['podDemo/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'UIKit', 'MapKit'   #依賴的framework
  # s.dependency 'AFNetworking', '~> 2.3'  # 依賴的第三方庫  
```
  1. 編輯后使用pod lib lint驗證podspec文件是否可用。如果有ErrorWarning是無法添加到spec repo中的。但是Warning可以存在,可以使用選項--allow-warnings忽略警告。
```
pod lib lint
```

如果顯示為以下則說明創建成功

```Ruby
-> podDemo (0.1.0)
podDemo passed validation.
```

從組件項目中創建pod

如果已經有組件項目/Demo則只需要創建podspec文件。

  1. 執行命令創建podspec文件:
pod spec create ADSSegmentedButton https://github.com/Andrewmika/ADSSegmentedButton.git
  1. 創建完成后打開我們創建的podspec文件,進行編輯。

  2. 驗證文件是否可用

執行命令`pod lib lint`

如果顯示為以下則說明創建成功

```Ruby
-> ADSSegmentedButton (0.0.1)

ADSSegmentedButton passed validation.
```

pod本地測試

配置好podspec文件后可以在本地測試pod是否可用,然后發布到服務器上.
Podfile中指定pod,可以指定路徑或者文件

platform :ios, '7.0'

pod 'PODNAME', :path => '項目路徑'      # 指定路徑
pod 'PODNAME', :podspec => 'podspec文件路徑'  # 指定podspec文件

由于還未將pod提交到spec repo中,因此pod install后的庫文件仍然在Development Pods目錄下

pod私有庫發布

pod發布只需要在podspec文件下執行一行命令,此命令會自動將文件push到git倉庫中:

#pod repo push REPONAME [NAME.podspec]
pod repo push MySpecRepo podDemo.podspec

如果想要看詳情可以加上選項--verbose。一般報錯就是tag沒打好,提取不到tag代碼,無法驗證podspec也就無法push。

發布到CocoaPods

注冊帳號

#pod trunk register YOUREMAIL 'NAME' --description='DESCRIPTION'
pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

將用戶名,郵箱換成自己的,給設備添加描述信息。由于CocoaPods沒有用戶名密碼,使用的是驗證令牌,所以換一臺電腦的話還需要執行以上命令。
執行成功后會提示以下信息,點擊連接完成注冊。

[!] Please verify the session by clicking the link in the verification email that has been sent to 『your email』

完成后可以執行命令pod trunk me查看自己賬戶信息。

發布pod

發布到公有庫也只需要一行命令:

pod trunk push [NAME.podspec]

之后也會驗證podspec,通過后上傳。提交到公有庫速度比較慢,需要耐心等待。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容