ATX iOS 远程真机方案整理

codeskyblue · March 08, 2019 · Last by 字白 replied at April 25, 2019 · 3308 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流畅度很低,如果你有这方便的技能且有兴趣,欢迎留言告知我。

历史讨论帖

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

又见大神,收藏先

adfghzhang 回复

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

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

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

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

codeskyblue 回复

佩服这个行动能力……

codeskyblue 回复

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

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

codeskyblue 回复

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

adfghzhang 回复

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

codeskyblue 回复

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

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

思寒_seveniruby 将本帖设为了精华贴 10 Mar 21:59
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);
}
codeskyblue 回复

老哥分享一下

翔哥厉害,先收藏学习下

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

adfghzhang 回复

输入有 send keys接口

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