iOS創(chuàng)建自己的pod庫(kù)

一、背景

在iOS開發(fā)中旧巾,我們經(jīng)常會(huì)使用到一些第三方庫(kù),如AFNetworking忍些、SDWebImage等鲁猩,一般使用cocoapods來管理。本篇文章將介紹如何封裝自己的pod庫(kù)罢坝。

二廓握、封裝步驟

1. 在本地創(chuàng)建pod庫(kù)

利用pod命令創(chuàng)建了名為JCNetworking的pod庫(kù)

jiangchongdeMacBook-Pro:Desktop yellow$ pod lib create JCNetworking

執(zhí)行完上述命令之后,它會(huì)問你幾個(gè)問題嘁酿,按需求填寫即可

What platform do you want to use?? [ iOS / macOS ]
 > iOS

What language do you want to use?? [ Swift / ObjC ]
 > ObjC

Would you like to include a demo application with your library? [ Yes / No ]
 > Yes

Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None

Would you like to do view based testing? [ Yes / No ]
 > Yes

What is your class prefix?
 > JC

到這里pod庫(kù)就創(chuàng)建完成了隙券,它會(huì)自己打開剛才創(chuàng)建的pod庫(kù)。

目錄結(jié)構(gòu)如下圖

2.添加庫(kù)文件

我們創(chuàng)建一個(gè)簡(jiǎn)單的類闹司,聲明一個(gè)打印方法娱仔,以便后面檢測(cè)是否可用。

#import "JCNetworkManager.h"

@implementation JCNetworkManager

- (void)testPrint:(NSString *)text {
    
    NSLog(@"JCNetworkManager print == %@",text);
    
}

@end

將庫(kù)文件放入Classes文件夾里游桩,并刪除ReplaceMe.m

在Example路徑下執(zhí)行pod install命令牲迫,看看是否能將剛剛添加的庫(kù)文件引入到工程中

jiangchongdeMacBook-Pro:Desktop yellow$ cd JCNetworking/Example/
jiangchongdeMacBook-Pro:Example yellow$ pod install

pod install執(zhí)行完成后可以在工程中看到添加的文件已經(jīng)被成功引入

3. 修改JCNetworking.podspec

首先在github創(chuàng)建一個(gè)新的repository

修改JCNetworking.podspec文件

Pod::Spec.new do |s|
  s.name             = 'JCNetworking'
# 默認(rèn)版本號(hào)
  s.version          = '0.1.0' 
  s.summary          = 'A short description of JCNetworking.'

# 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
TODO: Add long description of the pod here.
                       DESC
# 主頁(yè)
  s.homepage         = 'https://github.com/huqigu/JCNetworking'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'huqigu' => 'huqigu@163.com' }
# source路徑
  s.source           = { :git => 'https://github.com/huqigu/JCNetworking.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.source_files = 'JCNetworking/Classes/**/*'
  
  # s.resource_bundles = {
  #   'JCNetworking' => ['JCNetworking/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
#嘗試引入第三方依賴庫(kù)
   s.dependency 'AFNetworking', '~> 2.3'
end

4. 項(xiàng)目發(fā)布

cd到項(xiàng)目路徑下執(zhí)行g(shù)it命令耐朴,將項(xiàng)目發(fā)布到上一步創(chuàng)建的github里。

yellow@jiangchongdeMacBook-Pro  ~  cd /Users/yellow/Desktop/JCNetworking
// 添加github項(xiàng)目路徑
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master ●  git remote add origin https://github.com/huqigu/JCNetworking.git
// 添加文件
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master ●  git add .
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master ?  git commit -m "first commit"
# --allow-unrelated-histories
# git pull origin maste會(huì)失敗 ,提示:fatal: refusing to merge unrelated histories
# 原因是遠(yuǎn)程倉(cāng)庫(kù)origin上的分支master和本地分支master被Git認(rèn)為是不同的倉(cāng)庫(kù)盹憎,所以不能直接合并筛峭,需要添加 --allow-unrelated-histories
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master  git pull origin master --allow-unrelated-histories
// 推送到master分支
? yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master  git push origin master
// 提交版本號(hào)并push
#注意這里的版本號(hào)要與.podspec中的版本號(hào)保持一致
 yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master  git tag 0.1.0
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master  git push origin 0.1.0

執(zhí)行完上述命令之后可以去github上查看是否已經(jīng)推送上去了。

5. 嘗試使用

我們新建一個(gè)項(xiàng)目并引用我們的pod庫(kù) 看看是否能成功pod下了脚乡。

項(xiàng)目的podfile如下:

target 'TestSDK' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
'jc',:inhibit_warnings => true
  pod 'JCNetworking',:git =>"https://github.com/huqigu/JCNetworking.git"
  # Pods for TestSDK

  target 'TestSDKTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'TestSDKUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

執(zhí)行pod命令:

yellow@jiangchongdeMacBook-Pro  ~/Desktop/testSDK/TestSDK  pod install
Analyzing dependencies
Pre-downloading: `JCNetworking` from `https://github.com/huqigu/JCNetworking.git`, commit `1fbdb285f6b6702b4ba35747951625cf29f4a380`
Downloading dependencies
Installing JCNetworking (0.0.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

在項(xiàng)目里使用pod庫(kù)中的方法

6. 總結(jié)

我們還可以在.podspec文件中指定其他的依賴蜒滩,比如我們想基于AFNetworking,封裝一套屬于自己的網(wǎng)絡(luò)請(qǐng)求庫(kù)奶稠,那么我們就可以一并將AFNetworking也pod下了俯艰,只需要增加一行代碼即可

#嘗試引入第三方依賴庫(kù)
s.dependency 'AFNetworking', '~> 2.3'

我們的私有庫(kù)創(chuàng)建就介紹到這里,多強(qiáng)大的功能還需要自己去挖掘锌订。

更新

將podspec推送到cocoapods倉(cāng)庫(kù)

執(zhí)行如下命令

// 郵箱為github綁定的郵箱竹握,會(huì)發(fā)送一封帶有鏈接的郵件,打開鏈接即完成注冊(cè)
yellow@jiangchongdeMacBook-Pro  ~  pod trunk register huqigu@163.com 'mxObject-c' --description='regist trunk'
// 然后將倉(cāng)庫(kù)推送到cocoapods上
yellow@jiangchongdeMacBook-Pro  ~/Desktop/JCNetworking   master ●  pod trunk push JCNetworking.podspec --allow-warnings
// 出現(xiàn)如下信息表示上傳成功
??  Congrats

 ??  JCNetworking (0.1.0) successfully published
 ??  February 27th, 21:23
 ??  https://cocoapods.org/pods/JCNetworking
 ??  Tell your friends!

上傳成功之后可以直接使用 pod 'JCNetworking'進(jìn)行引用辆飘,而不需要添加git鏈接啦辐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜈项,隨后出現(xiàn)的幾起案子芹关,更是在濱河造成了極大的恐慌,老刑警劉巖紧卒,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侥衬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡跑芳,警方通過查閱死者的電腦和手機(jī)轴总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來博个,“玉大人怀樟,你說我怎么就攤上這事∨栌叮” “怎么了往堡?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罪塔。 經(jīng)常有香客問我投蝉,道長(zhǎng),這世上最難降的妖魔是什么征堪? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任瘩缆,我火速辦了婚禮,結(jié)果婚禮上佃蚜,老公的妹妹穿的比我還像新娘庸娱。我一直安慰自己着绊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布熟尉。 她就那樣靜靜地躺著归露,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斤儿。 梳的紋絲不亂的頭發(fā)上剧包,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音往果,去河邊找鬼疆液。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陕贮,可吹牛的內(nèi)容都是我干的堕油。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼肮之,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掉缺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戈擒,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤眶明,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后筐高,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赘来,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年凯傲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嗦篱。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冰单,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灸促,到底是詐尸還是另有隱情诫欠,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布浴栽,位于F島的核電站荒叼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏典鸡。R本人自食惡果不足惜被廓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萝玷。 院中可真熱鬧嫁乘,春花似錦昆婿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挎春,卻和暖如春看疙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背直奋。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工能庆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帮碰。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓相味,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親殉挽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丰涉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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