iOS-Hotfix
2018/10/05
Abby
可能的做法
连结 說明 备注 状态
BuglyHotfix 官⽹网 SDK,提供后台新增补丁及发布功能
1.官⽹网更更新⾄至2017/12/13,不确定是否还能使⽤用

2.顺利利安装完BuglyHotfix后,⽆无法顺利利在后台放
上补丁...
Pending
Aspects
官⽹网

参考
Aspects 为轻量量级 iOS Hotfix,核⼼心
原理理是动态替换⽅方法加上 OC 原⽣生的
动态调⽤用⽅方法的能⼒力力,通
过 JavaScriptCore 作为 Bridge 来达
到效果。
*可通过审核
1.可抓到class的method执⾏行行时间(前/后/取代)

2.可透过JSContext达到

fixClassMethod

callClassMethod

invoke

setInvocationParameter
尝试中
SimpleHotfix 官⽹网
下载xxx.framework.zip,使⽤用
SSZipArchive.unzipFile,可从中读
取ViewController
Sample的zip包⽹网址失效,没有实作过,不确定
可⾏行行性
尚未开始
ObjectiveKit 官⽹网
核⼼心原理理是动态替换⽅方法加上 OC 原
⽣生的动态调⽤用⽅方法的能⼒力力
要改的code有点多 尚未开始
iOS AOP
• AOP (Aspect-oriented programming) 
• 译为 “⾯面向切⾯面编程”,是通过预编译⽅方式和运⾏行行期动态代理理实现程序功能统⼀一维护的⼀一种技术。
• 使⽤用:Hook UIViewController 的 viewWillAppear: 和 viewWillDisappear: ⽅方法,在原⽅方法执⾏行行之后记
录需要统计的信息上报即可。
• Objective-C
• Objective-C 是⼀一⻔门基于运⾏行行时的编程语⾔言,这意味着所有⽅方法、变量量、类之间的链接,都会推迟到应
⽤用实际运⾏行行的最后⼀一刻才会建立。这将给开发⼈人员极⾼高的灵活性,因为我们可以修改这些链接。
• Swift
• Swift 绝⼤大多数时候是⼀一⻔门⾯面向编译时的语⾔言。因此在 Swift 当中,灵活性受到了了限制,不过您会因此
得到更更多的安全性。Swift 是⼀一种强类型语⾔言。类型静态,也就是说 Swift 的默认类型是非常安全的。
如果需要的话,不安全类型也是存在的,但是 Swift 仍然是尽⼒力力推动我们使⽤用安全的静态类型。
• 參參考:https://academy.realm.io/cn/posts/mobilization-roy-marmelstein-objective-c-runtime-swift-
dynamic/
Swift的动态性
• Swift 中的动态性可以通过 Objective-C 运⾏行行时来获得。
• 使⽤用@objc 和 @dynamic
• @objc 将您的 Swift API 暴暴露给 Objective-C 运⾏行行时,但是它仍然不能保
证编译器会尝试对其进⾏行行优化。如果您真的想使⽤用动态功能的话,就需要
使⽤用 @dynamic。⼀一旦您使⽤用了了 @dynamic 修饰符之后,就不需要添
加 @objc 了了,因为它已经隐含在其中。
• KVO
• KVO 和 KVC 在 Swift 被极⼤大地削弱了了。您所观察的对象必须要继承
⾃自 NSObject,并且使⽤用⼀一个 Objective-C 类型。您所观察的变量量必须要
⽣生命为 dynamic。您必须要对想要观察的事务了了如指掌。
Aspects
为什什么⽤用Aspects?
• 原理理:使⽤用OC 原⽣生的动态调⽤用⽅方法的能⼒力力。
• 扩充性:可通过 JavaScriptCore 作为 Bridge 来达到效果。
• Aspects ⽀支持实例例 Hook,作为使⽤用者⽆无需进⾏行行更更多的操作即可 Hook
指定实例例或者 Class 的指定 SEL,AspectOptions 参数可以指定 Hook
的点(执⾏行行时间前/后/取代),以及是否执⾏行行⼀一次之后就撤销 Hook。
• 延伸阅读:https://juejin.im/post/5a601903f265da3e5537f405
• 范例例: https://github.com/zljkevin/AspectsCrashDemo/tree/master/
AspectsDemo
Aspects接⼝口
使⽤用⽅方式
Objective-C
Swift
JavaScriptCore Bridge
• 使⽤用JS可達到
• 取代⽅方法fixMethod
• 呼叫⽅方法callMethod
• 取代返回值setInvocationReturnValue
• 取代参数setInvocationParameter
• 范例例:https://github.com/lzyy/felix
• 范例例:https://github.com/GitHubXuLiying/LYFix

iOS Hotfix

  • 1.
  • 2.
    可能的做法 连结 說明 备注状态 BuglyHotfix 官⽹网 SDK,提供后台新增补丁及发布功能 1.官⽹网更更新⾄至2017/12/13,不确定是否还能使⽤用 2.顺利利安装完BuglyHotfix后,⽆无法顺利利在后台放 上补丁... Pending Aspects 官⽹网 参考 Aspects 为轻量量级 iOS Hotfix,核⼼心 原理理是动态替换⽅方法加上 OC 原⽣生的 动态调⽤用⽅方法的能⼒力力,通 过 JavaScriptCore 作为 Bridge 来达 到效果。 *可通过审核 1.可抓到class的method执⾏行行时间(前/后/取代) 2.可透过JSContext达到 fixClassMethod callClassMethod invoke setInvocationParameter 尝试中 SimpleHotfix 官⽹网 下载xxx.framework.zip,使⽤用 SSZipArchive.unzipFile,可从中读 取ViewController Sample的zip包⽹网址失效,没有实作过,不确定 可⾏行行性 尚未开始 ObjectiveKit 官⽹网 核⼼心原理理是动态替换⽅方法加上 OC 原 ⽣生的动态调⽤用⽅方法的能⼒力力 要改的code有点多 尚未开始
  • 3.
    iOS AOP • AOP(Aspect-oriented programming)  • 译为 “⾯面向切⾯面编程”,是通过预编译⽅方式和运⾏行行期动态代理理实现程序功能统⼀一维护的⼀一种技术。 • 使⽤用:Hook UIViewController 的 viewWillAppear: 和 viewWillDisappear: ⽅方法,在原⽅方法执⾏行行之后记 录需要统计的信息上报即可。 • Objective-C • Objective-C 是⼀一⻔门基于运⾏行行时的编程语⾔言,这意味着所有⽅方法、变量量、类之间的链接,都会推迟到应 ⽤用实际运⾏行行的最后⼀一刻才会建立。这将给开发⼈人员极⾼高的灵活性,因为我们可以修改这些链接。 • Swift • Swift 绝⼤大多数时候是⼀一⻔门⾯面向编译时的语⾔言。因此在 Swift 当中,灵活性受到了了限制,不过您会因此 得到更更多的安全性。Swift 是⼀一种强类型语⾔言。类型静态,也就是说 Swift 的默认类型是非常安全的。 如果需要的话,不安全类型也是存在的,但是 Swift 仍然是尽⼒力力推动我们使⽤用安全的静态类型。 • 參參考:https://academy.realm.io/cn/posts/mobilization-roy-marmelstein-objective-c-runtime-swift- dynamic/
  • 4.
    Swift的动态性 • Swift 中的动态性可以通过Objective-C 运⾏行行时来获得。 • 使⽤用@objc 和 @dynamic • @objc 将您的 Swift API 暴暴露给 Objective-C 运⾏行行时,但是它仍然不能保 证编译器会尝试对其进⾏行行优化。如果您真的想使⽤用动态功能的话,就需要 使⽤用 @dynamic。⼀一旦您使⽤用了了 @dynamic 修饰符之后,就不需要添 加 @objc 了了,因为它已经隐含在其中。 • KVO • KVO 和 KVC 在 Swift 被极⼤大地削弱了了。您所观察的对象必须要继承 ⾃自 NSObject,并且使⽤用⼀一个 Objective-C 类型。您所观察的变量量必须要 ⽣生命为 dynamic。您必须要对想要观察的事务了了如指掌。
  • 5.
  • 6.
    为什什么⽤用Aspects? • 原理理:使⽤用OC 原⽣生的动态调⽤用⽅方法的能⼒力力。 •扩充性:可通过 JavaScriptCore 作为 Bridge 来达到效果。 • Aspects ⽀支持实例例 Hook,作为使⽤用者⽆无需进⾏行行更更多的操作即可 Hook 指定实例例或者 Class 的指定 SEL,AspectOptions 参数可以指定 Hook 的点(执⾏行行时间前/后/取代),以及是否执⾏行行⼀一次之后就撤销 Hook。 • 延伸阅读:https://juejin.im/post/5a601903f265da3e5537f405 • 范例例: https://github.com/zljkevin/AspectsCrashDemo/tree/master/ AspectsDemo
  • 7.
  • 8.
  • 9.
    JavaScriptCore Bridge • 使⽤用JS可達到 •取代⽅方法fixMethod • 呼叫⽅方法callMethod • 取代返回值setInvocationReturnValue • 取代参数setInvocationParameter • 范例例:https://github.com/lzyy/felix • 范例例:https://github.com/GitHubXuLiying/LYFix