如果你在使用WeexSDK
开发 iOS App,并用到微信相关功能,应该会遇到和我同样的问题,WXLogLevel 命名冲突,编译报错如下图;
如果你没遇到这个问题,说明你的WeChatOpenSDK
版本较低,在升级了WechatOpenSDK 1.8.2
版本后出现的这个问题,微信在新的sdk 中的 WXApiObject.h
与 WeexSDK 中 WXLog.h
定义了命名相同的枚举值 – WXLogLevel
遇到这个问题,二者只能修改其一了,WeChatOpenSDK 提供的是静态库,无法修改,好在 WeexSDK 是开源的,我们一直以来也是通过源码依赖的,所以打算将 WeexSDK 中 WXLogLevel 重命名为 WeexLogLevel,为了避免漏改,建议在 WeexSDK 文件夹中全局搜索替换一下
然后将工程中用到 WXLogLevel 的地方也修改一下,大多开发者应该只有在 初始化 WeexSDK 的时候会设置一下 LogLevel [WXLog setLogLevel:WeexLogLevelLog]
;
重新编译运行,问题解决;
如果仅仅就是这样,那么就不会有这篇文章了,有一种相对来说影响范围更小的解决方案,请继续往下看
为了避免之后每次升级WeexSDK,都需要修改一次,所以我打算给 WeexSDK 仓库提个 PR,希望以上的修改能被采纳,在提交之前和 Weex 官方的 iOS 开发大佬 acton393 交流了一下,大佬提供了一种通过添加一个宏定义,来减小影响范围的方法,如下图
修改WXLog.h 文件
- 添加宏定义:
#define WXLogLevel WeexLogLevel
- 将枚举命名 WXLogLevel 改为 WeexLogLevel
这样的修改,就不需要改动其他使用到 WXLogLevel 的文件了,程序在编译阶段会将 WXLogLevel 替换为 WeexLogLevel,对于上层使用者,没有用到 微信SDK 的用户可以做到无感知;
但是有一点需要注意,对于使用了 微信SDK 的用户,一定要先引用 WXApi.h
然后在引用 WXLog.h
文件,如下图
最终也是以这种方法的修改提交了 PR,又遇到同样问题的同学可以参考一下。
还是做 SDK 的大佬想的周全,膜拜一下;