通过源码接入三方库正常使用,framework产物接入部分功能失效
踩坑场景
flutter在使用permission_handler库时,flutter通过源码接入宿主工程时,iOS申请权限系统弹窗正常弹出。通过打包framework
方式接入宿主工程时,iOS申请系统弹窗不弹,直接返回被永久拒绝。
问题定位路线
- 下载permission_handler库源码,提交到私有仓库
- 增加日志,定位问题原因为permission_handler使用了宿主工程
GCC_PREPROCESSOR_DEFINITIONS
配置的一个宏定义。 GCC_PREPROCESSOR_DEFINITIONS
是用于设置预处理器宏的。这些宏在编译时会被替换。然而,这些宏只能在编译时期的源代码中使用,不能在运行时期的代码中使用。因此,如果你在framework中尝试读取这些宏,是无法读取到的。- permission_handler的iOS部分源码,通过宏是判断业务代码是否开启了某一权限白名单,获取到宏且宏定义为1,即调用申请权限流程。否则直接返回权限被永久拒绝。
解决方案
通过设置permission_handler的iOS源码中默认宏配置,开启对应白名单。打包提交私有库,页面代码修改 permission_handler路径指向为修改后的私有库地址。