初衷:部署过程中,踩过的一些坑及快速操作,便于后续部署同学可以快速搭建。
ios真机接入sonic节点
一、现状
目前ios真机官方进度反馈,仍是远程操作比较卡顿,待后期继续优化解决;
部署到个人mac节点上,可以发现,还是比较难满足日常使用的(主要是太卡了),待持续优化中。
如果对sonic云真机不是很熟悉,建议可以先去看下:
官网:sonic官网
前两篇文章:
sonic云真机linux分布式部署
sonic云真机linux单机版部署
二、接入环境
mac机器部署ios的agent接入
===================== 配置环境检查结果 =====================
JAVA_HOME(系统PATH环境变量): /Library/Java/JavaVirtualMachines/jdk-18.jdk/Contents/Home
java version(运行当前jar的java版本): 18
ANDROID_HOME(系统PATH环境变量): /usr/local/Caskroom/android-platform-tools/30.0.0
ADB path: /usr/local/bin/adb
ADB version: Android Debug Bridge version 1.0.41
Version 30.0.0-6374843
Installed as /usr/local/bin/adb
chromeDriver path: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
chromeDriver version: 姝e湪鐜版湁鐨勬祻瑙堝櫒浼氳瘽涓墦寮�銆�
Node path: /usr/local/bin/node
Node version: v16.8.0
npm path: /usr/local/bin/npm
npm version: 7.21.0
adbkit path: /usr/local/bin/adbkit
adbkit version: 2.11.1
Appium path: /usr/local/bin/appium
Appium version: 1.22.3
System: mac os x
三、具体步骤
官方接入步骤:ios真机接入
建议先通篇阅读官方接入,这里作为实战参考补充
1、获取agent的key,设置环境变量JAVA_HOME、ANDROID_HOME、ANDROID_HOME等,可参考前篇文章部署: sonic云真机linux单机版部署
1.1、mac更新java为18的过程:进入jdk官网,下载jdk18 Java Downloads

将上图中的文件,直接拖到mac的应用程序栏,mac系统会弹窗提示要不要替换掉之前的java版本(如果有),点击确定即可替换,然后命令行验证一下版本即可
liandm1-Mac003:logs iotsofttest$ java -version
java version "18" 2022-03-22
Java(TM) SE Runtime Environment (build 18+36-2087)
Java HotSpot(TM) 64-Bit Server VM (build 18+36-2087, mixed mode, sharing)
2、下载agent代理文件并解压:agent文件部署下载

unzip sonic-agent-v1.3.2-release-macosx_x86_64.zip -d .
liandm1-Mac003:sonic-agent iotsofttest$ ls
sonic-agent-v1.3.2-release-macosx_x86_64 sonic-agent-v1.3.2-release-macosx_x86_64.zip
liandm1-Mac003:sonic-agent iotsofttest$ pwd
/Users/iotsofttest/lixf6/sonic-agent
3、授权整个目录
sudo chmod -R 777 sonic-agent-v1.3.2-release-macosx_x86_64
4、mac电脑拉取wda代码并成功编译
4.1、拉取以下分支并用xcode打开,执行编译,可对照官网图执行
git clone https://github.com/SonicCloudOrg/sonic-ios-wda.git
4.2、编译过程,可能会因为没有开发者证书报错:Signing for "IntegrationApp" requires a developement team. Select a developement team in the project editor
可参考解决 XZ_iOS之运行项目到真机出现错误的解决
4.3、图中红色的对应下文5中application-prod.yml的wda-bundle-id,黄色的则是出现4.2中报错,全部改一遍的位置

4.4、以上执行完,如果手机还没wda装上,则,执行以下步骤安装wda
进入存在WebDriverAgentRunner的目录(已经执行过编译成功再往下,否则先确保上面的代码编译成功):
liandm1-Mac003:sonic-ios-wda iotsofttest$ ls
CONTRIBUTING.md Gemfile PrivateHeaders WebDriverAgent.xcodeproj WebDriverAgentTests docs lib
Configurations LICENSE README.md WebDriverAgentLib azure-templates gulpfile.js package.json
Fastlane PATENTS Scripts WebDriverAgentRunner ci-jobs index.js test
liandm1-Mac003:sonic-ios-wda iotsofttest$ pwd
/Users/iotsofttest/lixf6/sonic-ios-wda
确保当前路径在sonic-ios-wda下:
$ xcodebuild build-for-testing -scheme WebDriverAgentRunner -sdk iphoneos -configuration Release -derivedDataPath /tmp/derivedDataPath
$ cd /tmp/derivedDataPath
$ cd Build/Products/Release-iphoneos # path might be different
$ mkdir Payload && mv *.app Payload
$ zip -r WDA.ipa Payload
以上操作完,则会出现 WDA.ipa,见下
liandm1-Mac003:sonic-ios-wda iotsofttest$ cd /tmp/derivedDataPath/Build/Products/Release-iphoneos
liandm1-Mac003:Release-iphoneos iotsofttest$ ls
IntegrationApp.app.dSYM Payload WDA.ipa WebDriverAgentLib.framework WebDriverAgentLib.framework.dSYM
如果sib命令存在,则可执行
$ sib app install WDA.ipa
如果sib提示不存在,则使用tidevice替代
tidevice install WDA.ipa
tidevice用法参考 APP自动化(一):tidevice使用
以上执行完后,苹果手机便会多出一个wda程序

5、修改config文件夹中 application-prod.yml并保存
sonic:
agent:
# 替换为部署Agent机器的ipv4
host: 10.74.33.53
# 替换为Agent服务的端口,可以自行更改
port: 7777
# 替换为前端新增Agent生成的key
key: 89c80c2c-c317-48c1-b21f-#########
server:
# 这个host改成后端的host
host: 10.16.###.###
# 这个port改成后端文件中心的port(一般不变)
folder-port: 8094
# 这个port改成后端传输中心的port(一般不变)
transport-port: 8095
modules:
# 安卓模块配置
android:
enable: true
# 是否开启远程adb调试功能
use-adbkit: true
# iOS模块配置
ios:
# 如果不需要连接iOS设备,请将true改为false。开启的windows用户请确保本机已安装iTunes
enable: true
# 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
wda-bundle-id: com.facebook.WebDriverAgentRunner.lixf6
appium:
enable: true
# 默认为0会自动寻找随机端口启动,如果需要指定appium server端口,请在这里设置
port: 0
# 在线webView调试模块配置
webview:
enable: true
# 谷歌调试端口,一般不需要修改(默认0使用随机端口,如果需要开启防火墙给外部使用,请设置固定端口如7778)
chrome-driver-debug-port: 0
# Agent机器上的chrome浏览器的driver路径,可以去http://npm.taobao.org/mirrors/chromedriver/下载
chrome-driver-path: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
# Agent日志管理,一般不需要更改,可根据自己需要配置
logging:
file:
#日志路径
name: logs/sonic-agent.log
logback:
rollingpolicy:
clean-history-on-start: true
#保留天数
max-history: 3
pattern:
console: "%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
6、运行jar包,查看日志,如果mac电脑运行agent时提示:
进入sonic-agent-v1.3.2-release-macosx_x86_64目录并执行java命令:
liandm1-Mac003:sonic-agent-v1.3.2-release-macosx_x86_64 iotsofttest$ ls
config mini sonic-agent-macosx-x86_64.jar webview
logs plugins test-output
liandm1-Mac003:sonic-agent-v1.3.2-release-macosx_x86_64 iotsofttest$ pwd
/Users/iotsofttest/lixf6/sonic-agent/sonic-agent-v1.3.2-release-macosx_x86_64
liandm1-Mac003:sonic-agent-v1.3.2-release-macosx_x86_64 iotsofttest$ java -jar sonic-agent-macosx-x86_64.jar &
如果出现以下报错:

则mac电脑点击系统偏好设置--安全性与隐私--通用,下面会弹出一个类似验证的页面,点击允许即可
7、最终接入后,前端效果


四、接入第二台iOS真机
其实以上一到三步骤,已经可以满足日常使用,但是为了便于后续接入第二台ios真机,这里再独立一个部分,专门来讲
1、把上面中用xcode打开的项目,按如图顺序执行,然后可以发现,手机端就生成了WDA(其他的不要改,因为agent节点里面指定的标识需要统一,即wda-bundle-id: com.facebook.WebDriverAgentRunner.lixf6)

这里点击Test后,可以看到ios手机就会生成WDA

2、查看手机,可以发现ios真机投屏成功时,wda已经在手机同步运行通信中:
参考
1、《Sonic安装部署之——iOS设备接入》:Sonic安装部署之——iOS设备接入
2、《mac安装或升级java》:Java Downloads