ATX iOS 远程真机方案整理

codeskyblue · 2019年03月08日 · 最后由 Tan 回复于 2020年03月15日 · 8204 次阅读
本帖已被设为精华帖!

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 将本帖设为了精华贴 03月10日 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

仅楼主可见
jianmei1987 回复

没有

simple [精彩盘点] TesterHome 社区 2019 年 度精华帖 中提及了此贴 12月24日 22:32

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册