當面對需求相同或相似的大量 App,例如公司的 40 隻 App 都需要登入功能,
此時使用模組化開發是最適合的,可以大量減少工時,
這裡記錄當初在研究模組化的發展歷程,可以了解以前發生的問題。

這裡直接排除 複製程式碼的共用法,沒有用到實質上相同一份程式碼,就不太算是模組化。

[第一期]:Framework Project

利用原生的方式建立 Framework,並且對它進行版控,他人可以使用或新增功能

建立方式

  1. 建立一個 Framekwork 專案 ( 例如: TestFrameworkKit )
  2. 內部建立任意程式碼,並確認可以編譯成功即可,
    • (記得使用 Git 進行版控,以確保每個成員使用的版本)

使用方式

  1. 將 xcodeproj 拉進 App 專案
  2. 設定專案的 Framework, Libraries, and Embedded Content,加入剛剛的 Framekwork
  1. 最後 import Framekwork 就可以使用

開發方式

相關應用


🤔【 問題 】
模組無法使用三方(ex.FacebookSDK),專案會發生編譯和 Link 的問題

有以下兩種最常見的方式

Umbrella Framework 的優缺

  • [優點]:
    1. 自由的加入各種 SourceCode 或已編譯 Framework
  • [缺點]:
    1. 官方不推薦使用,理由是 framework 不應包含整個其他的 framework,應保持檔案乾淨
    2. 做法混亂不一,各個 Xcode 或 iOS 版本做法有些許差距,難以維護並使用….
    3. 做法冗長複雜,難以加入工作流程,雖然可以用 Script 解決,但也可能有因三方或 Xcode 版本產生其他問題
    4. 因內部三方被隱藏,而產生版本衝突的隱藏危機
      • ex.有個 UmbrellaA 包含 FB framework(v2.0),有個 UmbrellaB 包含 FB framework(v3.0),可能不同版本內部實作有差異,而產生不預期的錯誤。
    5. 內部三方難更新

Cocoapods Dependency 的優缺

  • [優點]:
    1. 自由的 dependency 官方 cocoapods 上的三方或是的 local podSpec。
    2. 如果有 dependency 相同三方卻不同版本會有錯誤提示,不會有不同版本的錯誤!!!
      • ex.手機專案裡 pod 'Flurry-iOS-SDK/FlurrySDK', '~> 9.0.0',在 TestFrameworkKit 裡 dependency 'Flurry-iOS-SDK/FlurrySDK', '~> 8.0.0',會有錯誤提示
    3. 因為三方統一在 Pod 裡,所以 TestFrameworkKit 用的三方,手機專案可以直接使用!!!
      • ex.手機專案裡不需要再 pod Flurry、FB….,因為 TestFrameworkKit 已經 dependency 過, 只需要專注 pod 各自手機專案需要的特殊三方
    4. podSpec 專案架構與設定極為簡單,只要有 podspec 檔即可!!!

[第二期]:Local Podspec

利用 Local Podspec 的方式建立本地 Framework,多人協作就使用版控

開始學習建立 Podspec 模組或三方,往往都是從 Local 建立的,可以依照下面的步驟建立屬於自己的模組,記得將這份模組用 Git 進行版控開發,讓別人可以 Clone 下來使用 ,未來甚至可以上傳到公開的 CocoaPods Specs 裡讓大家下載。

建立方式

  1. 終端機執行 pod lib create TestPodFramework

  2. 依照需求回答一系列問題,最後建立專案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    What platform do you want to use?? [ iOS / macOS ]
    > iOS
    What language do you want to use?? [ Swift / ObjC ]
    > Swift
    Would you like to include a demo application with your library? [ Yes / No ]
    > Yes
    Which testing frameworks will you use? [ Quick / None ]
    > None
    Would you like to do view based testing? [ Yes / No ]
    > No
  3. 打開專案會看到 Demo 和 Framework 本身

  4. 替換 Development Pods 內的檔案或程式碼,新增自己要的類別或功能在 Class 資料夾(注意一定要在這)

  5. 重新 pod install,即可直接編譯 Demo 測試功能

使用方式

  1. 當其他專案要使用時,將 TestProject 和 TestPodFramework 放在同一層

  2. 新增 TestProject 的 podFile,並加上下列語法就是讀取本地模組

    1
    pod 'TestPodFramework', :path => '../TestPodFramework'
  1. 重新 pod install,最後 import Framekwork 就可以使用

開發方式

相關應用


🤔【 問題 】
如果只有單一模組的話,多個功能之間會高度耦合,登入功能升版時,推播功能也必須升版,需要進行模組的拆分