寫在前面
創(chuàng)建私有CocoaPod的文章有很多,而且寫的都很全面,我這里推薦下面兩篇文章供參考,其他部分是個(gè)人實(shí)操以及工作中的一些總結(jié)
- 入門文章:手把手教你利用cocoapod搭建私有庫(kù)
- 進(jìn)階文章:使用Cocoapods創(chuàng)建私有podspec
建立私有倉(cāng)庫(kù)需要的工具(2個(gè)倉(cāng)庫(kù),1個(gè)配置)
1. 在gitHub上建立一個(gè)git倉(cāng)庫(kù),代表repo specs倉(cāng)庫(kù),它的作用主要是用來(lái)存放pods庫(kù)的索引;
說(shuō)明:
repo specs倉(cāng)庫(kù),就是一個(gè)容器,它包含了所含Pods庫(kù)的一個(gè)索引(每一個(gè)庫(kù)的spec文件),當(dāng)你使用了Cocoapods后它會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了。里面的結(jié)構(gòu)如下:
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
如果說(shuō)自己想有個(gè)類似于cocoaPods的倉(cāng)庫(kù),然后想把所有自己寫的pod庫(kù)(如:AFNetworking...)管理起來(lái),那這個(gè)repo specs就是這個(gè)作用。如果說(shuō)別人已經(jīng)有了這個(gè)repo specs,你也可以不自己建立這個(gè)repo,直接把你寫好的pod庫(kù)代碼推到他指定的倉(cāng)庫(kù)即可。
2. 在gitHub上再建立一個(gè)倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)暫且稱其為pod代碼庫(kù)(*.a或者framework),因?yàn)檫@個(gè)倉(cāng)庫(kù)主要存放著你按照pod規(guī)范寫的共享代碼;
說(shuō)明:
為了使我們的庫(kù)符合規(guī)范,我們直接用cocoaPod給我們提供的工具即可pod lib create MyLibrary,具體用法可以參考Using Pod Lib Create這里就不多加贅述。創(chuàng)建好以后,結(jié)構(gòu)如下:
MyLib
├── .travis.yml
├── _Pods.xcproject
├── Example
│ ├── MyLib
│ ├── MyLib.xcodeproj
│ ├── MyLib.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLib.podspec
├── Pod
│ ├── Assets
│ └── Classes
│ └── RemoveMe.[swift/m]
└── README.md
可以看到,MyLib.podspec已經(jīng)為我們創(chuàng)建好了。
以我自己在gitHub上創(chuàng)建的為例:
這里的NetworkSpecs就是索引倉(cāng)庫(kù)(repo Specs),Network是代碼pod倉(cāng)庫(kù),也就是我要分享出去的代碼;
3. 對(duì)pod庫(kù)中的podspec文件進(jìn)行配置,它相當(dāng)于一個(gè)描述文件,指定你pod庫(kù)的地址,tag等等信息。怎么配,查看官方文檔podSpecs配置官網(wǎng)
Pod::Spec.new do |s|
s.name = "PodTestLibrary" #名稱
s.version = "0.1.0" #版本號(hào)
s.summary = "Just Testing." #簡(jiǎn)短介紹,下面是詳細(xì)介紹
s.description = <<-DESC
Testing Private Podspec.
* Markdown format.
* Don't worry about the indent, we strip it!
DESC
s.homepage = "https://coding.net/u/wtlucky/p/podTestLibrary" #主頁(yè),這里要填寫可以訪問(wèn)到的地址,不然驗(yàn)證不通過(guò)
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" #截圖
s.license = 'MIT' #開源協(xié)議
s.author = { "wtlucky" => "wtlucky@foxmail.com" } #作者信息
s.source = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" } #項(xiàng)目地址,這里不支持ssh的地址,驗(yàn)證不通過(guò),只支持HTTP和HTTPS,最好使用HTTPS
# s.social_media_url = 'https://twitter.com/' #多媒體介紹地址
s.platform = :ios, '7.0' #支持的平臺(tái)及版本
s.requires_arc = true #是否使用ARC,如果指定具體文件,則具體的問(wèn)題使用ARC
s.source_files = 'Pod/Classes/**/*' #代碼源文件地址,**/*表示Classes目錄及其子目錄下所有文件,如果有多個(gè)目錄下則用逗號(hào)分開,如果需要在項(xiàng)目中分組顯示,這里也要做相應(yīng)的設(shè)置
s.resource_bundles = {
'PodTestLibrary' => ['Pod/Assets/*.png']
} #資源文件地址
s.public_header_files = 'Pod/Classes/**/*.h' #公開頭文件地址
s.frameworks = 'UIKit' #所需的framework,多個(gè)用逗號(hào)隔開
s.dependency 'AFNetworking', '~> 2.3' #依賴關(guān)系,該項(xiàng)目所依賴的其他庫(kù),如果有多個(gè)需要填寫多個(gè)s.dependency
end
有了上面的東西,其他的步驟就簡(jiǎn)單了:
- 給pod庫(kù)代碼打tag,注意要和spec中的tag對(duì)應(yīng)
- 驗(yàn)證spec文件中的信息正確性(非必須)命令:pod lib lint
- 上傳spec文件到repo specs庫(kù)中 命令:pod repo push
上傳命令,官方說(shuō)明:
Usage:
$ pod repo push REPO [NAME.podspec]
Validates `NAME.podspec` or `*.podspec` in the current working dir,
creates a directory and version folder for the pod in the local copy of
`REPO` (/Users/mac/.cocoapods/repos/[REPO]), copies the podspec file into
the version directory, and finally it pushes `REPO` to its remote.
Options:
--allow-warnings Allows pushing even if
there are warnings
--use-libraries Linter uses static
libraries to install the
spec
--use-modular-headers Lint uses modular headers
during installation
--sources=https://github.com/artsy/Specs,master The sources from which to
pull dependent pods
(defaults to all available
repos). Multiple sources
must be comma-delimited.
--local-only Does not perform the step
of pushing REPO to its
remote
--no-private Lint includes checks that
apply only to public repos
--skip-import-validation Lint skips validating that
the pod can be imported
--skip-tests Lint skips building and
running tests during
validation
--commit-message="Fix bug in pod" Add custom commit message.
Opens default editor if no
commit message is
specified.
--use-json Push JSON spec to repo
--swift-version=VERSION The SWIFT_VERSION that
should be used when
linting the spec. This
takes precedence over a
.swift-version file.
--no-overwrite Disallow pushing that
would overwrite an
existing spec.
--silent Show nothing
--verbose Show more debugging
information
--no-ansi Show output without ANSI
codes
--help Show help banner of
specified command
使用到的一些命令:
1. pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
pod repo add [xxx] https:``//[coding.net/wtlucky/WTSpecs.git](http://coding.net/wtlucky/WTSpecs.git)
將索引倉(cāng)庫(kù)克隆到~/.cocoapod/repo這個(gè)目錄下面,所有cocoaPod管理的索引倉(cāng)庫(kù)都在這個(gè)下面,
本地倉(cāng)庫(kù)名字可以自定義哈
2、 pod lib create [代碼倉(cāng)庫(kù)名稱]
這個(gè)命令是來(lái)創(chuàng)建pod代碼倉(cāng)庫(kù),按照提示一路向西
3、pod lib lint --allow-warnings
用來(lái)本地驗(yàn)證podspec文件是否有效
最好能本地驗(yàn)一下,盡早發(fā)現(xiàn)錯(cuò)誤,要不然你上傳的時(shí)候它會(huì)遠(yuǎn)程校驗(yàn),出錯(cuò)的話會(huì)花費(fèi)很長(zhǎng)時(shí)間
。 --allow-warnings忽略警告驗(yàn)證podspec文件是否有誤。
4、pod spec lint --allow-warnings
遠(yuǎn)程驗(yàn)證,知道就行了,感覺沒必要
5、pod repo push REPO [NAME.podspec]
`$ pod repo push [WTSpecs] [PodTestLibrary.podspec] --allow-warnings ``
前面是本地repo名字 后面是podspec名字,前提是要cd到podspec文件所在的目錄
repo的名字就是你之前自己定義的
備注:
如果我們的pod庫(kù)依賴于其他的私有庫(kù),那么在提交的時(shí)候需要加入私有庫(kù)所在的源:
pod repo push 10101111-ucar_ios_team-specs UCARIntelligenceUnit.podspec --verbose --use-libraries --allow-warnings --sources=``"[http://gitlab.10101111.com:8888/ucar_ios_platform/specs.git,master"](http://gitlab.10101111.com:8888/ucar_ios_platform/specs.git,master)`
遇到的問(wèn)題
pod search找不到自己trunk push的庫(kù)的解決方法
參考地址:https://blog.csdn.net/callzjy/article/details/70171868