創建私有Pod庫

步驟總覽

  • 創建一個git倉庫用來做內部私有庫的Spec Repo
  • 創建私有Pod組件庫
  • podspec文件加入私有Sepc Repo
  • 查找和使用內部組件庫

創建一個git倉庫用來做內部私有庫的Spec Repo

image.png

創建私有Pod組件庫

  • 了解原理
    • pod install命令的時候,為什么可以直接把代碼或者資源直接導入到我們的工程的?其實在我們的本地有目前支持cocoapods所有項目的信息,我們可以打開~/.cocoapods/repos/Specs目錄,目錄里面有很多的文件夾,在這些文件夾中我們項目中所使用的第三庫NIMSDK,進入目錄下,我們搜索NIMSDK,會發現有很多NIMSDK.podspec.json文件,這是一個json格式的文件,打開后看到下面的代碼,對比這些同名字的,主要是版本號的不同
      image.png

      image.png
    • 上圖可以清楚看到有關NIMSDK的信息,比如git地址,開源協議,簡介等。有了這些數據cocoapods就可以找到需要同步的資源的位置。在Specs文件夾下的所有索引信息其實都是從cocoapods的官方git主分支https://github.com/CocoaPods/Specs上同步下來的。整個cocoapods的運作過程可以參照下圖
    • 通過上述簡介,其實制作cocoapods倉庫的步驟無非就兩步:
      • 制作podspec索引文件,文件中放入需要同步的資源的git或者svn地址
      • 把制作的podspec索引文件推到官方的git遠程主分支上
  • 如果我們的庫是新建的,那么別的使用者的本地分支上是沒有對應的.podspec.json文件的,也就相應獲取不到。這個時候使用者需要使用pod repo update命令去遠程重新獲取更新本地分支
  • ~/.cocoapods/repos文件是一個隱藏目錄,默認是看不到隱藏目錄的,但是我們可以通過Terminal執行以下命令控制隱藏文件的顯示與否
    defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 顯示
    defaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder 隱藏
  • pod install 和 pod update 的區別
    使用install 會優先安裝Podfile.lock文件中的內容,而不會主動更新Podfile.lock文件.而執行pod update方法會主動獲取最新的庫,并更新Podfile.lock文件,這兩個命令都會升級CocoaPods的spec倉庫
  • 創建私有Spec Repo
    • Terminal執行以下命令
      # pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
      pod repo add YTDevice https://github.com/Yakov1012/YTDevice.git
      image.png
    • 前后可以看到~/.cocoapods/repos/Specs的變化,多出來我們自己新建的YTDeviceRepo
      image.png

      image.png
  • 創建私有Pod組件庫
    • Terminalcd進入要創建項目的目錄
      桌面目錄
    • 然后執行以下命令
      #pod lib create [項目名]
      pod lib create YTDevice
    • 之后他會問你四個問題
      • 是否需要一個例子工程
      • 選擇一個測試框架
      • 是否基于View測試
      • 類的前綴
image.png
  • 回答完以上問題,會自動在桌面創建一個YTDevice項目

├── Example
demo APP
│ ├── YTDevice.xcodeproj
│ ├── YTDevice.xcworkspace
│ ├── Podfile
demo APP 的依賴描述文件
│ ├── Podfile.lock
│ └── Tests
demo APP 的依賴文件
│ ├── Pods
demo APP組件的目錄
├── LICENSE
開源協議 默認MIT
│ ├── Assets
資源文件
│ └── Classes
│ │ └── ReplaceMe.m 此處用于存放自己實現庫的相關代碼!!!
類文件
├── YTDevice.podspec
第三步要創建的podspec文件
└── README.md
MarkDown格式的README

  • 添加實現代碼
    • YTDevice項目中,添加我們的實現代碼,注意把實現代碼加入到ReplaceMe.m所在目錄
      image.png
    • 開發模式下測試pod庫的代碼
    • 打開Example工程目錄Podfile文件
      pod 'MyLib', :path => '../' # 指定路徑
    • 然后在Example工程目錄下執行pod update命令安裝依賴,打開項目工程,可以看到庫文件都被加載到Pods子項目中了,不過它們并沒有在Pods目錄下,而是跟測試項目一樣存在于Development Pods/YTDevcie中,這是因為我們是在本地測試,而沒有把podspec文件添加到Spec Repo中的緣故
      image.png
  • 本地pod組件庫,與遠程git庫鏈接
    Terminalcd進入YTDevice項目的根目錄,并執行以下命令
git add . # 添加文件
git commit -s -m "初始化YTDeviece庫"
git remote add origin https://github.com/Yakov1012/YTDevice.git #與遠端倉庫鏈接
git push origin master #提交到遠端倉庫
git tag -m "first release" '1.0.1' #打上標簽,這個很重要
git push --tags #推送tag到遠端倉庫

podspec文件加入私有Sepc Repo

  • 配置YTDevice庫的podspec文件
    image.png
#
# Be sure to run `pod lib lint YTDevice.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             = 'YTDevice'
  s.version          = '1.0.1'
  s.summary          = 'YTDevice.'

# 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
設備工具類,可查詢當前設備名稱,版本號等
                       DESC

  s.homepage         = 'https://github.com/Yakov1012/YTDevice'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'Yakov1012' => '1446486761@qq.com' }
  s.source           = { :git => 'https://github.com/Yakov1012/YTDevice.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

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

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end
  • 編輯完YTDevice.podspec文件后,需要驗證一下這個YTDevice.podspec文件是否可用
    • Terminal中執行cd進入YTDevice項目根目錄然后,執行命令pod lib lint
    • 看到以下輸出代表驗證成功


      image.png

      image.png
  • Example工程目錄下執行pod update命令安裝依賴,打開項目工程,現在可以看到庫文件都被加載到Pods子項目中了
  #pod 'YTDevice', :path => '../' # 指定路徑
  pod 'YTDevice', :podspec => '../YTDevice.podspec'  # 指定podspec文件
  • pod search可能出現以下問題,根據提示解決即可
    image.png

    image.png

    刪除AssetsClasses
    image.png

    出現以上界面代表搜索成功

CocoaPods 在主干上發布pods

CocoaPods Trunk 是一個基于授權的CocoaPodsAPI服務。 要在主干上發布或者更新庫,需要注冊。

  • 注冊CocoaPods賬戶信息

使用trunk方式, 在終端執行如下代碼
使用github郵箱和用戶名
pod trunk register 郵箱地址 '用戶名' --verbose

image.png

上圖會提示你打開你的郵箱,打開確認鏈接,即可注冊成功
image.png

成功之后可以終端執行如下代碼:
pod trunk me
查看自己的注冊信息, 以后當你有了自己的開源Pod庫, 也可以用此方式隨時查看自己發布過的Pods

image.png

image.png

然后去郵箱驗證,驗證后,可以通過命令 pod trunk me來查看賬號所有Session
然后通過命令pod trunk push來發布pod。
image.png

image.png

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容