ATX iOS 远程真机方案整理

codeskyblue · March 08, 2019 · Last by Tan replied at March 15, 2020 · 8512 hits
本帖已被设为精华帖!

iOS 远程真机

虽然看到了有很多家公司实现了 iOS 的远程真机,但是开源的方案还真没见到。所以写了这篇帖子,汇总下我已有的资料。希望能促进这种项目尽快出现。

方案资料汇总

进来发现 WDA 也能在 Windows 和 Linux 上跑了 (商业收费),资料 http://docs.quamotion.mobi/quamotion4appium/xcuitrunner/

提供 iOS 云真机的平台(排名不分先后)

如果还有遗漏的,麻烦留言回复我补充。

目前的方案

方案 1 ios-minicap + WDA

因为 ios-minicap 会重置 USB 连接,导致一台 Mac 电脑只有接一台手机,有点浪费。忽略该方案。

方案 2 WebDriverAgent 实现投屏 + 控制

以前笔者写过的一个wdaproxy项目用的就是这种方案。最近被集成到了 atxserver2 这个项目中
因为微信的原因,gif 复制不出来,先贴张图吧(实际帧率只有 5 FPS)。

BTW

刚不小心看了一下 wetest 的云真机,价格 10 块钱可以用 15 分钟,好贵的感觉。一个二手 iPhone 也就 1000 块钱,1500 分钟也就是 25 小时就能收回成本了。

参与其中

最近 ATX 也推出了 ATXServer2(设备管理平台)开源项目,实现安卓和苹果手机的远程控制。不过因为作者水平有限,OC 玩不转,导致 iOS 流畅度很低,如果你有这方便的技能且有兴趣,欢迎留言告知我。

历史讨论帖

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞

又见大神,收藏先

经过了我一通乱改,fps 已经从 5 升到 10 了

翔哥厉害,先收藏学习下

codeskyblue 回复

老哥分享一下

yca 回复
- (NSData *)fb_screenshotWithError:(NSError*__autoreleasing*)error
{
  Class xcScreenClass = objc_lookUpClass("XCUIScreen");
  if (nil == xcScreenClass) {
    NSData *result = [[XCAXClient_iOS sharedClient] screenshotData];
  // 中间省略 ...

  // The resulting data is a JPEG image, so we need to convert it to PNG representation
  UIImage *image = [UIImage imageWithData:result];
  return (NSData *)UIImagePNGRepresentation(image);
}

只修改最后一行,原来是 PNG 压缩的改成 JPEG,压缩精度设置为 0.1

- (NSData *)fb_screenshotWithError:(NSError*__autoreleasing*)error
{
  Class xcScreenClass = objc_lookUpClass("XCUIScreen");
  if (nil == xcScreenClass) {
    NSData *result = [[XCAXClient_iOS sharedClient] screenshotData];
  // 中间省略 ...

  // The resulting data is a JPEG image, so we need to convert it to PNG representation
  UIImage *image = [UIImage imageWithData:result];
  return (NSData *)UIImageJPEGRepresentation(image, 0.1);
}
思寒_seveniruby 将本帖设为了精华贴 10 Mar 21:59

输入怎么解决的?用 element 对象处理吗?

adfghzhang 回复

输入有 send keys 接口

codeskyblue 回复

这里的 sendkey 是不需要借助元素定位的吗?另外可以试试 appium 提供的 wda,内置的 mjpeg 视频流方式实现投屏。

adfghzhang 回复

send_keys 不需要元素定位,那个 mjpeg 方案你说的再详细点

codeskyblue 回复

可以看一下我之前发的一个帖子https://testerhome.com/topics/16235

adfghzhang 回复

刚试了是,这个功能是很不错。看来 Appium 把 WDA 改了很多。FBConfigration.m 有一些默认值

因为我是用的模拟器,启动完之后,http://localhost:9100 就是那个 MJPEG 的 Server 地址。

另外记录下 mjpeg 读取的一些库

帧率如果不修改的话默认就是 10,暂时还没发现有什么播放器可以看 mjpeg 的流

Python+OpenCV 手写了一个播放器。速度大约延时 80ms 的样子

codeskyblue 回复

mjpeg 流在浏览器直接使用 img 标签就能使用

codeskyblue 回复

佩服这个行动能力……

字白 回复

可以给我一些代金券吗?我想体验下贵司的真机服务。

字白 回复

阿里平台真的是多呀。我的阿里云账号 codeskyblue at gmail.com

Author only

codeskyblue 回复

OK

Author only
jianmei1987 回复

没有

想买这个技能,有联系方式吗

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up