使用Cocoapods制作自己的pod

前言

現(xiàn)在大部分的開(kāi)發(fā)者都是用Cocopods來(lái)管理第三方庫(kù)边败,Cocoapods為庫(kù)的管理提供了便利。在項(xiàng)目的發(fā)展當(dāng)中會(huì)出現(xiàn)很多公共組件,如果只是單純拷貝代碼蔬将,維護(hù)起來(lái)會(huì)變得非常麻煩斋扰,因此制作私有庫(kù)將給組件管理帶來(lái)極大遍歷渡八,而Cocoapods也提供了這樣的功能啃洋。

文章分為兩部分,第一部分是私有庫(kù)的制作屎鳍,第二部分介紹開(kāi)源自己的庫(kù)宏娄,將自己的庫(kù)發(fā)布到Cocoapods公共倉(cāng)庫(kù)。

新建倉(cāng)庫(kù)

Cocoapods使用podspec來(lái)管理庫(kù)的信息逮壁,因此需要一個(gè)倉(cāng)庫(kù)來(lái)管理這些podspec文件孵坚。如果要?jiǎng)?chuàng)建私有庫(kù)就需要一個(gè)一個(gè)自己的倉(cāng)庫(kù)來(lái)存儲(chǔ)podspec文件,如果開(kāi)源就可以上傳到Cocoapods公有的倉(cāng)庫(kù)窥淆。因此卖宠,創(chuàng)建私有庫(kù)之前我們先創(chuàng)建私有的spec repo。

創(chuàng)建私有Spec Repo

  1. 創(chuàng)建spec的git倉(cāng)庫(kù)
    http://192.168.1.100:3000/AndrewShen/MySpecRepo.git

  2. 添加創(chuàng)建的Spec Repo

使用命令行添加倉(cāng)庫(kù)到本地repo,會(huì)自動(dòng)建立git的鏈接

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

將會(huì)執(zhí)行:

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

執(zhí)行成功后可以執(zhí)行pod repo查看已有的repo

新建pod

從零開(kāi)始創(chuàng)建pod

  1. 如果需要從頭開(kāi)始寫(xiě)項(xiàng)目忧饭,開(kāi)發(fā)組件扛伍,那可以通過(guò)pod lib create來(lái)創(chuàng)建工程
    我們執(zhí)行
```Ruby
#pod lib create LIBNAME
pod lib create podDemo
```

之后會(huì)問(wèn)你四個(gè)問(wèn)題,問(wèn)完后自動(dòng)執(zhí)行`pod install`并生成依賴:
  1. 使用什么語(yǔ)言
  2. 是否需要一個(gè)例子工程
  3. 選擇一個(gè)測(cè)試框架
  4. 是否基于View測(cè)試
  5. 類的前綴
如果執(zhí)行`pod install`失敗词裤,則刪掉PodFile里的test target就行了刺洒。
  1. 創(chuàng)建成功后我們可以看到目錄結(jié)構(gòu),我們的pod會(huì)存在于Example項(xiàng)目的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中)和庫(kù)文件(Classes中)逆航,

  1. 在example文件夾下執(zhí)行pod update更新工程pod。成功后Development Pods目錄下我們的pod文件便會(huì)更新渔肩。只要更新了pod文件夾下內(nèi)容或者更改了podspec文件都需要執(zhí)行pod update

  2. 通過(guò)Cocoapods創(chuàng)建的項(xiàng)目會(huì)在本地的git管理下纸泡,我們需要將其添加到遠(yuǎn)程倉(cāng)庫(kù)。

```ruby
git add .
git commit -m "Initial"
git remote add origin http://git.celebi.com/AndrewShen/podDemo.git           #添加遠(yuǎn)端倉(cāng)庫(kù)
git push origin master     #提交到遠(yuǎn)端倉(cāng)庫(kù)
```
  1. 由于podspec文件pod源需要tag號(hào)赖瞒,因此我們需要為項(xiàng)目打上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          = '測(cè)試pod簡(jiǎn)介.' #簡(jiǎn)介女揭,需要更改,不然會(huì)報(bào)警告

# 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      #詳細(xì)介紹栏饮,要比簡(jiǎn)介長(zhǎng)
                        測(cè)試pod的詳細(xì)介紹
                       DESC

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

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

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

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

如果顯示為以下則說(shuō)明創(chuàng)建成功

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

從組件項(xiàng)目中創(chuàng)建pod

如果已經(jīng)有組件項(xiàng)目/Demo則只需要?jiǎng)?chuàng)建podspec文件。

  1. 執(zhí)行命令創(chuàng)建podspec文件:
pod spec create ADSSegmentedButton https://github.com/Andrewmika/ADSSegmentedButton.git
  1. 創(chuàng)建完成后打開(kāi)我們創(chuàng)建的podspec文件伺通,進(jìn)行編輯箍土。

  2. 驗(yàn)證文件是否可用

執(zhí)行命令`pod lib lint`

如果顯示為以下則說(shuō)明創(chuàng)建成功

```Ruby
-> ADSSegmentedButton (0.0.1)

ADSSegmentedButton passed validation.
```

pod本地測(cè)試

配置好podspec文件后可以在本地測(cè)試pod是否可用,然后發(fā)布到服務(wù)器上.
Podfile中指定pod罐监,可以指定路徑或者文件

platform :ios, '7.0'

pod 'PODNAME', :path => '項(xiàng)目路徑'      # 指定路徑
pod 'PODNAME', :podspec => 'podspec文件路徑'  # 指定podspec文件

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

pod私有庫(kù)發(fā)布

pod發(fā)布只需要在podspec文件下執(zhí)行一行命令,此命令會(huì)自動(dòng)將文件push到git倉(cāng)庫(kù)中:

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

如果想要看詳情可以加上選項(xiàng)--verbose弓柱。一般報(bào)錯(cuò)就是tag沒(méi)打好沟堡,提取不到tag代碼侧但,無(wú)法驗(yàn)證podspec也就無(wú)法push。

發(fā)布到CocoaPods

注冊(cè)帳號(hào)

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

將用戶名航罗,郵箱換成自己的禀横,給設(shè)備添加描述信息。由于CocoaPods沒(méi)有用戶名密碼粥血,使用的是驗(yàn)證令牌柏锄,所以換一臺(tái)電腦的話還需要執(zhí)行以上命令。
執(zhí)行成功后會(huì)提示以下信息,點(diǎn)擊連接完成注冊(cè)复亏。

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

完成后可以執(zhí)行命令pod trunk me查看自己賬戶信息趾娃。

發(fā)布pod

發(fā)布到公有庫(kù)也只需要一行命令:

pod trunk push [NAME.podspec]

之后也會(huì)驗(yàn)證podspec,通過(guò)后上傳。提交到公有庫(kù)速度比較慢蜓耻,需要耐心等待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末械巡,一起剝皮案震驚了整個(gè)濱河市刹淌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讥耗,老刑警劉巖有勾,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異古程,居然都是意外死亡蔼卡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門挣磨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雇逞,“玉大人,你說(shuō)我怎么就攤上這事茁裙√猎遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵晤锥,是天一觀的道長(zhǎng)掉蔬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)矾瘾,這世上最難降的妖魔是什么女轿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮壕翩,結(jié)果婚禮上蛉迹,老公的妹妹穿的比我還像新娘。我一直安慰自己放妈,他們只是感情好婿禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布赏僧。 她就那樣靜靜地躺著,像睡著了一般扭倾。 火紅的嫁衣襯著肌膚如雪淀零。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天膛壹,我揣著相機(jī)與錄音驾中,去河邊找鬼。 笑死模聋,一個(gè)胖子當(dāng)著我的面吹牛肩民,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播链方,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼持痰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了祟蚀?” 一聲冷哼從身側(cè)響起工窍,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎前酿,沒(méi)想到半個(gè)月后患雏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罢维,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年淹仑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺孵。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匀借,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出平窘,到底是詐尸還是另有隱情怀吻,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布初婆,位于F島的核電站蓬坡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏磅叛。R本人自食惡果不足惜屑咳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弊琴。 院中可真熱鬧兆龙,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至聪铺,卻和暖如春化焕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铃剔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工撒桨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人键兜。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓凤类,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親普气。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谜疤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容