项目背景:最近在对接微信支付SDK。壳工程是Swift开发语言,但是微信支付是OC开发语言。问题就随之而来了。如
壳工程
怎么调用封装Swift版本的pod
代码、壳工程
怎么调用封装Swift版本的pod
代码里的oc代码、OC代码和Swift代码
调用问题等等
1:对微信支付SDK进行二次封装成pod库
需要到微信开发平台,下载如下文件(这里以1.8.7.1
为例)
- libWeChatSDK.a
- WechatAuthSDK.h
- WechatAuthSDK.h
- WXApiObject.h
2:创建pod lib create WeChatPaySDK
在命令行里执行 pod lib create WeChatPaySDK
按照提示,一路填写信息即可
3:把文件放到Classes文件夹下
4:.podspec文件内容如下
1 | objc复制代码Pod::Spec.new do |s| |
注意问题s.static_framework = true
,微信用静态库,而工程的Podfile文件里有设置了use_frameworks!
如果不设置就会报如下问题
1 | objc复制代码**dyld[5883]: Library not loaded: @rpath/WeChatPaySDK.framework/WeChatPaySDK** |
5:校验微信支付SDK是否接入正常
可以直接在appdelegate
添加注册和调用自检函数
添加头文件 #import "WXApi.h"
1 | objc复制代码 添加头文件 #import "WXApi.h" |
另外一种校验模式,看下文混编调用
验证的结果看日志打印,能打开微信即可
6:关于对微信支付SDK二次封装的小结
到了这里,已经完成了二次对微信支付SDK的封装
- 注意podsepc文件里引用的frameworks,libraries
- 注意配置成
s.static_framework = true
(原因查找上文) - 主要配置vendored_libraries,指向.a文件所在地址
- xcconfig配置
7:(混编)封装微信支付SDK,OC和Swift调用
7.1 同在swift的pod库里,swift文件调用OC代码(微信代码)
在封装的pod库里添加一个MSPayManage.swift
文件,记住这里就可以直接用oc的头文件,无需添加头文件引用
1 | swift复制代码import UIKit |
7.2 同在swift的pod库里,swift文件调用创建OC代码
1 | objc复制代码@interface MSPayRequest : NSObject |
在swift代码调用oc代码
1 | swift复制代码import UIKit |
7.3 OC的壳工程调用swift的pod中的swift文件
引入头文件#import "WeChatPaySDK-Swift.h"
,这个文件是默认存在的
在OC壳工程里appdelegate
调用swift代码如下
1 | objc复制代码MSPayManage * manage = [[MSPayManage alloc] init]; |
重点来了
:这里可以实例化到我们写的swift文件,但是无法调用具体的方法,所以,要在方法添加一个@objc
7.4 OC的壳工程调用swift的pod中的OC文件
注意这里引入的头文件是有差别的#import "WeChatPaySDK-umbrella.h"
这样就可以在appdelegate文件里调用了
1 | objc复制代码#import "ZZGAppDelegate.h" |
8:配置重点提示
一定要注意.a
文件的路径位置!!!,否则可能出现能引用到,但是调用就提示找不到的情况
1 | objc复制代码ld: Undefined symbols: |
写在最后的
写到最后,突然就有个疑问,关于微信支付SDK在swift上为什么就不能好好的使用?这也是我自己对比了oc壳工和swift壳工程以后,总结一下吧
- 微信支付SDK针对OC代码很友好,可以是直接使用对应的头文件
- 在针对swift的时候,甚至找不到头文件引入,没法直接使用。所以在本地二次包装一个pod,再使用的时候,直接引入对应的pod,微信的头文件就带上了
- 一定要带上
s.static_framework = true
配置 - 在加入了第3点配置以后,一定要在壳工程\主工程中一定要加入
install! 'cocoapods',:disable_input_output_paths => true
少走弯路,微信SDK可以更新一下
1 | objc复制代码-> WeChatPaySDK (2.0.0) |
有洲洲哥的就有Demo
感谢地同时,也可以添加的我的微信公众号,“洲洲哥”
本文转载自: 掘金