STF STF 集成 iOS 之 开源了

mrx102 · June 19, 2019 · Last by zhn3431223-github replied at July 14, 2019 · 5819 hits
本帖已被设为精华帖!

前言

之前写了两篇关于STF集成iOS的文章
STF 集成 iOS 之设备连接
STF 集成 iOS 之远程控制
虽然没什么响应,但是还是有同学希望能开源出来,秉着相互学习的心态,就把它开源出来吧。

项目地址

https://github.com/mrx1203/stf.git
https://github.com/mrx1203/WebDriverAgent.git
iOS的集成依赖于WebDriverAgent,我对WebDriverAgent做了一些小改动,以更好的支持iOS的远程操控。

部署方法

iOS是以增加一个ios-provider和ios-device的形式集成的,所以,STF原来的服务不受任何影响,之前怎么部署,现在还是怎么部署。

环境准备

安装libimobiledevice等依赖工具,不要安装最新版本,最新版本的iproxy有点问题。

brew install  usbmuxd
brew link usbmuxd
brew install libimobiledevice
brew install ideviceinstaller
brew install carthage
brew install socat

安装stf依赖:brew install graphicsmagick zeromq protobuf yasm pkg-config

clone代码WebDriverAgent,假设代码存放路径为/Users/test/Desktop/WebDriverAgent/,这个路径在启动ios-provider是通过--wda-path传入。配置好WebDriverAgent,具体方法自行搜索。XCode 用10.1及以下的版本

启动ios-provider

因为ios-provider需要使用xcodebuild等mac下的命令行工具,而docker容器中并没有提供这类工具,所以不能用docker来部署ios-provider,只能通过源码方式部署。部署步骤如下:
(1)拉取源代码git clone https://github.com/mrx1203/stf.git
(2)切换到stf目录下,安装依赖库npm install;npm install --save request;npm install --save request-promise
(3)启动ios-provider,假设主服务器的ip地址为172.28.28.36,该节点的ip地址为172.28.28.49

stf ios-provider --name "mac081" --connect-sub tcp://172.28.28.36:7250 \
--connect-push tcp://172.28.28.36:7270 --storage-url http://172.28.28.36 \
--public-ip 172.28.28.49 --heartbeat-interval 20000 \
--wda-path /Users/test/Desktop/WebDriverAgent/ --wda-port 8100

如果你没有部署过STF,那么直接 stf local --public-ip 172.28.28.49 --wda-path /Users/test/Desktop/WebDriverAgent/ --wda-port 8100

说明

前端做了改造,样式还没调,有点丑。如果不想用前端,只想接入iOS,那么只需要拷贝以下文件即可:

  • 拷贝lib/cli下的ios-device,ios-provider,local三个文件夹,local文件夹可以直接覆盖。
  • 拷贝lib/units下的ios-device,ios-provider文件夹;覆盖lib/units/storage/plugins/apk/task/manifest.js文件。
  • 拷贝lib/util下的ipareader.js和download.js文件;ipa文件解析和下载
  • 拷贝res/app/components/stf/install/install-service.js文件;ipa文件的安装
  • 拷贝res/app/components/stf/storage/storage-service.js文件;上传ipa文件
  • 拷贝lib/wire/wire.proto文件;加了消息
  • 拷贝package.json,添加了依赖模块

感谢

我们是站在巨人的肩膀上做的拼接,特别感谢以下开源项目作者。
https://github.com/openstf/stf
https://github.com/appium/WebDriverAgent
https://github.com/macacajs/app-inspector

集成过程中有问题的,欢迎加群交流,QQ群:768710274

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 57 条回复 时间 点赞
mrx102 STF 集成 iOS 之设备连接 中提及了此贴 19 Jun 18:02

我第一个顶,点赞

大赞!STF终于可以跨端了。😀

也可以尝试用下国产的 https://github.com/macacajs/XCTestWD

赞一个,一会试试

先赞一个

国内目前最好的开源iOS远程真机(一拖N),画面流畅度,远程控制操作性明显优于atxserver2,macaca等等,完美结合STF的架构,适合做二次开发。

琉丶言 回复

来个视频或gif看看效果

马克

大赞!

赞赞赞!感谢开源!

codeskyblue 回复

视频发到stf技术交流群了,群号:168170256

怒赞!

simple 将本帖设为了精华贴 20 Jun 13:58

鼓励开源项目!

作者帅的一P 👍

请问一下我在stf里面执行npm install 失败了,提示npm ERR! Unexpected end of JSON input while parsing near '.../typescript-estree/-/'是什么原因呢?有没有详细一点的教程

期待大神能讲解一下wda源码修改。

老哥,支持的iOS系统版本说一下呗。

yca · #20 · June 20, 2019
Author only
mrx102 #21 · June 21, 2019 作者
TD 回复

你再更新一下代码,有个配置jsx解析的文件忘记提交了

666666

23Floor has been deleted
琉丶言 STF 集成 iOS 之源码分析 中提及了此贴 25 Jun 18:58

执行stf启动命令时候报了如下错误,不知道其他人有没有碰到过~
imagesdoes not yet support your current environment: OS X 64-bit with Unsupported runtime (67)

mrx102 回复

更新后 还是报错了
npm ERR! Unexpected end of JSON input while parsing near '...f30ec2a8157a53333be7c'

27Floor has been deleted
Jacc 专栏文章:[Topic was deleted] 中提及了此贴 27 Jun 12:01
mrx102 #29 · June 27, 2019 作者
TD 回复

发详细日志

mrx102 #30 · June 27, 2019 作者

不用你做,已经做好了

wda你的包少东西吧, build不过去啊,可以的话是不是可以用原版的wda

假设主服务器的ip地址为172.28.28.36,该节点的ip地址为172.28.28.49
没有主从的话是不是stf local就好了,好像报错找不到这个文件,看了下好像修改前STF下的node_modules也没有image目录

mrx102 #33 · July 01, 2019 作者
Xu Wang 回复

xcode用10.1及以下的版本,10.2的版本删除了一些私有api文件

mrx102 #34 · July 01, 2019 作者
grizz 回复

npm install images,你有执行npm install么?正常的话应该会安装这个依赖模块的

厉害厉害👍 👍 👍

36Floor has been deleted


请问大神,我stf local之后,现象如下
1.登录后页面中的手机一直是处于"准备中"。
2.而看日志,就是无限循环"xcodebuild构建成功"和INF/ios-provider 18168 [*] Providing 0 of 2 device(s); waiting for "da47eca163f47e16c35366bd1e0f8e3d076fb5f8"。

3.手机已经装上WebDriverAgent
望大神有空指教一下。

mrx102 #38 · July 02, 2019 作者
TangoWong1983 回复

你的WDA没有起来,看下是不是证书没有信任


请问不插手机可以访问stf页面,插上手机就会一直报错,看日志好像是无法获取设备信息,大佬能不能看一下是怎么回事。

mrx102 #40 · July 02, 2019 作者
W52 回复

应该是你的libimobiledevice工具集有问题,你在命令行下单独执行报错的命令,然后自己搜索一下解决方法

发现iphone连接一段时间后会断掉,然后无限的start wda,设备一直是准备中状态,当你没耐心等了去干别的后,再回来,竟然又连上了,好奇怪呢?

大神,再帮忙看看下面是什么问题,那个WebDriverAgent我单独在xcode上执行test。运行/status是可以看到设备信息的。感觉就是一直无限的start wda


mrx102 #43 · July 02, 2019 作者
stronger 回复

在WDA不通的情况会自动重启。无限重启有可能是我后面加重启策略的时候引入的bug,你把ios-device/plugins/wdaProxy.js下的这段代码注释掉看看:wda.on('restart',function(){
if(!bRestart)
return
plugin.restartWda()
})

mrx102 #44 · July 02, 2019 作者
TangoWong1983 回复

你这个是什么设备?ios-device/support/TypeToModel.js,看看这个文件里面有没有包含你的这个设备,如果没有,你需要自己加入。unable to find device data 这个警告可以忽略,这个只是在stf-device-db数据库里找不到这个设备的信息,没有影响。另外,iOS系统用11以上的,11以下的版本截图只有1-2帧每秒,基本上不能用。


请问我插上设备之后stf页面会一直显示准备中,看日志出现了这样的错误,并且日志会不停打印providing 0 of 1 device(s),waiting for,大佬能不能看一下是什么问题

TD · #46 · July 03, 2019
Author only

楼主,我装上后,模拟器contorl可以看到页面,真机看不到页面,一片灰,但是点击是有效果的,知道肿么回事?

分享我安装过程中遇到的一些问题
1.zmq. Could not locate the bindings file ,node11换成node8好了,一般还会需要cnpm rebuild node-sass
2.brew install libjpeg-turbo 要装
3.ios10以上截图安装:
brew install --HEAD usbmuxd
brew install --HEAD libimobiledevice

蓝蓝 回复

你是用的xcode几?

SCH 回复

xcode 10.1

蓝蓝 回复

iphone 7plus ios10.3.3是灰的,会报socket hang up.还有command failed: idevicescreenshot -u
iphone8 12.1.2可以显示页面出来了

mrx102 #52 · July 04, 2019 作者
TD 回复

你的node版本太新了,用8.9.1的试下

mrx102 #53 · July 04, 2019 作者
蓝蓝 回复

ios10的系统应该是不支持的,我换过其他的截图方式,但是在ios10上帧率太低,就没加进去了。建议用ios11以上的系统

mrx102 回复

好的,谢谢楼主的开源👍

mrx102 回复

楼主,你说的ios11以下的每秒1-2帧,这是action么?ios 12,我怎么用着也是挺卡的

mrx102 回复

我的node 版本是12.5.0的,太低了?
test01deMac-mini:~ test01$ node -v
v12.5.0
test01deMac-mini:~ test01$

mrx102 #57 · July 04, 2019 作者
TD 回复

版本太高了,用旧的版本

mrx102 #58 · July 04, 2019 作者

有问题的,可以加群交流,QQ群:768710274

59Floor has been deleted
mrx102 #60 · July 09, 2019 作者


inspector报错没关系,不影响

61Floor has been deleted
mrx102 #62 · July 09, 2019 作者

那两个参数的端口号和stf服务的对应,默认是7114和7116

63Floor has been deleted
mrx102 #64 · July 09, 2019 作者

加群,在群里说,QQ群:768710274

感谢作者分享。

npm link 提示
chunk {6} entry/commons.entry.js (entry/commons.entry.js) 0 bytes [rendered]

ERROR in Invalid or unexpected token
@ ./res/app/control-panes/inspect/huya-inspector-tab-directive.js 3:10-43
[11:52:54] Finished 'webpack:build' after 21 s
2019-07-13T03:52:55.626Z INF/webpack:config 91301 [*] Build progress 100% (complete)
up to date in 51.404s

stf页面能够登录,但是打开没有内容,谁知道是什么原因吗



请教 我的这个一直准备中,wda 应该是启动好了 执行 stf local 一直是这个日志

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