大家在项目开发的时候,特别是UI调试,一个小小的改动就要重新运行整个项目,开发3秒钟,运行5分钟。如果了解过 React Native 开发的应该知道,React Native 调试方式热重载(Hot Reload),只要改动代码,就可以实时看到效果,对于UI调试来说,简直是成吨提升开发效率。
在 iOS 开发中利用 injectionIII 也可以帮我们实现热重载,写好代码后,我们不需要重新运行 Xcode 就可以看到我们改动代码之后的效果。
安装
使用
-
安装好之后,在应用程序中找到 injectionIII 打开。
-
打开项目,在 AppDelegate 文件的
didFinishLaunchingWithOptions
方法中添加如下代码
OC:
#if DEBUG
// for iOS
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
// for tvOS
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle"] load];
// for masOS
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle"] load];
#endif
Swift:
#if DEBUG
// for iOS
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load()
// for tvOS:
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle")?.load()
// for macOS:
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle")?.load()
#endif
- 在需要进行调试的类中(任意继承自OC的类)加入如下代码
OC:
- (void)injected {
NSLog(@"I've been injected: %@", self);
//调试的代码
}
Swift:
@objc func injected() {
print("I've been injected: (self)")
//调试的代码
}
- 添加完上边代码后,快捷键
COMMAND + R
运行项目。然后我们就可以在- (void)injected
方法中随意更改代码,每次改完之后在当前文件下按下COMMAND + S
快捷键重载,就可以在模拟器看到更改代码之后的效果。根本不需要重新运行整个项目。
对原理感兴趣的可以看下这篇文章:
Injection:iOS热重载背后的黑魔法
网友评论