远程控制 - 从 Xcode 控制你的 iPhone

“Remote” 是一个 Xcode 插件,允许你在开发期间从 Mac 上的窗口控制 iPhone。最初是为了避免在测试期间拿起设备而创建的,你可以录制设备触摸的“宏”并重放它们。它还会将生成的屏幕输出与快照进行比较,以进行端到端测试。宏日志是一个可编辑的 WebView,可以随意修改。最后,你现在可以录制并将所有显示输出保存到 QuickTime 电影中。

更新: 这个以前的 Xcode 插件已被重新组织成一个 Swift 包,以便在其他应用程序中使用。要使用 Remote,只需将此项目添加为 Swift 包,并将 RemoteCapture 目标添加到你的应用程序。它将使用你的桌面主机名自动连接。你还需要运行一个包含 RemoteUI 目标的应用,例如 InjectionIIIHotReloading 守护进程,并启用“远程控制”以接收连接并呈现你设备的屏幕。 默认情况下,将包添加到项目将尝试连接到运行远程 UI 的进程。 包清单会将你的主机名编译到包中,因此它应该能够从设备连接。

Icon

(GIF 显示了录制宏、保存宏,然后重放宏 - 测试屏幕是否与快照中的预期一致。)

要使用,请下载此插件的压缩源代码,构建并重新启动 Xcode。 然后,你可以使用“Product/Remote/Patch App”修补你项目的 main.m 文件,以包含 Remote 客户端头文件,或者如果使用模拟器,它可以从 bundle 动态加载。 使用设备时,请检查正确的 IP 地址是否已修补到 main.m 中,以便设备可以连接。 要与 Swift 一起使用,请向你的项目添加一个空的 main.m 文件,以便可以对其进行修补。

默认情况下,显示阴影窗口不会显示。 使用菜单项“Product/Remote/Load”使其出现。 此后,在阴影显示或设备上的触摸操作将被应用和记录。 要保存宏或一系列触摸操作,请在触摸显示屏底部的文本字段中输入名称,然后单击“保存”按钮。 然后,你可以通过使用触摸显示屏顶部的下拉菜单加载宏并单击“重放”或直接从“Product/Remote/”菜单重放宏。

对于端到端测试,通过单击“快照”按钮在宏中包含快照。 重放时,宏将暂停,直到屏幕在指定的容差范围内与快照匹配,或者超时并询问你是否要更新快照或使用的容差值(记住保存更新后的宏)。 容差的单位是屏幕图像在相似像素值的游程编码后不同的字节数。

记录/重放的宏条目

实现类

UI

内部(通过协议 RMDeviceDelegate 连接)

RemoteCapture.h 需要使用 ARC 编译已修补的 main.m。

局限性

Remote 使用 [UIWindow.layer renderInContext:],因此设备上的大多数活动都会被捕获,包括键盘,但不包括视频重放和 openGL 图层。 UIAlertView 提示也不会被捕获,因为它们似乎在窗口层次结构之外呈现。 最后,UIDatePicker 根本无法正确呈现,尽管它们会对事件做出响应。 为了保持到设备的网络带宽,不会播放动画。

如果你首先在设备上点击一下,Remote 在滑动事件中的表现会更好。

请注意:由于某种原因,Xcode 大约需要一分钟才能在其服务器套接字上接受远程连接(防火墙复杂性?)。 重新启动 Xcode 后,你可能需要等待一段时间才能从设备使用 Remote 插件。

感谢

用于视频捕获的 AVFoundation 代码改编自:https://github.com/acj/TimeLapseBuilder-Swift

MIT 许可证。 请参阅 LICENSE 文件了解详细信息。