atxserver2接入iOS设备
atxserver2是一款可以远程控制Android
和iOS
设备的设备管理平台。该平台使用的技术栈为: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设备相关推荐
- Sonic安装部署之——iOS设备接入
(1)环境准准备 Mac系统.xcode:用于打包安装WebDriveragent(wda) iOS手机:本次使用的Iphone XR ,系统版本V15.0 (2)WebDriveragent(wd ...
- Sonic常见问题解决方法之——设备中心出现多个iOS设备接入异常
[问题1]设备中心出现多个iOS设备接入异常 [出现原因]tidevice没有配置好,启动agent前确认tidevice list命令无报错,就不会出现这些异常的设备,如果不需要接入ios,可以参考 ...
- Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...
- 如何判断ios设备中是否安装了某款应用
如果是Xcode 4.6 ,那么按照下面的方法添加: 解决方案: 从91SDK3.2.5开始要求接入方需要设置一个URL Scheme,设置方法如下:选中工程中的Target,选中Info标签页,找到 ...
- 如何让一套代码适配所有iOS设备尺寸?
简介:随着移动互联网设备和技术的发展,各种移动设备屏幕尺寸层出不穷,折叠屏.分屏.悬浮窗等等,面对越来越多样的屏幕,如果为每种尺寸单独进行适配,不仅费时费力,还会增加端侧代码的开发与维护压力.如何让一 ...
- ios 设备获取idfa_iOS获取设备ID总结
iOS获取设备ID总结 UDID 简介:UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成.在很多需要限制一台 ...
- 转-ios设备唯一标识获取策略
[http://www.2cto.com/kf/201308/237648.html] 英文原文:In iOS 7 and later, if you ask for the MAC address ...
- iOS设备指纹的前世今生
从暗扣话费.广告流量变现.手机应用分发,到木马刷量.勒索病毒.控制肉鸡挖矿,网络黑产无处不在,而"薅羊毛"正是黑灰产的重要盈利模式之一. "薅上一天,够吃一年." ...
- iOS设备唯一标识获取策略(不定时更新)
在iOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果IOS设备 ...
- iOS设备唯一标识符探讨
iOS设备唯一标识符探讨 一.现有方案 1.UDID(Unique Device Identifier) 获取方法:[[UIDevice currentDevice] uniqueIdentfier] ...
最新文章
- 学习web前端你必须要了解的主流框架!
- 基于 Python 的 8 种常用抽样方法
- python第三方库numpy-谁能介绍下Python生态中的第三方库NumPy
- 几种xml读取方法比较
- App用户体验的一点思考
- jMeter 里如何使用 variable
- Bash的循环结构(for和while)
- SpringBoot 集成 mybatisPlus
- ICCV 2019 | 旷视提出新型抠图方法AdaMatting,刷新最高精度
- es6 Promise.resolve()方法
- sendevent/getevent模拟Power键
- flash人物原地走路_Flash怎么制作一个行走的小人动画?
- 计算机桌面有浮层,win7电脑桌面便签小工具怎么显示悬浮文字?
- 如何获取区块链开发视频教程资料
- winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
- 【C/C++】__stdcall、__cdcel和__fastcall定义与区别
- Alibaba之EasyExcel使用
- PHP工程师历年企业笔试真题汇总
- 双高教育建设与混合制校企合作
- 三极管、MOSE管的作用总结
热门文章
- html 图层嵌套特点,ps图层有哪几种类型?
- 宏碁台式计算机u盘启动,宏基台式机U盘重装怎么设置U盘启动项
- TextView设置字体透明度或背景透明度
- MSP430 F5529 单片机 串口 万年历 电子时钟 数字时钟 Digital clock
- PHP海补知识(6)-- nl2br/ucfirst/ucwords
- .NET 语音转文字 文字转语音
- mac sz rz file tras
- C# wpf确认取消MessageBox选择按钮
- Pycharm远程连接服务器
- win10红警2黑屏_win10怎么玩红警2尤里的复仇及其mod的方法汇总,mod打不开、卡顿的通用解决方案...