Fork me on GitHub

InjectionIII:iOS开发必备效率神器-所见即所得

img


今天 Mac App Store 提示软件更新,一看是 InjectionIII 更新了,而且这次更新是针对 Xcode10 的支持,赶紧上车更新一波。

由于这次更新后,配合 Xcode10 使用方式和之前的版本略有差异,所以在此介绍一下。

在介绍这款工具之前首先得感谢 John Holdsworth 开发者给我们iOS开发提供了帮助。假如你的项目每次 build 时间在半分钟以上,或者你电脑的配置不高,导致每次运行项目都很慢,那么你完全可以尝试一下这个神一样的工具!(提示:目前好像只支持在模拟器上使用,而且支持 OC 和 Swift)

废话不多说,先来欣赏一下功能演示:

img

真正的所见即所得!

另外,在使用 Injection 的时候需要先打开 Injection App,然后通过 Open Project 菜单按钮打开 Xcode工程所在的目录让 Injection 监控其文件变化,然后就可以打开 Xcode,将 Injection 启动代码加入 AppDelegate,把项目跑在模拟器上,接下来就可以愉快的编码啦(具体的流程,下面也会提到)。

img

提高开发效率

每当我写页面或者改 bug 的时候难免需要即时查看运行效果,有时候改了一个 label 的字体,或者背景颜色,或者 frame,都需要重新运行,但是现在不需要了,只要按下 command + S,保存当前文件。

img

文件保存的时候可以看到 Injection 的图标会变成绿色,这个时候表示正在执行热更新,过一会儿颜色又变成红色(这个过程可能很快,仔细观察可以看到)。

img

变成红色以后热修复就执行完了,可以查看效果了,官方表示保存以后可以立马看到效果,实际上是在修改的代码执行的时候会看到变化,所以往往都是退出这个页面,重新进入,如果是列表需要上下滑动才能看到效果。

使用十分便捷

这个是 Mac 上的一款 App,可以在 Mac App Store 中搜索 Injection,那款免费的 App 就是,现在已经更新到第三个版本,点击安装

img

找到你的 AppDelegate 实现文件,上代码:

OC 版

1
2
3
4
5
6
7
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle"] load];
// [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/macOSInjection10.bundle"] load];
// [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/tvOSInjection10.bundle"] load];
#endif
}

Swift 版

1
2
3
4
5
6
7
8
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
#if DEBUG
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle")?.load()
// Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection10.bundle")?.load()
// Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/tvOSInjection10.bundle")?.load()
#endif
return true
}

注意这里路径不要写错,建议复制粘贴

打开你的项目,command + R,运行项目,(如果你之前没有通过 Injection 添加项目路径,这个时候会弹出来一个选择框,让你选择项目的根路径。)

img

选择好当前项目的根目录,然后点击 Select Project Directory 按钮。

这个时候程序会继续运行,注意看 Xcode 控制台的 log日志。

1
Injection connected, watching /Users/bruce/Desktop/Demo/Timer/**

看到这句话的时候说明已经OK了,可以开始你的表演了!

在每次修改保存文件以后都会看到下面这句话 👇,如果没有看到效果,请排查下面列举的原因。

1
2
3
*** Compiling /Users/bruce/Desktop/Demo/Timer/Timer/ViewController.m ***
Loading .dylib - Ignore any duplicate class warning...
objc[63140]: Class ViewController is implemented in both /Users/bruce/Library/Developer/CoreSimulator/Devices/0461F832-5260-420C-982D-ACD9AB847B36/data/Containers/Bundle/Application/36D73A95-DAD4-4CD6-8C12-EADFF552C83C/Timer.app/Timer (0x107e986a0) and /Users/bruce/Library/Containers/com.johnholdsworth.InjectionIII/Data/eval101.dylib (0x125d356f8). One of the two will be used. Which one is undefined.

下面说一下有时候没有看到效果的原因。

没有看到效果的问题的总结

  • 确认 Injection 监听的目录和 Xcode 项目目录是否一致。
  • 再看下有没有保存成功,也就是针筒的颜色由绿色变成红色。
  • 确认上面那句话有没有打印,也就是说有没有真的运行这个工具。
  • 如果修改的是 cell / item 上面的内容,需要上下滚动才能看到效果。
  • 如果修改的是一个普通页面的内容,最好是退出这个页面,再进入这个页面。
  • 确认 Xcode 的版本和启动时添加的代码是否匹配,Xcode10 需要 iOSInjection10.bundle 才能生效。
------------- 本文结束感谢您的阅读 -------------