如题,最近公司看见 MTC 实现的远程真机,需要我去攻坚,但是由于技术储备以及对测试的不了解,没能攻克,希望在这里和大家一起讨论,一起解决这个问题。。。好东西一起分享嘛~~~
嘛,我先来说下我的大概思路吧:

页面显示

先前不是有ios-minicap可以通过不断的自动截图来显示 iOS 页面的实时显示嘛,基于这个框架可以实现页面的回显。具体安装步骤可以看一下我在 CSDN 里面写的ios-minicap 安装使用指南

真机连接

连接协议主要是用的 usbmuxd Proxy,这个主要还是通过libimobiledevice协议库来实现安装啊截图啊日志啊什么的

然后是 Facebook 提供的绝大多数都在使用的 WebdriverAgent,可以直接用 WebSocket 通讯发送命令 (ps:我的 WDA 特别傲娇各种找我麻烦,特别爱报 operation never finished bootstrapping 的错,https://testerhome.com/topics/9666,这里特别讲了一下我遇到的两个大麻烦)

操纵实现

有两个方案
一、是@codeskyblue 大神写的wdaproxy,看了下好像是用 go 语言写的,哇,萌新瑟瑟发抖 ing

大概是这样的:

 tap: function(x, y) {
          var self = this;
          return $.ajax({
            url: "/session/" + self.sessionId + "/wda/tap/0",
            method: "POST",
            data: JSON.stringify({
              x: x,
              y: y
            }),
          }).then(function(ret) {
            if (ret.status !== 0) {
              console.log(ret.value);
            } else {
              return "Success";
            }
          })
        },

initScreenSize: function() {
          $.\
          ({
              url: "/status",
            })
            .then(function(ret) {
              this.sessionId = ret.sessionId;
              return $.ajax({
                url: "/session/" + ret.sessionId + "/window/size",
              })
            }.bind(this))
            .then(function(ret) {
              this.display.width = ret.value.width;
              this.display.height = ret.value.height;
            }.bind(this))
        },

这个其实是@weamylady 给我说的,so,有什么其他的想法也来讨论一下吧。

二、百度 MTC 项光特大佬提的,用 iOS 的私有 API XCEventGenerator 来实现不同类型的屏幕触控事件

关于这个要多谢@zhangzhao_lenovo 大神提供了两个地址:
swift:
https://github.com/zalando/SwiftMonkey/blob/master/SwiftMonkey/MonkeyXCTestPrivate.swift

oc 的 wda:
https://github.com/facebook/WebDriverAgent/blob/master/PrivateHeaders/XCTest/XCEventGenerator.h

或者通过iOS-Runtime-Headers来获取 iOS 的私有 API

还有个说法是:
通过 iproxy 工具把接口映射到宿主机
宿主机通过 curl 命令的方式实现对设备的控制

希望这篇文章对大家实现 iOS 远程真机有帮助,也希望得到其他大神朋友们的帮助,跪谢!
同时也很感谢 TesterHome 这个平台,让我学习了很多有用的东西,希望 TesterHome 越做越好!

照例,在最后 @ 几个大神防止帖子沉下去。。。。

@seveniruby @xdf @junhe (最近看着几位大神的文章比较多~~~~)

2017-8-14

上周我开了这个讨论话题,多谢@seveniruby思寒的加精让我觉得这个话题还是有实现的必要性的~
现在我讲一下我现在觉得可行性较高的一套实现思路,希望社区里面大神们也帮我参考参考,也希望能帮助更多人得到 iOS 远程真机实现的思路。

思路

首先,通过 ios-minicap,我们可以获取一个 Web 端的页面,这个页面通过不断的对真机进行截图实现实时显示真机页面的功能;

然后,我们可以通过 js 对获取到的 Web 页面进行事件控制(包括鼠标的拖拽,点击,长按等);

其次,我们可以使用 WDA 作为 PC 端与真机进行连接的工具,调用苹果的私有 API XCEventGenerator 来实现 PC 端对真机的触控事件;

再其次,通过 js 的事件控制来调用 WDA,实现 Web 端对 PC 端的操纵,最后达到 Web 端控制真机的触控;

最后,通过 ios-minicap 再实时回显真机上被 WDA 触控导致的操作,完成 iOS 远程真机的实现。

难点:

1.如何调用苹果的私有 API XCEventGenerator 来实现 PC 端对真机的触控事件

2.如何通过 js 实现鼠标的拖拽,点击,长按等事件,达到调用 WDA 的目的

2017-10-16

时隔两个月,现在基本有了 iOS 远程真机的解决方案——iOS-remote,感谢 weamylady2 的分享,安装使用详情可见https://testerhome.com/topics/10466


↙↙↙阅读原文可查看相关链接,并与作者交流