使用pod本地庫加預編譯宏切分微信SDK不同版本

一些應用可能因爲觸及了蘋果公司的利益而不適合發佈到App Store上。因此,可能需要分多個版本。對於開發者來說,這是一件非常喫力不討好的事情。不管是分多個分支還是多個target進行管理和維護,都需要耗費大量的時間和精力。因此,我們想通過本地庫的實踐來證明可以少做很多重複工作。

  1. 首先下載兩個微信SDK,一個具備支付功能完整版本,另一個不具備支付功能的輕量版本
  2. 在項目根目錄新建一個目錄,命名爲WeiXinOpenSDK, 存放這兩個SDK,一個叫OpenSDK,另一個叫OpenSDKNoPay,其實內部文件結構一致,只是.a大小不一,其次就是請求類和響應類有無支付相關的類的區別
  3. 創建一個WeiXinOpenSDK.podspec文件用於描述本地庫的一個規則

目錄結構如下:

.
├── OpenSDK
│   ├── WXApi.h
│   ├── WXApiObject.h
│   ├── WechatAuthSDK.h
│   └── libWeChatSDK.a
├── OpenSDKNoPay
│   ├── WXApi.h
│   ├── WXApiObject.h
│   ├── WechatAuthSDK.h
│   └── libWeChatSDK.a
└── WeiXinOpenSDK.podspec

  1. 編寫.podspec文件
Pod::Spec.new do |s|
  s.name                  = 'WeiXinOpenSDK'
  s.version               = '2.0.2' #對標微信開放平臺的2.0.2微信sdk版本
  s.license               = 'MIT'
  s.summary               = '微信SDK'
  s.homepage              = '<https://xxxxxx>'
  s.author                = { 'CoderWGB' => 'xxx' }
  s.source                = { :file => './WeiXinOpenSDK.podspec', :tag => "v#{s.version}" }
  s.requires_arc          =  true
  s.ios.deployment_target = '10.0'
  s.default_subspec = 'OpenSDK' #具備支付功能  不上AppStore時打開
  #s.default_subspec = 'OpenSDKNoPay' #不具備支付功能 上AppStore時打開

  #完整版 具有支付功能
  s.subspec 'OpenSDK' do | ss |
    ss.source_files = 'OpenSDK/*'
    ss.vendored_libraries = 'OpenSDK/libWeChatSDK.a'
    ss.public_header_files = 'OpenSDK/*.h'
    #通過配置預編譯宏進行區分 做到只修改一行代碼 pod install一下就可以切換微信SDK
    ss.xcconfig = {
      'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) WXPAY_VERSION=1'
    }
  end
  #輕量版 沒有支付功能
  s.subspec 'OpenSDKNoPay' do | ss |
    ss.source_files = 'OpenSDKNoPay/*'
    ss.vendored_libraries = 'OpenSDKNoPay/libWeChatSDK.a'
    ss.public_header_files = 'OpenSDKNoPay/*.h'
    ss.xcconfig = {
      'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) '
    }
  end

end

  1. 在調用微信支付的地方,做一下預編譯宏的判斷,比如獲取參數,組裝微信對象參數以及回調的地方,凡是涉及到微信支付類的地方加一下判斷就OK

例如:

#ifdef WXPAY_VERSION
//組裝微信支付參數
+ (PayReq *)converWXReq:(AKGetChargeModel *)res;
#endif

- (void)onResp:(BaseResp *)resp
{
    //通過預編譯宏 編譯階段區分開 避免被蘋果掃出來
#ifdef WXPAY_VERSION
    if ([resp isKindOfClass:[PayResp class]]) {
        NSString *message = @"";
        if(resp.errCode == 0){
            message = @"支付成功";
        }else if (resp.errCode == -2){
            message = @"已取消支付";
        }else{
            message = @"支付失敗";
        }
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AKWXPaySuccessFlag" object:@{
            @"isSuccess": @(resp.errCode == 0),
            @"message": [NSString stringWithFormat:@"%d %@",resp.errCode,message]
        }];
    }
#endif
}

通過修改.podspecdefault_subspec進行切換SDK,每次修改重新install即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章