1. 程式人生 > >ios pod元件化和本地私有庫的利弊

ios pod元件化和本地私有庫的利弊

專案在告一段落的時候,我想把已經拆成模組的專案檔案

拆分到pod庫裡面去

當初我沒拆分到pod庫 ,最開始是因為pod庫要上傳到公開

後來知道了碼雲,知道了可以上傳到私有的伺服器,

但是公司的專案是svn維護的,並沒有這樣的許可權,自己擅自做也不太好。

再後來偶然發現 pod庫其實是支援本地pod的

建立一個pod庫 只需要 編寫命令

pod lib create

這時候 按照官方的提示 建立一個模板就好了,

會發現裡面的路徑就是本地的路徑

  pod 'LDSBase', :path => '../'

比如說上面這個,就是說這個base的模組 的路徑就在當前的上級資料夾。

pod 是一個一個的元件 ,每個之間存在相互依賴的關係

這些依賴關係 改怎麼新增呢

這就提到了

.podspec

這個檔案, 建立pod庫的時候會把這個添加出來,

如果沒有在這個資料夾中新增依賴關係,就算你pod 了 masonry 類的庫,

但是你的pod 是找不到 masnory 的路徑的,會爆紅,編譯不過。因為lib search path 裡面沒有

這層關係,所以必須在 .podspec 中寫這個依賴s.dependency 'Masonry'

我們由此可以知道 這個 .podsepc的檔案 是cocopod 在xcode 編譯階跑自定義shell指令碼的階段

需要使用者自定義的一些引數設定,如果沒有這些引數設定,那xcode 自然不會注入這些關係

你可以理解為 配置表,針對你要建立的pod庫的單獨一份的表

而你的資源 就放在source_files 這個資料夾下 也是配置表來決定的

我這裡展示一個我的配置表的部分引數

  s.ios.deployment_target = '9.0' // 9.0以上的系統
  s.source_files = 'LDSBase/Classes/**/*' //資源在source 資料夾下
  s.resource_bundles = {
    'LDSBase' => ['LDSBase/Assets/*.{png,xib,plist}'
] //bundle 資源包含了png xib plist } s.dependency 'Masonry' //依賴了第三方庫 masnory 和beehive s.dependency 'BeeHive' s.libraries = 'icucore' //依賴系統的資源icucore

如果遇到問題 可以看看是不是引數配置出錯了

注意到bundle 裡面包含了png xib plist 檔案,是因為pod庫的xib 不會出現在mainbundle 裡面了

所以需要 用 當前class 的bundle 裡面去找,而xib 這些東西都需要打到bundle 包裡面,才能在專案裡

被識別,我講這些 是粗略的思路 ,具體程式碼建議去搜索一下、

做pod庫儘量減少xib ,避免過多的處理xib的工作。

 s.source_files = 'LDSBase/Classes/**/*' 

就是你pod庫的資料夾 ,你的這裡面的檔案會被編譯到pod裡面,當然你可以自己改寫這個路徑,最好

統一按照這個格式來

接下來就是漫長的遷移過程,你需要不斷的建立pod 庫 然後 把程式碼移動過去,然後編譯通過,再pod

到你的主工程目錄,直到 主工程目錄只剩下appdelegate 資料夾,這個過程大約需要3 天,因為 會遇

到各個pod 之間存在相互引用的情況,xib的修改。pch 因為無效了,所以需要到處新增masnory頭文

件。然後遷移回去需要在主工程裡面全部測試一遍。

pod庫 首先是需要先建立 pod 的base庫 的 這些包含了socket afn 彈框基礎類, uibase類等等,其他

pod庫需要依賴這個base pod庫再繼續使用,不然每個庫自己折騰一份,會非常麻煩。

至此 整個本地庫的遷移就完成了。

遷移完成的下一步 是將各個模組之間的耦合 改成 target action 來處理。

再談一下 pod元件化的一些弊端

元件化最初出現的目的是 解除耦合,讓團隊的成員 各自維護自己的pod庫,來避免相互依賴

從而做到不熟悉整個專案,而能夠開發的目的。

我認為存在的弊端:

1.如果沒有每個人懂得pod 元件化的過程,就很難各自維護,除非把整個pod的過程寫成自動化指令碼。

2.基礎通用的base 類的艱難維護, 我們知道base類是增長型的,比如會增加很多不可預知的分類。

或者增加一些新的 網路協議的封裝,而這些都是依據業務需求來建立的,像彈框可能存在多個版本,

這些不會在專案初期就建立起來。而是邊做邊出現的,遇到這種情況,就必須增加base 的部分,重

新pod install base 類 這時候,所有的業務pod 就都需要pod install 一遍 才好繼續使用,這樣base 類

就變得牽一髮而動全身的問題。
3. a庫放在那裡的問題,通用的png 檔案放在哪裡的問題,有些。a的靜態庫 一開始 只是一個模組在使

用的 這樣打到業務pod就好,但很有可能後期就需要打到其他業務裡面,這樣不得不打到base pod庫

裡面,這樣會造成base pod庫 越來越大, png 檔案放在base pod裡面其實不太好,可能下一個專案

變了,那應該怎麼辦呢,目前我也沒想到合理的解決方案。

4.除此之外,最重要的一點是pod 拆分力度的問題。 pod 拆分如果過細,那就會造成 tabbar/ login/

home/甚至兩三個頁面就做成一個pod了 ,為啥呢,因為要各自開發各自的模組唄,一般團隊開發各自

模組都是很小的部分了。這樣會讓整個pod 結構看不出來層次劃分, 因為pod 都是平級的。但是不

劃分,只劃大的模組,那團隊之間的專案 還是一個團隊維護一個pod結構,和直接維護整個工程都沒啥

不同,我認為應該是大模組再拆分小模組,就是pod 庫套用pod庫的方案,而從外層看不出來裡層結構

來解決。

5.之前svn 上是不存pod 的檔案的,做了本地的元件化,必須上傳所有的pod資料夾,當然這是細節。

我的觀點:

其實說到這裡我已經說得差不多了,元件化要大團隊大專案,然後從一開始就需要開始做起pod 化的部

分 target action 的部分,才能夠後續良好的維護。並且要持續做指令碼化整個過程的部分。

小團隊 費力做這個 實在是吃力不討好。元件化開發確實是趨勢,但是很多我看到的都是偽元件化,或

只是個demo。真正要做好這些還需要很多的工作和心力。後續我還會繼續做元件化的工作,也希望

看到這個文章的人想一想我上面提到的問題,不必過度迷信元件化,忘了使用時候帶來的陣痛。就像

mvvm 固然好,但也增加了訊息傳遞的成本,mvc 固然不夠美感,但用起來順手是一樣的,mvvm 的跨

層通訊需要引入 kvo 或者 rac來解決問題,如果rac使用不當 或者理解不深入,還是會引入更多問題,

好的方案 一定是侵入性小,改動小 而帶來的效用巨大的,而不是需要耗費大量的人力 做出來 還需要

持續維護的,以上是 我對pod 元件化的理解

相關推薦

ios pod元件本地私有利弊

專案在告一段落的時候,我想把已經拆成模組的專案檔案 拆分到pod庫裡面去 當初我沒拆分到pod庫 ,最開始是因為pod庫要上傳到公開 後來知道了碼雲,知道了可以上傳到私有的伺服器, 但是公司的專案是svn維護的,並沒有這樣的許可權,自己擅自做也不太好。

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

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

iOS元件開發-釋出私有

遠端索引庫 將遠端索引庫添關聯到本地 pod repo 檢視本地已關聯倉庫源 pod repo add 本地索引庫名稱 遠端索引庫倉庫地址 pod repo update 索引庫名稱 pod repo remove 本地索引庫名稱  執行命令 新增遠端索引庫`KTPodSpecs`克隆到本

元件開發之私有製作以及常見問題

前言:這篇文章主要描述私有庫的製作過程以及本人在使用過程中的一些問題和解決方案,提到元件化就不得不想到pods私有庫相關的東西(當然元件化不侷限於結合私有庫使用,還可以做成靜態庫或者多target開發等方式,這裡只講解私有庫相關的東西,稍後會出一篇元件化結合私有庫實現元件化開發的方式) 私有

iOS組件(一):創建本地私有

遠程倉庫 scrip all pods 中新 install block code ogr 1.創建Test項目,創建TestLib,添加Person類 2.git init 3.提交代碼 4.創建項目的podspec文件 5.修改podspec文件,保存 s.n

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

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

iOS 本地私有的建立以及使用流程

iOS開發運用Pod 建立本地私有庫 第一步 建立一個Lib檔案用於維護倉庫模組原始碼 開啟終端切換到Lib檔案下,執行如下指令,clone GitHub上的倉庫框架模板,然後依次回答對應的問題,之後Xcode會自動開啟克隆下的Demo專案 pod lib create LY

本地私有遠端私有的升級

以在庫中新增新的類為例子 1.本地私有庫的升級     只需要把新增的類 拖入到 classes 資料夾中 然後在 podfile 檔案目錄中 重新 pod install 即可 2.遠端私有庫的升級     2.1  把新增的類 拖入到 classes 資料夾中  

docker佈置本地私有

docker佈置本地私有庫 緣由 國內雲 docker registry Harbor 緣由 使用docker一段時間後,我們的手上會有大量的docker映象,當然我們可以上傳docker hup公有云,但是有些程式碼我們並不想分

ios Mac 利用SVN進行cocoapod私有的使用

1. 首先在svn上面建立一個資料夾 舉例來說,名字為 FSLBootPageVC 同時在該目錄下建立 trunk 資料夾 2. 在trunk下面建立檔案 FSLBootPageVC.podspec 和資料夾 FSLBootPageVC 該目錄的FSLBootPageVC下面是實際

iOS元件開發

在一個APP開發過程中,如果專案較小且團隊人數較少,使用最基本的MVC、MVVM開發就已經足夠了,因為維護成本比較低。 但是當一個專案開發團隊人數較多時,因為每個人都會負責相應元件的開發,常規開發模式耦合會越來越嚴重,而且導致大量程式碼衝突,會使後期維護和升級過程中程式碼“牽一髮而動全身”,額外

前端框架___元件模組

元件化和模組化 元件化和模組化有利於封裝以及複用。   元件化: 1.生命週期。     前端框架都有一個重要的詞語,生命週期,都大部分從幾個方面來看,初始化,渲染,存活期,銷燬。 2.資料通訊    元件之間的通訊,父傳

Docker共有倉庫本地私有倉庫的構建

docker公共倉庫的使用 如果使用公有倉庫首先使用命令docker login登入docker,如果沒有賬號需要先在官網註冊,註冊地址https://hub.docker.com/ 註冊後再使用docker login登入 按照提示輸入username和pawword即可 docker

爆炸啊,十秒搞定元件MVP

文章目錄: - 前言 - 說明 - 如何使用 - 其他說明 - 更多 - TODO - 相關文章 - 關於個人 ## 前言 皮!就是這麼皮 什麼?想用比較新比較火的元件化和MVP這麼辦? 十秒帶你過山車式

使用Retrofit2封裝適用於元件專案的網路

1、URL的簡單構成 URL(Uniform Resource Locator)定義:統一資源定位符是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的地址。網際網路上的每個檔案都有一個唯一的URL,它包

iOS專案元件搭建

點選上方“iOS開發”,選擇“置頂公眾號”關鍵時刻,第一時間送達!專案元件化,顧名思義,就是將專

iOS App元件開發實踐

前因其實我們這個7人iOS開發團隊並不適合元件化開發。原因是因為價效比低,需要花很多時間和經歷去做這件事,帶來的收益並不能徹底改變什麼。但是因為有2~3個星期的空檔期,並不是很忙;另外是可以用在一個全新的App上。所以決定想嘗試下元件化開發。所謂嘗試也就是說:去嘗試解決元件化開發當中的一些問題。如果能解決,並

iOS架構元件

前言 當一個App只有幾個人開發的時候,很容易就會在一個單專案中開發。但當App開發人數越來越多,甚至幾百人,十幾個不同BU都在協調開發同一個App的時候,就必須對架構進行元件化,才能方便開發。本文主要基於手機淘寶的一次架構探索:手機淘寶客戶端架構探索實踐,基

使用自簽名證書配置TLS搭建安全的Docker本地私有

編輯openssl.cnf檔案 openssl.cnf 檔案位置:/etc/pki/tls/openssl.cnf 編輯/etc/pki/tls/openssl.cnf檔案,在 [v3_ca]下增加一行: [ v3_ca ] subjectAltN

iOS元件程序之建立元件(Git)倉庫

前言    元件化開發已經在各個大小公司中普遍使用,尤其是一線大公司更是在忙不停的將原有專案中相對獨立功能抽取出來做成獨立元件。面試中也會經常問到元件化相關的知識, 在這裡我將通過一步步構建簡單的元件化專案來掌握這門技術。首先元件化的第一步就是需要將原有專案按照基礎層、業務層