atxserver2是一款可以远程控制AndroidiOS设备的设备管理平台。该平台使用的技术栈为:Python3+NodeJS+RethinkDB

1.前期准备工作

  • Python >= 3.6(如果想使用tidevice,python>=3.7)
  • WebDriverAgent(用 appium fork 的wda,因为appium 1.9.0在WDA中新增了一个 mjpegServer,这个是用来做屏幕同步)(下载链接:https://github.com/appium/WebDriverAgent)
  • NodeJS 8

1)安装python(Welcome to Python.org)

在console中输入:python3

查看是否安装成功

2)安装WebDriverAgent(简称wda)(可以参考ATX 文档 - iOS 真机如何安装 WebDriverAgent · TesterHome

a.下载wda

git clone https://github.com/appium/WebDriverAgenta.也可以直接下载稳定release版本
b.cd直接进入该wda文件目录(下面的b,c操作都是基于这个目录下进行安装)

b.安装Carthage

​1.执行brew install carthage 或者直接下载Carthage.pkg(https://github.com/Carthage/Carthage/releases),此时在WebDriverAgent文件下会创建一个Cartfile文件夹 2.执行carthage update --use-xcframeworks,在wda文件下会创建一个Carthage文件夹和Cartfile.resolved文件  (这个步骤按需完成) 

c.执行./Scripts/bootstrap.sh

d.打开wda文件目录下的WebDriverAgent.xcodeproj

1.安装到真机上都是需要证书签名的,这里xcode也需要一个注册过的Apple ID即Team即3(如何导入证书以及添加Apple ID可以百度)
2.bundle identifier即4具有唯一性,不可以重复,但是前面的io.*.webdriver像证书一样是一定的,这个是不可以随便写的,可以在后面添加如io.*.webdriver-test1或者-test2任意的字符,把下面这几个文件的bundle identifier和team都统一为一个(图1,2,3)

e.运行与测试

1.菜单栏选择目标设备Destination选择连接的真机:Product->Destination->连接机型
2.Scheme 选择 WebDriverAgentRunner: Product->Scheme->WebDriverAgentRunner
3.最后运行 Product -> Test
4.查看控制台View->Debug Area->Activate Console 如果出现下图证明成功啦

图4

手机上也会出现一下的图标

5.端口转发

有些国产的 iPhone 机器通过手机的 IP 和端口还不能访问,此时需要将手机的端口转发到 Mac 上。

1.brew install libimobiledevice --HEAD
2.iproxy 8100 8100
3.http://localhost:8100/status 出现下图可以确认 WDA 运行成功

图1

图2

图3

3)安装nodeJS 8(版本最好不要高于8)

a.安装brew,直接安装国内镜像源(Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。可以实现包管理,而不用关心各种依赖和文件路径)

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

b.安装nvm(一个node的版本管理工具)

cd ~
vim .bash_profile在文件里添加如下配置:
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh重新source使配置文件生效
source .bash_profile vim ~/.zshrc
在文件里最后一行添加如下配置:
source ~/.bash_profile

c.使用nvm安装node

nvm ls-remote 查看 所有的node可用版本nvm install xxx 下载你想要的版本nvm use xxx 使用指定版本的nodenvm alias default xxx 每次启动终端都使用该版本的node

2.ATXServer2接入iOS移动设备

目前本机部署环境:

Mac:10.15

xcode:12.4

node:8.9.1

1)安装数据库rethinkdb

a.部署方式1:docker(参考https://github.com/openatx/atxserver2

1.Mac安装docker

brew cask install docker

2.切换到代码目录

docker-compose up

b.部署方式2: 通过源码方式部署(我使用的是这种)

1.先准备好一个rethinkdb服务器

brew update && brew install rethinkdb

2.启动rethinkdb服务器

rethinkdb或rethinkdb --port-offset 1 --directory rethinkdb_data2 --join localhost:29015

访问http://localhost:8080/出现下图证明rethinkdb服务器启动好了

2)部署atxserver2平台(https://github.com/openatx/atxserver2

a.将代码clone到本地

git clone https://github.com/Jodie/atxserver2.git

b.打开命令终端进入该项目

1).pip3 install -r requirements.txt
2).python3 main.py --port 4000

c.访问http://localhost:4000,若出现下图证明成功

3)atxserver2接入iOS设备(https://github.com/openatx/atxserver2-ios-provider

前期准备:

1.连接iOS设备

a.确保设备已经解锁
b.使用数据线将苹果手机连接到电脑上(Mac)
c.当出现是否信任该设备时选择是

2.设备开启自动化

1.按下HOME -> 设置(Settings) -> 开发者(Developer) -> Enable UI Automation
2.回到 设置(Settings) -> Safari浏览器 -> 翻到最后 高级(Advanced) -> 打开 Web检查器(Web inspector)
3.设置(Settings) -> 通用 -> 设备管理 -> 点击开发者应用中的栏目

3.持续运行的设备设置

默认情况下设备会锁屏的,而当设备锁屏的时候,就自动化不了了。最简单的一个办法就是保持设备常亮

1.Home -> 设置(Settings) -> 显示与亮度(Settings & Brightness)
2.亮度调到低(可以是最低)
3.自动锁定(Auto-Lock) 设置为 永不(Never)

a.安装libimobiledevice工具包

brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxdbrew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxdbrew install --HEAD libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller

b. 将代码clone到本地

git clone https://github.com/jodie/atxserver2-ios-provider

c. 打开命令终端进入该项目

pip3 install -r requirements.txt

d. 避免命令行运行出错,运行一次即可

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

e. 解锁keychain,防止签名权限不足问题

security unlock-keychain ~/Library/Keychains/login.keychain

f. 启动

1.SERVER_URL="http://localhost:4000"       # 这里修改成atxserver2的地址
2.WDA_DIRECTORY="/Users/sjh/Documents/cxm_ios/WebDriverAgent-3.12.0"    # WDA项目地址
3.python3 main.py -s $SERVER_URL -W $WDA_DIRECTORY

如果出现下图证明接入成功

3.过程中常见问题以及解决方案

1.wda阶段问题

问题 1:

解决方法:
遇到这个问题,说明手机上已经有一个 WebDriverAgent 的应用了,只是 BundleID 不一致,需要先将手机上的卸载掉,重新运行 Product -> Test

问题 2:

解决方法:
提示其实已经说了,进入 设置 通用 设备管理 开发者应用 然后点击信任,之后再重新运行一遍 Product -> Test

问题3: 原因是在使用Xcode高版本时,步骤七会编译失败(git地址https://github.com/appium/WebDriverAgent/pull/286/files)

解决方案:

  • WebDriverAgent/PrivateHeaders/XCTest/XCTestCase.h,加入以下代码到下图中红框位置

@property(nonatomic) BOOL shouldSetShouldHaltWhenReceivesControl; // @synthesize shouldSetShouldHaltWhenReceivesControl=_shouldSetShouldHaltWhenReceivesControl;

  • WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m,修改红框中代码26~36行为下方内容,替换后的代码如下图
//  self.internalImplementation = (_XCTestCaseImplementation *)[FBXCTestCaseImplementationFailureHoldingProxy proxyWithXCTestCaseImplementation:self.internalImplementation];if ([self respondsToSelector:@selector(internalImplementation)]) {// The `internalImplementation` API has been removed since Xcode 11.4self.internalImplementation =(_XCTestCaseImplementation *)[FBXCTestCaseImplementationFailureHoldingProxyproxyWithXCTestCaseImplementation:self.internalImplementation];} else {// https://github.com/appium/appium/issues/13949self.shouldSetShouldHaltWhenReceivesControl = NO;self.shouldHaltWhenReceivesControl = NO;}

问题4:执行./Scripts/bootstrap.sh遇到这个问题

解决方案:

执行touch /tmp/helper.xcconfig

执行vim /tmp/helper.xcconfig

中输入export XCODE_XCCONFIG_FILE=/tmp/helper.xcconfig

执行carthage build --platform iOS --no-use-binaries --cache-builds

问题5:xcframework和framework的切换问题

解决方案:

将Carthage/bulid文件下的RoutingHTTPServer.xcframework导入到xcode,将1设置为not embed,导入的设置为embed&sign,并且选择"工程配置-> Build Settings -> Build Options -> Validate Workspace",将该配置设置为Yes。如图1,不然会出现图2类似的错误

图1

图2

问题6:进行pip3 install -r requirements.txt报错

解决方案:

pip install six -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

问题7:

解决方案:

node升级到8,并且执行python3 main.py -s $SERVER_URL -W $WDA_DIRECTORY时console会出现没有导入httpx模块需要手动导入

pip3 install httpx

atxserver2接入iOS设备相关推荐

  1. Sonic安装部署之——iOS设备接入

     (1)环境准准备 Mac系统.xcode:用于打包安装WebDriveragent(wda) iOS手机:本次使用的Iphone XR ,系统版本V15.0 (2)WebDriveragent(wd ...

  2. Sonic常见问题解决方法之——设备中心出现多个iOS设备接入异常

    [问题1]设备中心出现多个iOS设备接入异常 [出现原因]tidevice没有配置好,启动agent前确认tidevice list命令无报错,就不会出现这些异常的设备,如果不需要接入ios,可以参考 ...

  3. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

  4. 如何判断ios设备中是否安装了某款应用

    如果是Xcode 4.6 ,那么按照下面的方法添加: 解决方案: 从91SDK3.2.5开始要求接入方需要设置一个URL Scheme,设置方法如下:选中工程中的Target,选中Info标签页,找到 ...

  5. 如何让一套代码适配所有iOS设备尺寸?

    简介:随着移动互联网设备和技术的发展,各种移动设备屏幕尺寸层出不穷,折叠屏.分屏.悬浮窗等等,面对越来越多样的屏幕,如果为每种尺寸单独进行适配,不仅费时费力,还会增加端侧代码的开发与维护压力.如何让一 ...

  6. ios 设备获取idfa_iOS获取设备ID总结

    iOS获取设备ID总结 UDID 简介:UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成.在很多需要限制一台 ...

  7. 转-ios设备唯一标识获取策略

    [http://www.2cto.com/kf/201308/237648.html] 英文原文:In iOS 7 and later, if you ask for the MAC address ...

  8. iOS设备指纹的前世今生

    从暗扣话费.广告流量变现.手机应用分发,到木马刷量.勒索病毒.控制肉鸡挖矿,网络黑产无处不在,而"薅羊毛"正是黑灰产的重要盈利模式之一. "薅上一天,够吃一年." ...

  9. iOS设备唯一标识获取策略(不定时更新)

    在iOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果IOS设备 ...

  10. iOS设备唯一标识符探讨

    iOS设备唯一标识符探讨 一.现有方案 1.UDID(Unique Device Identifier) 获取方法:[[UIDevice currentDevice] uniqueIdentfier] ...

最新文章

  1. 学习web前端你必须要了解的主流框架!
  2. 基于 Python 的 8 种常用抽样方法
  3. python第三方库numpy-谁能介绍下Python生态中的第三方库NumPy
  4. 几种xml读取方法比较
  5. App用户体验的一点思考
  6. jMeter 里如何使用 variable
  7. Bash的循环结构(for和while)
  8. SpringBoot 集成 mybatisPlus
  9. ICCV 2019 | 旷视提出新型抠图方法AdaMatting,刷新最高精度
  10. es6 Promise.resolve()方法
  11. sendevent/getevent模拟Power键
  12. flash人物原地走路_Flash怎么制作一个行走的小人动画?
  13. 计算机桌面有浮层,win7电脑桌面便签小工具怎么显示悬浮文字?
  14. 如何获取区块链开发视频教程资料
  15. winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
  16. 【C/C++】__stdcall、__cdcel和__fastcall定义与区别
  17. Alibaba之EasyExcel使用
  18. PHP工程师历年企业笔试真题汇总
  19. 双高教育建设与混合制校企合作
  20. 三极管、MOSE管的作用总结

热门文章

  1. html 图层嵌套特点,ps图层有哪几种类型?
  2. 宏碁台式计算机u盘启动,宏基台式机U盘重装怎么设置U盘启动项
  3. TextView设置字体透明度或背景透明度
  4. MSP430 F5529 单片机 串口 万年历 电子时钟 数字时钟 Digital clock
  5. PHP海补知识(6)-- nl2br/ucfirst/ucwords
  6. .NET 语音转文字 文字转语音
  7. mac sz rz file tras
  8. C# wpf确认取消MessageBox选择按钮
  9. Pycharm远程连接服务器
  10. win10红警2黑屏_win10怎么玩红警2尤里的复仇及其mod的方法汇总,mod打不开、卡顿的通用解决方案...