使用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即可

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