# 9. 你的项目中还用热修复吗？

**作者**: [Lefe\_x](https://weibo.com/u/5953150140)

前两天知识小集群里有人讨论关于热修复的问题，对此我非常感兴趣，今天作为一个小集和大家探讨一下。虽然目前苹果严禁带有热修复功能的 APP 上线，一旦发现，将增加审核时间（大约是一周的时间）。苹果主要考虑到了安全问题，避免给自己找事，所以干脆禁用了 JSPatch。但是 JSPatch 使用的 API 并没有违反苹果的规定，他也就没有一个十足的理由拒绝你的 APP 上线。这样就导致还有很多公司在悄悄地用 JSPatch。不过原理基本都是对 JSPatch 进行混淆后使用，当然如果你有能力自己实现一个 JSPatch 也可以。

被拒苹果的拒绝理由大概是这样的：

![1](https://3602781484-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUYeWAm5IWBtrAOZ2Bb%2F-LUYjcutxneQXizIQfB1%2F-LUYjnwtA-8Jf9PKzzqY%2F1.jpeg?generation=1545714227256161\&alt=media)

目前我了解到市面上主要通过以下几种方式进行混淆（如果对这个话题感兴趣，后续我们会在【知识小集】公众号 进一步探讨）：

## 方式一：使用官方提供的混淆方式

目前使用官方提供的 JSPatch 服务任然可以过审，据说也是通过静态混淆-宏定义 这中方式。

## 方式二：Bugly（静态混淆-宏定义）

Bugly 提供了热修复功能，它提供了一种对 JSPatch 混淆的方式。在 `BuglyHotfixConfuse_pch.h` 文件中把需要混淆的类名方法名替换掉。有兴趣的读者可以 在 [https://bugly.qq.com/v2/downloads](https://bugly.qq.com/v2/downloads) 查看详细代码。

![2](https://3602781484-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUYeWAm5IWBtrAOZ2Bb%2F-LUYjcutxneQXizIQfB1%2F-LUYjnwvFaEOvZ3ox5Pr%2F2.jpeg?generation=1545714227366623\&alt=media)

## 方式三：自己混淆

自己混淆当然是最保守的，苹果很难察觉。某天网上爆出一个 ZipArchive 安全漏洞，而这个漏洞的一个条件就是使用了类似 JSPatch 这种可以动态执行脚本的功能，而被爆出的 APP 经查确实使用混淆后 JSPatch，而他们采用的混淆方式也就是自己混淆。所以自己混淆 JSPatch 这条路是通的。自己混淆主要是理解 JSPatch 的原理，换一种方式来实现。
