日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS模块化灰度 A/BTest

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS模块化灰度 A/BTest 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS模塊化灰度改造

服務能力

To 技術:

  • 新功能模塊級別的 灰度發布.

  • 線上版本回退老版本的能力.

  • 一個App內 打入不同版本模塊的能力.

  • 模塊組裝到不同App的能力. 比如司機端模塊 可以單獨組裝為司機端App 也可與騎手端組裝在一起 打包成司機 + 騎手端App.

  • 支持多個版本并行開發.

  • To 業務方:

  • 不同地區 運行不同版本的業務代碼.
  • 某些地區先試點,時機成熟后 線上動態擴大/縮小試點范圍.

    不同地區 不同市場策略 業務邏輯的實現.

  • 新舊版本A/B Test.

  • 預埋節假日模塊,指定節假日不用發版 即可運行節假日模式.

  • 方案概述

    第一階段:

    將業務代碼拆分到Pods中,不同版本的業務代碼打包成不同的Pods.

    由于Swift中不同Pods中的代碼屬于不同的Module,所以將不同的Pods組裝到同一個App內不需要考慮重名的問題.

    這樣改造后的App = 穩定版業務代碼Pods + 新開發版本業務代碼Pods + 共用的三方庫代碼.

    接入服務端配置中心后,可以在服務端控制Native用戶使用的業務版本.

    第二階段:

    將第一階段業務代碼拆分為不同的組件,僅對需要灰度的模塊進行多版本的預埋.

    客戶端的主動降級保護,啟動App后如果在一定時間內Crash,下次啟動自動降級為穩定版本.

    手動配置腳本化.

    方案總攬

    方案總攬

    方案缺點

  • 包內預埋多個版本的模塊 包大小增加.

  • 部分步驟目前需要手工配置xcode.

  • 實施過程

    Step 1 將代碼封裝到Pods中管理,制作Podspec.

    Podspec

    Step 2 .a形式的靜態庫處理.

    由于Pods中無法引入.a形式的靜態庫,需要把.a形式的靜態庫(比如微信支付)封裝為.framework形式的動態庫或者靜態庫.

    這里我們封裝為.framework形式的動態庫.

    封裝過程

    編譯時如果遇到找不到頭文件,請檢查WXPay.framework中的module.modulemap 是否包含下圖中的頭文件.

    WXPay modulemap

    或者 在 module.modulemap中指定的umbrella header文件WXPay.h中 引入需要暴漏的頭文件 如下圖. 也比較推薦這種方式.

    WXPay modulemap

    Step 3 部分vendor framework完善.

    比如AMap3DMap.framework AMapFoundation.framework中沒有包含module.modulemap的三方framework,

    編譯時找不到頭文件,需要手工/腳本添加 module.modulemap.

    我們這里可采用在 podfile中添加腳本的方式 具體見下圖:

    podfile

    Step 4 去除之前App工程Header Bridge頭文件.

    由于之前Swfit工程通過Header Bridge頭文件去找引入OC代碼的頭文件.改造后引入的庫封裝到Pods中 以framework的形式引入工程,

    在添加module.modulemap后無需通過header bridge頭文件的方式引入頭文件.

    所以可以在主工程刪除Header Bridge頭文件.

    Step 5 header search path 添加vender framework path

    在 Build Settings > framework search path 中添加 vender framework的路徑

    Step 6 App內內置兩個版本業務代碼Pods后 xcode需要的設置

    當預置兩個版本業務代碼Pods后,會出現Pods安裝不成功.

    分析一下 項目結構時 主工程 包含 Pods A & Pods B.

    Pods A & Pods B包含了同樣的Vendor Framework.

    此時我們可以把Pods B中Vendor Framework中的庫刪掉.

    然后在Pods B的Target > Build Settings > Framework Search Paths中指向Pods A的Vendor Framework.

    達到 主工程 包含 Pods A & Pods B. Pods A & Pods B沒有引入兩份相同的Vendor Framework,而是共用一份Vendor Framework.

    參考資料

    組件化-動態庫實戰

    讓CocoaPods static library支持Module

    Xcode 創建.a和framework靜態庫



    作者:Nirvana_icy
    鏈接:https://www.jianshu.com/p/e112002d9660
    來源:簡書
    著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

    總結

    以上是生活随笔為你收集整理的iOS模块化灰度 A/BTest的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。