IOS開發(fā)之建立私有CocoaPod項(xiàng)目

寫在前面

創(chuàng)建私有CocoaPod的文章有很多,而且寫的都很全面,我這里推薦下面兩篇文章供參考,其他部分是個(gè)人實(shí)操以及工作中的一些總結(jié)

建立私有倉(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)建的為例:

WX20180829-203511@2x.png

這里的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

參考文檔

  1. 入門文章:http://www.lxweimin.com/p/24aa2b9f6dda?nomobile=yes
  2. 進(jìn)階文章:http://www.cocoachina.com/ios/20150228/11206.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。