iOS 审核之 Performance - 2.5.2 被拒 dlopen(), dlsym(), respondsToSelector:, performSelector

现象




问题

前段时间界内掀起一阵热更新浪潮,然后苹果大大就发火了,然后呢... 所有包含下载远程脚本、动态加载其他库这种操作嫌疑的App都被警告了。
本以为自己App内没有上面这种东西,可以放心度过此劫,可是没想到一大早就发现 iTunes Connect 给自己发的邮件。苦逼中…
经历了大大小小四次提交审核,苹果大大终于放我通关了。 哎,记录一下,给后面的兄弟一点帮助。

探讨

我把苹果审核发的通知截个图放在上面,出于程序员的本能,我们第一眼就看见了 dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations() 这些方法。
于是乎,我们下意识就认为是苹果不让我们用这些方法了,可是 在程序中 cmd+3 全局搜 respondsToSelector、performSelector等方法,发现有一大堆,关键好多是第三方…(心里顿时跑过一群草泥马) 。
没招了,又不能全部删除吧,好多第三方根本就不敢触犯啊,谁知道你瞎弄了一下,后面会出什么幺蛾子。

上论坛找啊找,虽说有朋友将问题提出来,但是很少有人给出认证过的解决方案。(看来大家都在研究)

经过漫长的寻找,发现了几个比较值得注意的观点
1. 审核团队不是禁用  respondsToSelector 等 方法
2. 审核团队禁用的是动态更新加载这种操作
3. 那些JavaScriptCore.framework 、libicucore.tbd 能不用就不用
4. 最新审核协议必须接受

终于不用删除 respondsToSelector 等方法,我就舒心了许多。
开始排查程序,进行提交等下面一些列步骤

第一步 检查自己写的代码没有远程下载脚本或加载动态库操作(有的话,自己想办法)
第二步 检查第三方库 (我是遇到大问题了)
            - 有热更新的自己干掉它 (反正我是没有)
            - 有高德地图的 自己想办法(干掉或者换新的) (反正我是没有)
            - 推送组件 “个推”, 旧版本个推偷偷使用了有关东西 (干不掉,只能更新)
            - 反馈组件 Bugtags  ,感觉有点像(干掉它,其实在程序中也是个累赘,借着这个机会偷偷弄)
            - 友盟组件 感觉有点像 (由于使用的地方较多,不能干掉他,但是出于对大厂更新的信任,全部换成最新的
第三步 iTunes Connect 同意最新的协议 (谁敢不同意,找死啊)
第四步 跟苹果大大交流一下(提及一下本程序没有主观加载动态脚本,并且也没有热更新之类的,大概意思就是我是乖宝宝,放我一马)
第五步 提交审核

经过四次的提交,苹果大大终于同意了.(第一次更新友盟组件, 第二次删了Bugtag、第三次更新了个推,第四次因为展示图(忘了更换展示图,内容不一致))

感想

1. 没事多逛逛论坛,虽不能给你答案,但是会给你思路
2. 不要怕被拒,第一次审核时间长(2天),后面你放低态度,跟审核团队交流,一天就出结果(上午改、中午提交、晚上他们审核给你反馈)
3. 少用第三方,代码能自己写就自己写吧,不然…(你会经常遇见一群草泥马)

我是转载了的,他说的我的项目都中招了,哭死

你可能感兴趣的:(iOS,Performance,被拒,dlopen,dlsym,performSelector)