創(chuàng)建自己的公有庫和私有庫

首先本人會(huì)以github為例,創(chuàng)建自己的私有庫。不懂請看下面,讓我慢慢告訴你怎么創(chuàng)建自己的公有庫!

一、 用本人賬號在github創(chuàng)建一個(gè)公有倉庫

注意: 如果要?jiǎng)?chuàng)建私有庫選擇Private

image

MIT License 是稍后podspec里面要用到的協(xié)議

二、 Cocoapods注冊Trunk

image

$pod trunk register [Your-Email] '[Your-Name]' --description='[Your-Desc]'

  1. Your-Email: 任意郵件,但是我比較推薦你使用github上的Email

  2. Your-Name 推薦使用github上使用的Name

  3. Your-Desc: 一個(gè)簡單的描述,往往這個(gè)時(shí)候我們使用的是自己電腦的一個(gè)描述

比如我自己注冊了一個(gè)$ pod trunk register 1136200379@qq.com 'PCZheng' --description='iMac (Retina 4K, 21.5-inch, 2017)'
注冊完成后,你可以通過[pod trunk me]查看信息

$ pod trunk me 查看信息是會(huì)有[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.這是要在你注冊的[Your-Email]查看給你發(fā)的email點(diǎn)擊里面的鏈接認(rèn)證。由于我沒有認(rèn)證所以,pod trunk me 并能查看信息,需要叫我認(rèn)證,由于最先沒反應(yīng)過來,我又注冊了trunk一次,注冊錯(cuò)了可以刪除,刪除具體的方法執(zhí)行pod trunk --help,查看刪除方法。

三、將你第一步創(chuàng)建的庫,clone到指定的文件夾里面

image
image

四、創(chuàng)建.podspec文件 并且編輯.podspec

該步驟是重點(diǎn)也是難點(diǎn),該步驟要是出什么錯(cuò)誤了,后面都是扯淡,本人就因?yàn)楦鞣N各樣的問題在這個(gè)步驟卡了很久,最后通過各種解決方案解決了,有些坑只有自己趟過了才知道難不難,所以廢話也不多說,遇到各種不會(huì)的就goole和百度吧,或者@我也行。

**.podspec 即pod描述文件podspec specification **

為了講明白這一步,這一步主要分為下面這幾個(gè)步驟:

1.如何創(chuàng)建podspec文件

2.如何編寫podspec文件

3.如何實(shí)現(xiàn)目錄分層

4.如何校驗(yàn)podspec文件

5.在校驗(yàn)podspec文件所遇到過的問題

1.如何創(chuàng)建podspec文件

$pod spec create 庫名

例如我自己的PageController

image
image

該目錄下就會(huì)多一個(gè)PageController.podspec文件,可以有文本編輯打開對這個(gè)文件進(jìn)行編輯

image
   **Pod::Spec.new do |s|** 
 
   s.name        = "PageController" #框架名
 
   **s.version**      = "0.0.1" #當(dāng)前版本號,在pod search PageController的時(shí)候會(huì)顯示該信息

  s.summary      = "A short description of PageController."#詳細(xì)描述,在pod search PageController的時(shí)候會(huì)顯示介紹
 
 s.description  = <<-DESC
 
                  DESC
 
   **s.homepage**    = "http://EXAMPLE/PageController"#頁面鏈接

   # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
 
   s.license      = "MIT (example)"#開源協(xié)議,也就是第一步選擇的協(xié)議
 
   # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
 
   s.author            = { "RainbowWait" => "1136200379@qq.com" }#作者
 
   # Or just: s.author    = "RainbowWait"
 
   # s.authors            = { "RainbowWait" => "1136200379@qq.com" }
 
   # s.social_media_url  = "http://twitter.com/RainbowWait"
 
   #s.platform    = :ios
 
   s.platform    = :ios, "8.0"#支持iOS平臺最低版本
 
   #  When using multiple platforms

   # s.ios.deployment_target = "5.0"
 
   # s.osx.deployment_target = "10.7"
 
   # s.watchos.deployment_target = "2.0"

   # s.tvos.deployment_target = "9.0"
 
   **s.source**      = { :git => "http://EXAMPLE/PageController.git", :tag => "#{s.version}" }#源碼git地址 以及tag標(biāo)簽
 
   **s.source_files**  = "Classes", "Classes/**/*.{h,m}"#源文件(可以包含.h和.m)
 
   s.exclude_files = "Classes/Exclude"
 
   # **s.public_header_files** = "Classes/**/*.h"#頭文件(.h文件)

   # s.resource  = "icon.png"
 
   # **s.resources** = "Resources/*.png"#資源文件(配置的文件都會(huì)放到mainBundle中)
 
   # s.preserve_paths = "FilesToSave", "MoreFilesToSave"
 
   # s.framework  = "SomeFramework"

   # **s.frameworks** = "SomeFramework", "AnotherFramework"#依賴的系統(tǒng)的框架

   # s.library  = "iconv"
 
   # **s.libraries** = "iconv", "xml2"#依賴的系統(tǒng)庫
 
   s.requires_arc = true#支持ARC
 
   # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
 
   # s.dependency "JSONKit", "~> 1.4"#依賴的第三方庫

https://guides.cocoapods.org/syntax/podspec.html 請參照Podfile詳細(xì)

上面列舉的信息大部分來自pod默認(rèn)生成的podspec文件中的給的,其中需要重點(diǎn)注意標(biāo)識黑體的這幾個(gè)信息

下面我會(huì)舉例說明giant如何寫podspec中的每項(xiàng)配置。

image
image

s.source 源代碼地址 以及tag 標(biāo)簽

 s.source       = { :git => "https://github.com/RainbowWait/PageController.git", :tag => "0.0.1" }**

git tag 0.0.1 設(shè)置的tag標(biāo)簽為0.0.1 git tag -d 0.0.1刪除0.0.1的tag標(biāo)簽 最后提交的時(shí)候git push --tags

**s.source_files **配置三方庫的源文件(.h或.m文件),swift是配置.swift文件

寫法:

OC:s.source_files = "Classes/*/.{h,m}"#Classes路徑下的所有匹配文件

   s.source_files = "Classes/*.{h,m}"#Classes文件夾下的所有匹配文件

   s.source_files = “Classes/PageController.{h,m}"#直接指定文件名

Swift:s.source_files = "Classes/*/.{swift}"#Classes路徑下的所有匹配文件

       s.source_files = "Classes/*.{swift}"#Classes文件夾下的所有匹配文件

       s.source_files = “Classes/PageController.{swift}"#直接指定文件名

public_header_files頭文件

s.public_header_files = "Classes/*/.h"#Classes路徑下所匹配的.h文件

s.public_header_files = "Classes/*.h"

s.public_header_files = "Classes/Public.h"

vendored_frameworks 引用非系統(tǒng)的框架

s.ios.vendored_frameworks = "Frameworks/MyFramework.framework"

s.vendored_frameworks = 'MyFramework.framework’,'TheirFramework.framework'

frameworks配置系統(tǒng)框架

s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'

vendored_libraries 非系統(tǒng)靜態(tài)庫(要注意,這里的.a靜態(tài)庫名字必須要帶lib前綴,如果引用的靜態(tài)庫名字沒lib前綴會(huì)導(dǎo)致編譯報(bào)錯(cuò),只需要重命名加上即可)

s.ios.vendored_library = 'Libraries/libProj4.a'

s.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'

libraries:配置依賴的系統(tǒng)庫(要注意,這里的寫法需要忽略lib前綴)

libraries = 'c++’,'sqlite3', 'stdc++.6.0.9', 'z'

resources:配置資源文件(.bundle,.png,.txt等資源文件,這些資源文件會(huì)被放到mainBundle中,要注意避免發(fā)生命名重復(fù)的問題)

s.resources = ['Images/.png’,'Sounds/']

s.resource = 'Resources/HockeySDK.bundle'

resource_bundles:配置指定bundle的資源文件(可以解決resources導(dǎo)致的命名沖突問題)

spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }

spec.resource_bundles = {

'MapBox' => ['MapView/Map/Resources/*.png'],

'OtherResources' => ['MapView/Map/OtherResources/*.png']

}

swift_version 支持Swift的版本

s.swift_version = '4.0'

dependency:依賴的三方庫,pod庫或者可以是自身的subspec

3.如何實(shí)現(xiàn)目錄分層3.如何實(shí)現(xiàn)目錄分層

使用subspec來實(shí)現(xiàn)目錄分層。

目錄分層的好處:

目錄分層,結(jié)構(gòu)清晰;

使用pod引入一個(gè)三方庫時(shí),可以只引入一個(gè)subspec而不用將整個(gè)三方庫引入。

例如AFNetworking:

image

嵌套請參考 CocoaPods Guides - Podspec Syntax Reference v1.6.0.beta.2

4.如何校驗(yàn)podspec文件

pod lib lint (首先從本地驗(yàn)證你的pod能否通過驗(yàn)證)

pod spec lint (從本地和遠(yuǎn)程驗(yàn)證你的pod能否通過驗(yàn)證)

pod lib lint --verbose (加--verbose可以顯示詳細(xì)的檢測過程,出錯(cuò)時(shí)會(huì)顯示詳細(xì)的錯(cuò)誤信息)

pod lib lint --allow-warnings (允許警告,用來解決由于代碼中存在警告導(dǎo)致不能通過校驗(yàn)的問題)

pod lib lint --help (查看所有可選參數(shù),可選參數(shù)可以加多個(gè))

首先把你的代碼先提交到遠(yuǎn)程倉庫,并且把設(shè)置的標(biāo)簽頁推送到遠(yuǎn)程倉庫,以下是截圖

image
image
image
image

修改后的PageController.podspec文件

image

從本地和遠(yuǎn)程驗(yàn)證pod能否驗(yàn)證通過

pod spec lint --allow-warnings

image

第五步、搭建私有庫環(huán)境

1.創(chuàng)建自己的私有庫

pod repo add [repo名] [repo Git地址]

例如:pod repo add PageControllerRepo https://github.com/RainbowWait/PageController.git

查看私有庫是否創(chuàng)建成功

pod repo list 下面的lists錯(cuò)誤了是list

image

需要注意的是:

1. 要記得將代碼提交到遠(yuǎn)端

2. 要記得打tag,每個(gè)tag對應(yīng)一個(gè)三方庫版本

3. podspec文件中version的值要與git中的一個(gè)tag對應(yīng)

2.向私有的repo庫中提交podspec

pod repo push [repo名] [.podspec文件名] 在驗(yàn)證的時(shí)候有警告就要加上--allow-warnings,否則會(huì)失敗

image

3.提交公有l(wèi)ibrary

pod trunk push [NAME].podspec

pod repo update// 查找一下你提交的pod

pod search PageController

文章參考了 Cocoapods整理(四)——搭建Cocoapods私有庫環(huán)境 - Zcp大官人的iOS開發(fā)專欄 - SegmentFault 思否

Cocoapods整理(三)——編寫podspec文件 - Zcp大官人的iOS開發(fā)專欄 - SegmentFault 思否

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容