一些應用可能因爲觸及了蘋果公司的利益而不適合發佈到App Store上。因此,可能需要分多個版本。對於開發者來說,這是一件非常喫力不討好的事情。不管是分多個分支還是多個target進行管理和維護,都需要耗費大量的時間和精力。因此,我們想通過本地庫的實踐來證明可以少做很多重複工作。
- 首先下載兩個微信SDK,一個具備支付功能完整版本,另一個不具備支付功能的輕量版本
- 在項目根目錄新建一個目錄,命名爲
WeiXinOpenSDK
, 存放這兩個SDK
,一個叫OpenSDK
,另一個叫OpenSDKNoPay
,其實內部文件結構一致,只是.a
大小不一,其次就是請求類和響應類有無支付相關的類的區別 - 創建一個
WeiXinOpenSDK.podspec
文件用於描述本地庫的一個規則
目錄結構如下
:
.
├── OpenSDK
│ ├── WXApi.h
│ ├── WXApiObject.h
│ ├── WechatAuthSDK.h
│ └── libWeChatSDK.a
├── OpenSDKNoPay
│ ├── WXApi.h
│ ├── WXApiObject.h
│ ├── WechatAuthSDK.h
│ └── libWeChatSDK.a
└── WeiXinOpenSDK.podspec
- 編寫
.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
- 在調用微信支付的地方,做一下預編譯宏的判斷,比如獲取參數,組裝微信對象參數以及回調的地方,凡是涉及到微信支付類的地方加一下判斷就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
}
通過修改.podspec
的default_subspec
進行切換SDK
,每次修改重新install
即可