iOS 發(fā)布個(gè)人開源框架到CocoaPods

  • 需要做的工作包括以下幾點(diǎn)
  1. 創(chuàng)建一個(gè)本地的倉庫颓遏,將自己想要公開的代碼搞進(jìn)去
  2. 將自己的代碼上傳到遠(yuǎn)程公開倉庫中去
  3. 創(chuàng)建一個(gè)pods 的描述文件 .podspec
  4. 修改.podspec描述文件中的相關(guān)的描述信息
  5. 將當(dāng)前本地的.podspec文件傳到CocoaPods官方的索引庫中
  6. 測試一下,有沒有上傳到CocoaPods的索引庫中
  7. 后期的升級維護(hù)
  • 具體詳細(xì)的步驟如下
    1. 創(chuàng)建遠(yuǎn)程倉庫注意點(diǎn)
  • 正規(guī)的倉庫都有一個(gè)license文件奥帘,Pods依賴庫對這個(gè)文件要求比較嚴(yán)格,需要有這個(gè)文件慰枕,建議使用MIT類型的license魔熏,沒有MIT后面pod驗(yàn)證會有警告
  • 代碼版本要打tag(要在代碼版本上傳以后打tag)
  • pod 支持 .a靜態(tài)庫、.framework 以及文件悬嗓,不一定要是可運(yùn)行的工程里面的某個(gè)組件
  • 放代碼的倉庫不一定非要是Git倉庫,只要是可以獲取到相關(guān)代碼文件就可以砂沛,可以是SVN的烫扼,也可以是zip包,區(qū)別就是在podspec中的source項(xiàng)填寫的內(nèi)容不同
  1. 創(chuàng)建一個(gè)pods 的描述文件 .podspec
    $ pod spec create MyViewExtension<這個(gè)名稱一般和創(chuàng)建的項(xiàng)目名稱一樣就可以>
  2. 修改.podspec描述文件中的相關(guān)的描述信息
    詳情可參考CocoaPods的官網(wǎng)的PodSpec語法
Pod::Spec.new do |s|
  # 項(xiàng)目的名稱
  s.name             = "MyViewExtension"   
  # 項(xiàng)目的版本號碍庵,通過項(xiàng)目git的tag標(biāo)簽進(jìn)行對應(yīng)映企,這里的標(biāo)簽代表的版本 
  s.version          = "0.0.1"    
  # 項(xiàng)目簡單的描述信息        
  s.summary          = "Just Testing."  
  # 項(xiàng)目的詳細(xì)描述信息悟狱,注意,這里的文字的長度堰氓,一定要比上面的s.summary長挤渐,不然會認(rèn)為格式不合格
  s.description  = <<-DESC
                      this project provide all kind of KeychainDeviceID for iOS developer 
                   DESC
  # 項(xiàng)目的網(wǎng)頁主頁信息,這里可以直接寫自己的遠(yuǎn)程倉庫的主頁的地址
  s.homepage         = "https://github.com/RunOfTheSnail/MyViewExtension"
  # 開源協(xié)議
  s.license          = "MIT"   
  # 作者信息          
  s.author             = { "zhangyan" => "17***24@163.com" }                   
  # 這個(gè)比較重要双絮,指的就是git的對應(yīng)的遠(yuǎn)程倉庫的地址以及版本號浴麻,版本號直接獲取的是上面的s.version
  # 項(xiàng)目地址,這里不支持ssh的地址囤攀,驗(yàn)證不通過软免,只支持HTTP和HTTPS,最好使用HTTPS
  # Supported Keys:
  # :git => :tag, :branch, :commit, :submodules
  # :svn => :folder, :tag, :revision
  # :hg => :revision
  # :http => :flatten, :type, :sha256, :sha1
  s.source       = { :git => "https://github.com/RunOfTheSnail/MyViewExtension.git", :tag => s.version }                      
  # 支持的平臺及版本
  s.platform     = :ios, "11.0"
  # 支持的ios最低版本
  s.ios.deployment_target = "7.0"
  # 如果是 Swift 的話指定 Swift 編譯版本
  # s.swift_version = "4.0"
  # 必備項(xiàng)焚挠,代碼源文件地址膏萧,如果有多個(gè)目錄下則用逗號分開,否則"public_header_files"等不可用
  s.source_files  = "GSLXYKeychainDeviceID/KeychainDeviceID/**/*.{h,m}"                               
  # 公開頭文件地址
  # s.public_header_files = "Pod/Classes/**/*.h"
  # 所需的系統(tǒng)framework,多個(gè)用逗號隔開蝌衔,不需要后綴名
  # s.ios.framework  = "SomeFramework"
  s.frameworks = "UIKit", "AnotherFramework"
  # 需要弱鏈接的框架
  # s.weak_framework = "Twitter"
  # s.weak_frameworks = "Twitter", "SafariServices"
  #項(xiàng)目依賴的庫文件(這個(gè)是系統(tǒng)的庫文件),不需要后綴名,比如sqlite,libz等.以lib開頭的需要省略掉lib這三個(gè)字母.例如:libz需要簡寫為z否則報(bào)錯(cuò)
  # s.ios.library   = "iconv"
  # s.libraries = "iconv", "xml2"
  # 第三方或自己創(chuàng)建的 .Framework的名稱
  # s.vendored_frameworks = "YostarLib.framework"
  # 第三方或自己創(chuàng)建的 .a靜態(tài)庫的名稱
  # s.vendored_libraries = "libYostarStaticLib.a"
  # 添加資源文件
  # s.resource = "XXX/XXXX/**/*.bundle"
  # s.resources = "XXX/XXXX/**/*.bundle"
  # CocoaPods會把這個(gè)庫配置成static framework榛泛,同時(shí)支持Swift和Objective-C
  # s.static_framework = true
  # 依賴關(guān)系,該項(xiàng)目所依賴的其他噩斟,當(dāng)在加載的時(shí)候也會一塊把相關(guān)的依賴的庫加載下來曹锨,如果有多個(gè)需要填寫多個(gè)
  # s.dependency "JSONKit", "~> 1.4" 
  # 是否使用ARC,如果指定具體文件剃允,則具體的文件使用ARC      
  s.requires_arc = true
  # 指定項(xiàng)目配置沛简,如HEADER_SEARCH_PATHS、OTHER_LDFLAGS等
  # s.xcconfig = {"OTHER_LDFLAGS" => "-ObjC"}
  # s.user_target_xcconfig = {"OTHER_LDFLAGS" => "-ObjC", "LD_RUNPATH_SEARCH_PATHS" => "/usr/lib/swift", "LIBRARY_SEARCH_PATHS" => "$(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)"}
  # s.pod_target_xcconfig = { 'VALID_ARCHS' => 'arm64 x86_64 armv7' }
  # s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64 i386' }
end
  • 補(bǔ)充說明:
    xcconfig:修改pod SDK硅急、Pod 生成的.a 庫引用主工程的配置
    user_target_xcconfig:修改Pod 生成的.a 庫引用主工程的配置
    pod_target_xcconfig:只修改pod SDK的配置
    xcconfig = user_target_xcconfig + pod_target_xcconfig
    現(xiàn)在官方已經(jīng)沒有xcconfig這個(gè)字段的說明了

  • 修改完畢之后進(jìn)行檢驗(yàn)一下.podspec的格式有木有問題

$ pod lib lint
完整lint格式
$ pod lib lint --allow-warnings --use-libraries --verbose --no-clean --sources='http://10.11.180.29/mobileDevelopers/YZT-Loan-Pod-Spec.git'
$ pod lib lint GSCoreKit.podspec --allow-warnings --use-libraries --verbose --no-clean  檢查指定podspec
--verbose:打印錯(cuò)誤
--allow-warnings:允許警告,默認(rèn)有警告的podspec會驗(yàn)證失敗
--fail-fast:遇到錯(cuò)誤馬上停止覆享,默認(rèn)會完成全過程再停止
--use-libraries:如果自己私有庫包含library,引用了.a、.framework,在驗(yàn)證和提交時(shí)需要加
--no-clean:檢查問題
--sources:如果依賴了其他不包含在官方specs里的pod营袜,則用它來指明源(repo庫不是源碼庫),比如依賴了某個(gè)私有庫丑罪。多個(gè)值以逗號分隔
--skip-import-validation:跳過驗(yàn)證
  1. 將當(dāng)前本地的podspec文件傳到CocoaPods官方的索引庫中
    5.1. 第一次需要上傳需要注冊
    $ pod trunk register zy_iOS2163.com 'zy' --description='macbook air' --verbose
    你注冊的時(shí)候需要替換郵箱和名字荚板,加上 --verbose 可以看到詳細(xì)信息,然后你會收到一份郵件吩屹,需要點(diǎn)擊驗(yàn)證
    驗(yàn)證完成

5.2. 使用$ pod trunk me查看注冊信息是否注冊成功

5.3. 如果你的pod是由多人維護(hù)的跪另,你也可以添加其他維護(hù)者
$ pod trunk add-owner JLC kyle@163.com(即:pod trunk add-owner 庫名 郵箱)
移除某個(gè)管理員
$ pod trunk remove-owner TTLockSDK 郵箱地址(即:pod trunk remove-owner 庫名 郵箱)
$ pod trunk info TTLockSDK查看庫當(dāng)前狀態(tài),版本煤搜,所有人等
5.4. 在提交 spec 文件前免绿,如果發(fā)布的是 Swift 框架,需要指定 Swift 的版本擦盾,否則會報(bào)錯(cuò)嘲驾,執(zhí)行$ echo "4.0" > .swift-version即可指定版本為 4.0
5.5. 執(zhí)行命令淌哟,將 .podspec push到cocopods的trunk中
$ pod trunk push MyViewExtension.podspec

  1. 測試一下,有沒有上傳到CocoaPods的索引庫中
  • $ pod search SGExtension如果沒有搜到辽故,可能就是本地倉庫沒有更新
  • 更新本地倉庫$ pod repo update再次執(zhí)行$ pod search SGExtension
  • 如果還搜索不到徒仓,執(zhí)行$ rm ~/Library/Caches/CocoaPods/search_index.json這句話是移除已經(jīng)生成的搜索目錄緩存文件,移除之后,執(zhí)行pod search會重新生成一份最新的緩存列表
  • 查看本地索引庫:$ open ~/.cocoapods/repos
  1. 在個(gè)人項(xiàng)目中增加剛剛制作好的Podfile并使用
    新建一個(gè)測試工程測試,用CocoaPods初始化項(xiàng)目誊垢,編輯Podfile文件:
#CocoaPods官方spec倉庫
source 'https://github.com/CocoaPods/Specs.git'
#自己私有spec倉庫
source 'https://github.com/wenmobo/WBSpecs.git'

platform :ios, '8.0'

target 'TestDemo' do
  #防Crash庫
  pod 'WBAvoidCrash'
end

編輯好podfile文件之后掉弛,終端執(zhí)行:

$ pod install 安裝時(shí)使用,更新庫使用update命令
或
$ pod update 更新時(shí)使用
  1. 后期的升級維護(hù)
    8.1. 更新遠(yuǎn)程公開庫中的代碼
    8.2. 修改.podspec中的配置喂走,version升級一個(gè)版本
    8.3. 給當(dāng)前的遠(yuǎn)程倉庫的代碼殃饿,重新打個(gè)tag,tag和.podspec的version一樣
    8.4. 遠(yuǎn)程倉庫的代碼更新完畢芋肠,接下來執(zhí)行上面的 5.將當(dāng)前本地的spec文件傳到CocoaPods官方的索引庫中
    8.5. 檢查使用上面的 6.測試一下乎芳,有沒有上傳到CocoaPods的索引庫中
  • 移除索引版本,糾正意外推送
  • 移除該版本业栅,然后重新push秒咐,在終端執(zhí)行下面指令
    $ pod trunk delete TTLockSDK 2.6.4(即:pod trunk delete 庫名 版本號)
  • 也可以放棄整個(gè)pod和所有版本
    $ pod trunk deprecate TTLockSDK(即:pod trunk deprecate 庫名)
    確認(rèn)時(shí),回復(fù)一個(gè)"y"(小寫字母 y)
  • 清理CocoaPods本地緩存
    特殊情況下碘裕,由于網(wǎng)絡(luò)或者別的原因携取,通過CocoaPods下載的文件可能會有問題
  1. 手動刪除(~/Library/Caches/CocoaPods/Pods/Release目錄)
  2. 打開終端,輸入$ pod cache list,會列出所有本地已經(jīng)緩存的第三方庫,在終端中輸入$ pod cache clean AAA會刪除AAA緩存庫帮孔,使用$ pod cache clean --all清除所有緩存

附:我的博客地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雷滋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子文兢,更是在濱河造成了極大的恐慌晤斩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆坚,死亡現(xiàn)場離奇詭異澳泵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兼呵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門兔辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人击喂,你說我怎么就攤上這事维苔。” “怎么了懂昂?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵介时,是天一觀的道長。 經(jīng)常有香客問我,道長沸柔,這世上最難降的妖魔是什么循衰? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮勉失,結(jié)果婚禮上羹蚣,老公的妹妹穿的比我還像新娘。我一直安慰自己乱凿,他們只是感情好顽素,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徒蟆,像睡著了一般胁出。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上段审,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天全蝶,我揣著相機(jī)與錄音,去河邊找鬼寺枉。 笑死抑淫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姥闪。 我是一名探鬼主播始苇,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筐喳!你這毒婦竟也來了催式?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤避归,失蹤者是張志新(化名)和其女友劉穎荣月,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梳毙,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哺窄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了账锹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堂氯。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牌废,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啤握,我是刑警寧澤鸟缕,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響懂从,放射性物質(zhì)發(fā)生泄漏授段。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一番甩、第九天 我趴在偏房一處隱蔽的房頂上張望侵贵。 院中可真熱鬧,春花似錦缘薛、人聲如沸窍育。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漱抓。三九已至,卻和暖如春恕齐,著一層夾襖步出監(jiān)牢的瞬間乞娄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工显歧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仪或,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓士骤,卻偏偏與公主長得像范删,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子敦间,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容