1. 程式人生 > >Cocoapods使用私有庫中遇到的坑

Cocoapods使用私有庫中遇到的坑

以前使用Cocoapods時候就是簡單的建立Podfile,然後執行pod install就完事。最近臨近過年了空閒時間比較多就琢磨把專案中複用比較多的程式碼抽取出來然後用Cocoapods管理,算是邁開專案元件化的第一步。途中遇到若干坑,這裡就總結下方便自己日後檢視。

1.pod lib lint 和 pod spec lint 命令的區別

pod lib lint是隻從本地驗證你的pod能否通過驗證
pod spec lint是從本地和遠端驗證你的pod能否通過驗證
我一般都是直接使用pod spec lint去驗證pod有沒有問題

2.私有pod的驗證

使用pod spec lint去驗證私有庫能否通過驗證時應該,應該要新增--sources選項,不然會出現找不到repo的錯誤

pod spec lint --sources='私有倉庫repo地址,https://github.com/CocoaPods/Specs'

3.subspec

為了讓自己的Pod被匯入時顯示出良好的檔案層劃分,subspec是必須的。
若subspec要依賴其它的subspec,則subspec的dependency後面接的不是目錄路徑,而是specA/specB這種spec關係

4.私有庫引用私有庫的問題

在私有庫引用了私有庫的情況下,在驗證和推送私有庫的情況下都要加上所有的資源地址,不然pod會預設從官方repo查詢。

pod spec lint --sources='私有倉庫repo地址,https://github.com/CocoaPods/Specs'
pod repo push 本地repo名 podspec名 --sources='私有倉庫repo地址,https://github.com/CocoaPods/Specs'

5.引用自己或第三方的framework或.a檔案時
在podsepc中應該這樣寫:

s.ios.vendored_frameworks = "xxx/**/*.framework"
s.ios.vendored_libraries = "xxx/**/*.a”

5.便捷地開發本地私有庫

Cocoapods就提供了一個開發模式,其實操作起來也是非常簡單的事情,就是將所謂的引用路徑修改成本地路徑即可。就是講Podfile中的pod '庫名', :path => '本地路徑'即可。這樣在通常的修改程式碼中是不需要執行pod update的,但是對於如果修改了目錄結構(新增、刪除或者移動檔案檔案)或者是修改了Podspec檔案的配置的話,最好是執行一下pod update的命令。普通修改程式碼的情況下就不需要執行pod update命令和打tag了。
pod 'iOS-Test', :path => '../iOS-Test’

6.私有庫中新增資源(圖片、音視訊等)

方法共有三種:

  • 第一種

    spec.resources = ["Images/*.png", "Sounds/*"]

    但是這些資源會在打包的時候直接拷貝的app的Bundle中,這樣說不定會和其它資源產生命名衝突

  • 第二種

    spec.resource = "Resources/MYLibrary.bundle"

    把資源都放在bundle中,然後打包時候這個bundle會直接拷貝進app的mainBundle中。使用的時候在mainBundle中查詢這個bundle然後再搜尋具體資源

      NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"];
      NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
      UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];
  • 第三種
    spec.resource_bundles = {
    'MyLibrary' => ['Resources/*.png'],
    'OtherResources' => ['OtherResources/*.png']
    }
    這種方法利用 framework 的名稱空間,有效防止了資源衝突。
    使用方法是先拿到最外面的 bundle,然後再去找下面指定名字 的 bundle 物件,再搜尋具體資源
    NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];
    NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];
    NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];
    UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

7.如果私有庫添加了靜態庫或者dependency用了靜態庫

那麼執行pod lib lint還有pod spec lint時候需要加上—user-libraries選項
否則會出現'The 'Pods' target has transitive dependencies錯誤

8.如果私有庫只引用其他庫的subspec

只需要依賴想依賴的subspec,不用管主spec(因為依賴subspec必然要依賴主spec)

9.私有庫已經通過驗證並傳到私有repo也能通過pod search,但是就是pod install失敗。

這時候只要執行pod update 然後去喝杯水就好了。。。(前提是你把官方源換成國內的,不然從github上更新官方repo的速度你懂的。 更換官方源

參考

相關推薦

Cocoapods使用私有遇到的

以前使用Cocoapods時候就是簡單的建立Podfile,然後執行pod install就完事。最近臨近過年了空閒時間比較多就琢磨把專案中複用比較多的程式碼抽取出來然後用Cocoapods管理,算是邁開專案元件化的第一步。途中遇到若干坑,這裡就總結下方便自己日後檢視。 1.pod lib lint 和

3-cocoaPods私有制作

create lint 執行 install 是否 們的 系統 assets push CocoaPods 私有庫制作方式一1. 新建私有git庫 可以gitlab,也可以github,當然github是公共的,私有的得交費。 2. 創建工程 可以使用pod命令來自動創建

組件化開發3-cocoaPods私有制作

分支 tag net 測試工程 如果 tool 輸入 git Coding 一、創建索引項目ZHMCSSpec 1-1 在代碼托管網站上建立索引項目ZHMCSSpec(以這個名稱為例)   1-2 在本地創建ZHMCSSpec,並與遠程索引建立聯系    po

iOS開發 UI

製作UI庫中遇到編譯錯誤 file:///Users/lvshaohua/musicv/musicv/MVUPowerVUI/MVUPowerVUI/MVUCameraStoryboard.storyboard: error: IB Designa

Docker私有搭建填

首先要弄清2個事情 1 出現https上傳錯誤是要在上傳檔案那端伺服器進行配置設定, 2 docker 版本   安裝/重灌參考: https://www.cnblogs.com/yufeng218/p/8370670.html 配置私有倉庫參考: https:

iOS CocoaPods私有

級別: ★★☆☆☆ 標籤:「iOS」「CocoaPods」「私有庫」 作者: 憶思夢 審校: QiShare團隊 先說下CocoaPods拉取開源庫的原理: CocoaPods 有一個開源的索引倉庫Specs,倉庫存放著所有開源庫的各個版本的.podspec檔案,.podspec檔案包含中記錄著

CocoaPods 私有 實現元件化

先說下CocoaPods拉取開源庫的原理: 我們知道 CocoaPods 有一個開源的索引倉庫[Specs](https://github.com/CocoaPods/Specs),倉庫存放著所有開源庫的各個版本的`.podspec`檔案,`.podspec`檔案包含中記錄

用svn伺服器建立CocoaPods私有的注意點

   之前寫了用svn伺服器實現CocoaPods建立私有庫的基本操作,後來在個人實踐中遇到一些問題,這裡重點來討論下svn伺服器建立私有庫與git伺服器的區別,還有svn伺服器上出現一些問題的解決方案。下面我們首先來看下兩者的區別:   1.區別:     當公司的程式碼

製作cocoapods私有

podSpec中spec的全稱是“Specification”,說明書的意思。顧名思義,這是用來描述你這個私有pod的說明資訊的。 建立podSpec很簡單,只要建立一個以.podSpec為字尾的檔案即可,或者直接拷貝別人的進行修改也可以。 它的建立命令是:$po

新增Cocoapods私有

給庫新增Cocoapods支援, 使這個工具使用起來更加方便, 更好的使用Cocoapods, 助力iOS程式開發, 下面進入正題, 想要實現這個過程, 絕對不虛此讀. 首先寫好一個要新增Cocoapods支援的庫  這是我第一個新增Cocoapods支援的工具iOS

element ui 表單部分 一個很容易忽略的

mod 希望 如果 pro mode 問題 -m form data 如果在使用element-ui1.4.* 版本中的表單時,發現某些字段綁定不了值,或者checkbox在你綁定後一點就全選了或者全部選,又或者表單驗證時候有些字段沒動靜,那麽十有八九是: 1、el-for

Maven踩(從程式碼拉專案下來,別人家的沒問題,而你的有問題)

當你從程式碼庫中拉專案下來,別人家的沒問題,而你的有問題,jdk配置問題就不說了,自己弄好。 如果你出現ClassNotFind 或者NotFindMethod 之類的錯誤,那肯定是相應的jar沒有正確下載。   這個時候你先Maven--》UpdataProject ,多

Cocoapods建立私有——初級版

一、 首先簡單瞭解下cocoapods的機制 cocoapods有個遠端索引庫,索引庫下放著框架的描述資訊:框架的名稱,框架的版本號,框架的描述檔案(.spec),開發者上傳的程式碼都是位於索引庫的遠端地址下。當你進行pod初始化(pod setup)時,會把遠端索引庫下載到本地,即生成一個

maven私有之:“Downloading: http://repo.maven.apache.org/maven2/”

現象: 即使你配置了私有庫,並且在maven setting.xml中配置了mirror,但是,經常會遇到執行mvn命令的時候,會提醒: Downloading: http://repo.maven.apache.org/maven2/ 原因: 所有自定義pom.xml都是繼

Qt與vs編寫的dll通訊

一、前言: 因為實際開發過程中遇到Qt呼叫vs編寫的sdk,故用vs封裝成純C++的dll提供Qt使用,因為懶得遷移整個工程到Qt環境,畢竟沒學過Qt,光是搭建環境,怎麼使用creator就很多時間折騰了,時間成本很高。 二、新建vs的dll 1、生成dll、

iOS元件化開篇(Cocoapods遠端和本地私有製作)

目錄 Git基本操作 Cocoapods釋出自己的框架 1.安裝cocoapods 2.使用cocoapods 3.cocoapods釋出自己的框架 Cocoapods本地私有庫 前言 自己的工具庫和框架以前都是直接在模組裡面操作的,沒有做成私有化或者coco

建立私有cocoapods repo —— Private Pods

CocoaPods不僅是一個將開原始碼新增到專案的很棒的工具,同時也可以做到跨專案分享元件。你使用一個私有的Spec Repo就能做到這些。 只需要幾個簡單步驟就能給你的專案做好一個私有的pods設定:首先為這些pods建立一個程式碼倉庫,然後讓Cocoa

github建立自己的cocoapod私有_實操

依託github伺服器,把自己寫的功能類專案當作cocoapods私有庫進行釋出公開,便於他人利用,也便於自己使用和維護。 注意事項: 1、必須包含的檔案:LICENSE、prjectName.podspec 2、相關檔案必須在同一個目錄層級:LICENSE、pr

【iOS】利用CocoaPods建立私有進行元件化開發

之前使用CocoaPods管理過第三方庫,前面也有翻譯文章介紹過CocoaPods的配置方法,隨著專案越來越大,很多公司會使用CocoaPods進行元件化開發,下面利用一個demo介紹一下。 什麼是庫 先說下什麼是庫,庫分為靜態庫和動態庫兩種: - 1

iOS程式碼元件化(利用CocoaPods建立私有

前言,最近因為工作需求,研究了一下程式碼元件化,中間遇到了很多問題,下面就把結合網上的一些文章和自己的實際操作,梳理一下操作流程,希望能幫到有需要的朋友,中間有需要改正的地方請指正。 一、遠端索引庫 什麼是遠端索引庫? 每建立一個元件都會帶有一