10月23日更新
私有庫A與私有庫B之間的依賴處理:
例如私有庫B依賴于私有庫A而柑,在私有庫B本地驗(yàn)證時(shí):
pod lib lint
會(huì)報(bào)錯(cuò)寻馏,提示找不到私有庫A驱闷。
執(zhí)行命令為:
pod lib lint --sources='http://[privateLibName]/cocoaspecs.git,https://github.com/CocoaPods/Specs.git'
關(guān)鍵詞:庫、模塊式開發(fā)敲董、CocoaPods紫皇、私有庫、
工具:終端腋寨、git聪铺、CocoaPods
步驟總結(jié):
1、打開終端萄窜,進(jìn)入要建立私有庫項(xiàng)目工程的路徑铃剔,并執(zhí)行pod庫工程創(chuàng)建命令行
2、進(jìn)入我們的Example項(xiàng)目工程查刻,執(zhí)行安裝CocoaPods項(xiàng)目命令行
3键兜、添加庫源碼文件
4、書寫CocoaPods配置文件LATAlert.podspec(建議使用Atom + cocoa-pods-ruby-snippets插件來編輯該文件)
5穗泵、創(chuàng)建私有庫git地址普气,并完善.podspec配置文件
6、再次進(jìn)入我們的Example文件佃延,執(zhí)行pod更新指令现诀,安裝本地庫源碼
7、添加樣例代碼履肃,運(yùn)行樣例測試
8赶盔、本地pod配置文件驗(yàn)證
9、項(xiàng)目工程發(fā)布tag 0.0.1
10榆浓、私有庫發(fā)布
11于未、驗(yàn)證發(fā)布的私有庫
涉及到的命令行:
Git:
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git remote add origin https://git.oschina.net/KKLater/LATAlert.git
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git add .
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git commit -a -m "0.0.1"
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git pull origin master
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git push origin master
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git tag 0.0.1
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git push origin 0.0.1
Pod:
Later@localhost:~/Desktop/私有庫創(chuàng)建教程$ pod lib create LATAlert
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ pod install --no-repo-update
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ pod update --no-repo-update
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod repo add LATSpecs https://git.oschina.net/KKLater/LATPodspecs.git
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod lib lint
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod lib lint --verbose
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec --verbose
Later@localhost:~$ pod repo remove LATSpecs
下面我們通過一個(gè)例子來具體講解整個(gè)步驟流程。
例子里面陡鹃,我們創(chuàng)建一個(gè)私有庫LATAlert烘浦,導(dǎo)入LATAlert私有庫的項(xiàng)目,可以調(diào)用私有庫的方法來執(zhí)行彈出一個(gè)Alert顯示信息萍鲸!
1闷叉、打開終端,進(jìn)入要建立私有庫項(xiàng)目工程的路徑脊阴,并執(zhí)行pod庫工程創(chuàng)建命令行
Later@localhost:~$ cd /Users/Later/Desktop/私有庫創(chuàng)建教程
Later@localhost:~/Desktop/私有庫創(chuàng)建教程$ pod lib create LATAlert
終端得到以下界面:
這里會(huì)詢問幾個(gè)問題(答案根據(jù)實(shí)際情況設(shè)置)握侧,分別是:
1蚯瞧、語言選擇
—— 教程選擇Objc,如果要做Swift私有庫品擎,請(qǐng)選擇輸入Swift
2埋合、是不是需要一個(gè)demo項(xiàng)目工程
? —— 教程選擇Yes,需要?jiǎng)?chuàng)建一個(gè)demo工程萄传,建議創(chuàng)建一個(gè)demo工程
3甚颂、測試框架使用哪一個(gè)
? —— 教程選擇None
4、是不是需要做基本的測試
? —— 教程選擇Yes
5秀菱、類前綴是什么
? —— 教程輸入LAT
如果出現(xiàn)上面的界面振诬,說明,私有庫工程創(chuàng)建成功了衍菱。
2赶么、進(jìn)入我們的Example項(xiàng)目工程,執(zhí)行安裝CocoaPods項(xiàng)目命令行
Later@localhost:~$ cd /Users/Later/Desktop/私有庫創(chuàng)建教程/LATAlert/Example
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ pod install --no-repo-update
終端界面如下:
雙擊LATAlert.xcworkspace運(yùn)行項(xiàng)目Example工程脊串,驗(yàn)證工程的正確性禽绪。
3、添加庫源碼文件
將源碼文件復(fù)制到文件夾路徑:LATAlert/LATAlert/Classes下洪规。
注:1.如果還沒有源碼印屁,則可以在Example下直接創(chuàng)建源碼文件,實(shí)際測試通過后斩例,再按照下面的方式來添加源碼文件雄人。2.方便起見這里直接將之前使用的源碼文件拷貝過來,其他根據(jù)實(shí)際情況念赶,看官自行添加础钠。3.文件路徑并不是絕對(duì)的,但是建議按指定路徑存放叉谜,便于整體的后期維護(hù)更新
4旗吁、書寫CocoaPods配置文件LATAlert.podspec(建議使用Atom + cocoa-pods-ruby-snippets插件來編輯該文件)
雙擊打開LATAlert.podspec文件,此處我設(shè)置了默認(rèn)Atom打開停局,看官自行配置很钓,但是要注意編輯內(nèi)容一定要教程一樣。
我們可以把沒有用的注釋刪掉董栽。具體常用的配置如下:
#
# Be sure to run `pod lib lint LATAlert.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
#庫名
s.name = 'LATAlert'
#庫版本
s.version = '0.0.1'
#庫簡短描述
s.summary = 'A short description of LATAlert.'
#庫詳細(xì)描述
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
#庫介紹主頁地址
s.homepage = 'https://github.com/<GITHUB_USERNAME>/LATAlert'
#庫開源許可
s.license = { :type => 'MIT', :file => 'LICENSE' }
#作者信息
s.author = { 'Later' => 'lshxin89@126.com' }
#源碼git地址
s.source = { :git => 'https://github.com/<GITHUB_USERNAME>/LATAlert.git', :tag => s.version.to_s }
#庫依賴系統(tǒng)版本
s.ios.deployment_target = '8.0'
#源碼文件配置
s.source_files = 'LATAlert/Classes/**/*'
#資源文件配置
s.resource_bundles = {
'LATAlert' => ['LATAlert/Assets/*.png']
}
#源碼頭文件配置
s.public_header_files = 'Pod/Classes/**/*.h'
#系統(tǒng)框架依賴
s.frameworks = 'UIKit', 'MapKit'
#第三方框架依賴
s.dependency 'AFNetworking', '~> 2.3'
end
清理掉不需要的配置項(xiàng)之后码倦,整體如下:
Pod::Spec.new do |s|
#庫名
s.name = 'LATAlert'
#庫版本
s.version = '0.0.1'
#庫簡短描述
s.summary = 'A short description of LATAlert.'
#庫詳細(xì)描述
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
#庫介紹主頁地址
s.homepage = 'https://github.com/<GITHUB_USERNAME>/LATAlert'
#庫開源許可
s.license = { :type => 'MIT', :file => 'LICENSE' }
#作者信息
s.author = { 'Later' => 'lshxin89@126.com' }
#源碼git地址
s.source = { :git => 'https://github.com/<GITHUB_USERNAME>/LATAlert.git', :tag => s.version.to_s }
#庫依賴系統(tǒng)版本
s.ios.deployment_target = '8.0'
#源碼文件配置
s.source_files = 'LATAlert/Classes/**/*'
#源碼頭文件配置
s.public_header_files = 'LATAlert/Classes/*.h'
#系統(tǒng)框架依賴
s.frameworks = 'UIKit'
end
細(xì)心的看官注意到,這里我們使用的homepage和source并不完整下面就需要我們創(chuàng)建一個(gè)git私有庫锭碳,用于項(xiàng)目工程的存放袁稽,獲取我們所需要的地址。
5擒抛、創(chuàng)建私有庫git地址推汽,并完善.podspec配置文件
為了節(jié)省點(diǎn)毛爺爺补疑,我們使用更切近中國國情的oschina進(jìn)行我們的項(xiàng)目代碼托管。
創(chuàng)建私有庫界面如下:
點(diǎn)擊創(chuàng)建歹撒,我們的私有庫就創(chuàng)建完成了莲组,復(fù)制我們的私有庫地址,也就是我們的.podspec文件里面source所需要的地址了栈妆。
source有了,但是我們的homepage怎么辦呢厢钧?如果有可以訪問的高大上的介紹網(wǎng)頁頁面鳞尔,建議使用其網(wǎng)址,如果實(shí)在沒有早直,趕緊去開發(fā)一個(gè)吧寥假。這里使用我們的mobile網(wǎng)址:http://mobile.fblife.com。(感興趣的看官可以打開看看霞扬,很高大上的哦糕韧。哈哈,開個(gè)玩笑喻圃,公司App推廣頁而已萤彩。)
至此,我們的配置文件就結(jié)束了斧拍。此時(shí)細(xì)心的看客又說了雀扶,我們創(chuàng)建了git私有庫,但是還沒有添加文件八列凇愚墓?恩恩,別急別急昂勉,慢慢來浪册,俗話說“心機(jī)吃不到熱…”。別笑岗照,看官你又開火車了村象!
6、再次進(jìn)入我們的Example文件攒至,執(zhí)行pod更新指令煞肾,安裝本地庫源碼
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ pod update --no-repo-update
終端截圖如下:
此時(shí)進(jìn)入我們的Example文件夾,雙擊LATAlert.xcworkspace打開看看:
我們的源碼已經(jīng)在里面了嗓袱。
這時(shí)籍救,可以填寫我們的樣例代碼來進(jìn)行測試嘍。
7渠抹、添加樣例代碼蝙昙,運(yùn)行樣例測試
找到我們的樣例文件LATViewController.m闪萄,引入頭文件LATAlert.h,填寫代碼奇颠,點(diǎn)擊屏幕時(shí)執(zhí)行彈出Alert提示框败去,具體代碼如下:
//
// LATViewController.m
// LATAlert
//
// Created by Later on 10/14/2016.
// Copyright (c) 2016 Later. All rights reserved.
//
#import "LATViewController.h"
#import "LATAlert.h"
@interface LATViewController ()
@end
@implementation LATViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[LATAlert showAlertWithTitle:@"測試" message:@"這時(shí)測試信息" OkBlock:^{
NSLog(@"點(diǎn)擊了確認(rèn)");
}];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
運(yùn)行項(xiàng)目測試:
alert信息彈出了,說明烈拒,我們的本地運(yùn)行例程是正常的圆裕。下面就需要我們把項(xiàng)目發(fā)布到git,并添加到pod了荆几。
8吓妆、本地pod配置文件驗(yàn)證
為了保證項(xiàng)目的正確性,尤其是pod配置文件的正確性吨铸,在正式提交前行拢,我們需要執(zhí)行以下本地驗(yàn)證。在本地驗(yàn)證正常的情況下诞吱,再上傳發(fā)布還是比較穩(wěn)妥的舟奠。
終端進(jìn)入我們的項(xiàng)目文件路徑:
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ cd /Users/Later/Desktop/私有庫創(chuàng)建教程/LATAlert
如果現(xiàn)在終端正處于Example文件路徑下,也可以執(zhí)行
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert/Example$ cd ..
退回到上層文件夾房维,也就是我們的項(xiàng)目文件路徑了沼瘫。
執(zhí)行pod本地驗(yàn)證指令:
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod lib lint
界面顯示:
如果經(jīng)驗(yàn)豐富,大概一看便知這里的警告是告訴我們這個(gè)summary簡介不是很有內(nèi)涵咙俩。此處我們改一下我們的podspec文件內(nèi)部的簡介和描述晕鹊,消除下警告。修改完的podspec文件如下暴浦。
#
# Be sure to run `pod lib lint LATAlert.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
#庫名
s.name = 'LATAlert'
#庫版本
s.version = '0.0.1'
#庫簡短描述
s.summary = 'LATAlert pod Use.'
#庫詳細(xì)描述
s.description = <<-DESC
TODO: LATAlert pod Use.
DESC
#庫介紹主頁地址
s.homepage = 'http://mobile.fblife.com'
#庫開源許可
s.license = { :type => 'MIT', :file => 'LICENSE' }
#作者信息
s.author = { 'Later' => 'lshxin89@126.com' }
#源碼git地址
s.source = { :git => 'https://git.oschina.net/KKLater/LATAlert.git', :tag => s.version.to_s }
#庫依賴系統(tǒng)版本
s.ios.deployment_target = '8.0'
#源碼文件配置
s.source_files = 'LATAlert/Classes/**/*'
#源碼頭文件配置
s.public_header_files = 'LATAlert/Classes/*.h'
#系統(tǒng)框架依賴
s.frameworks = 'UIKit'
end
鑒于是初學(xué)者溅话,還是建議掌握下查看具體原因的指令比較靠譜。具體指令也很簡單歌焦,在執(zhí)行本地驗(yàn)證的指令后面添加上--verbose在執(zhí)行下就可以了飞几。
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod lib lint --verbose
我們?cè)俅螆?zhí)行下驗(yàn)證,查看結(jié)果独撇,BUILD SUCCEEDD屑墨,本地驗(yàn)證成功:
至此,我們的源碼已經(jīng)導(dǎo)入纷铣、樣例工程已經(jīng)驗(yàn)證執(zhí)行卵史、podspec配置文件本地已經(jīng)驗(yàn)證,那么我們是不是就可以直接在pod里面使用了呢搜立?答案是肯定的以躯,還是不行!目前只是處于本地狀態(tài),并沒有發(fā)布忧设,所以還是不能使用的刁标。
9、項(xiàng)目工程發(fā)布tag 0.0.1
在項(xiàng)目工程文件下執(zhí)行g(shù)it相關(guān)指令址晕,并添加tag0.0.1膀懈,發(fā)布到git。
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git remote add origin https://git.oschina.net/KKLater/LATAlert.git
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git add .
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git commit -a -m "0.0.1"
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git pull origin master
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git push origin master
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git tag 0.0.1
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ git push origin 0.0.1
相關(guān)指令執(zhí)行結(jié)束后谨垃,此時(shí)我們?cè)偃タ次覀兊膅it項(xiàng)目:
10启搂、私有庫發(fā)布
對(duì)于開源框架,podspec文件實(shí)在cocoapod的開源管理spec項(xiàng)目上面的刘陶,見下圖:
在這里的Specs文件加內(nèi)胳赌,我們能看到我們熟悉的 AFNetworking
但是我們創(chuàng)建的是私有庫,所以我們需要?jiǎng)?chuàng)建自己的Specs管理庫易核。
例如我們要?jiǎng)?chuàng)建的是LATSpecs匈织,首先需要再創(chuàng)建一個(gè)git私有庫浪默,用于管理我們的LATSpecs牡直。
創(chuàng)建之后獲取到git地址:https://git.oschina.net/KKLater/LATPodspecs.git
在終端執(zhí)行Specs創(chuàng)建指令:
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod repo add LATSpecs https://git.oschina.net/KKLater/LATPodspecs.git
執(zhí)行之后的結(jié)果是:
看到這個(gè),我們可以愉快的發(fā)布了纳决。執(zhí)行發(fā)布命令碰逸,直接發(fā)布好了。
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec
發(fā)布成功之后阔加,我們來看一下我們的LATSpecs的git項(xiàng)目:
查看我們本地的Specs庫:
直接Findle ->右鍵 -> 前往文件夾 -> 輸入:~/.cocoapods/repos ->點(diǎn)擊前往
至此饵史,我們的私有庫創(chuàng)建發(fā)布結(jié)束。但是我們注意到胜榔,LATSpecs的README.md文件是空的胳喷,為了后期的維護(hù)更新,以及團(tuán)隊(duì)小伙伴的使用方便夭织,建議完備一下信息吭露。
完備之后的信息如下:
終端執(zhí)行一下進(jìn)入我們的私有庫管理Specs,git更新提交下:
Later@localhost:~$ cd /Users/Later/.cocoapods/repos/LATSpecs
Later@localhost:~/.cocoapods/repos/LATSpecs$ git add .
Later@localhost:~/.cocoapods/repos/LATSpecs$ git commit -a -m "Add LATAlert"
Later@localhost:~/.cocoapods/repos/LATSpecs$ git pull origin master
Later@localhost:~/.cocoapods/repos/LATSpecs$ git push origin master
命令行執(zhí)行結(jié)束之后尊惰,我們?cè)倏匆幌挛覀兊膅it:
有沒有高大上呢讲竿?
既然已經(jīng)提交發(fā)布,那下面我們新建一個(gè)CocoaPods管理的項(xiàng)目弄屡,來驗(yàn)證一下我們的庫吧题禀。
11、驗(yàn)證發(fā)布的私有庫
新建PodTest項(xiàng)目膀捷,并創(chuàng)建Podfile文件迈嘹,安裝CocoaPods工程。
Podfile文件內(nèi)的代碼如下:
platform :ios,'8.0'
target 'PodTest' do
pod 'LATAlert',:git => 'https://git.oschina.net/KKLater/LATAlert.git'
end
終端進(jìn)入我們的測試工程根目錄全庸,并執(zhí)行pod安裝指令:
Later@localhost:~$ cd /Users/Later/Desktop/私有庫創(chuàng)建教程/PodTest
Later@localhost:~/Desktop/私有庫創(chuàng)建教程/PodTest$ pod install --no-repo-update
終端界面如下:
我們重新打開測試項(xiàng)目:
在ViewController.m文件導(dǎo)入文件江锨,并按照Example的樣例書寫代碼驗(yàn)證吃警。代碼如下:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[LATAlert showAlertWithTitle:@"測試" message:@"這時(shí)測試信息" OkBlock:^{
NSLog(@"點(diǎn)擊了確認(rèn)");
}];
}
不同的是,這里引入頭文件時(shí)啄育,我們使用的是:#import <LATAlert/LATAlert.h>而不是Example樣例工程里面的引入方式:#import "LATAlert.h"酌心。
運(yùn)行PodTest項(xiàng)目,點(diǎn)擊屏幕挑豌,是不是也彈出Alert提示了呢安券?
至此,我們的私有庫發(fā)布結(jié)束氓英。具體更詳細(xì)的信息侯勉,建議各位看客多多參考CocoaPods官網(wǎng),會(huì)有更不一樣的體驗(yàn)铝阐。英語不好的址貌,體驗(yàn)會(huì)更加深刻喲!