背景
最近TrollStore用得挺多,给自己也弄了两个微信。但是在微信读书授权的时候,唤起的微信登录,是A微信,不是B微信。目标是希望能唤起B微信。
具体过程
如果你不希望看原理,那么就直接跳到总结。
顺带说下,A微信为官方的Bundle ID:com.tencent.xin
B微信是自己定义的一个:com.tencent.xinVan
Bundle ID是iOS App,唯一的身份标识,所以不能重复
- 结合第一性原理,去了解了一下iOS在开中是如何唤起另一个App的。找到了
CFBundleURLSchemes
这个参数。这个参数是被唤起的App,向iOS提交自己的资源名。
如果写wechat
,那么wechat://xxx
这样的schemes,就会请求唤起微信。
- 由于主动唤起的代码肯定是无法修改的(最多找到常量的配置地方,去修改,但是那样就需要静态分析什么的,比较麻烦),所以就想着简单点,直接修改被唤起App的scheme。
- 其实就是A、B两个App,都是同样的scheme,所以想着,把A的scheme配置去掉。于是乎,用
Fliza
找到A的info.plist
文件,去掉了CFBundleURLSchemes
相关的配置。
这个时候,我用Safari去调用B中写的任何一个scheme,都是可以成功唤起B,而不是A的。但是微信阅读依旧唤起的是A,而不是B……这个就很尴尬。
考虑到是不是系统缓存的问题,但是搜了一圈没搜到,也不想重启。于是乎,就卸载了A,修改了包中的info.plist
文件,重新打包签名安装。
OK,搞定。
总结
对于多开应用的情况下,如果你想要唤起B,而不是A。
那么做如下几步:
- 安装签名后的B;
- 修改A的
info.plist
文件:找到CFBundleURLSchemes
,删掉其中的数组配置; - 打包安装签名后的A;