Mac下用终端工具libimobiledevice管理iPhone

Homebrew是Mac下最常用的包管理工具,并且是开源的(官网https://brew.sh)。如果Mac上没有,先安装HomeBrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

1. 安装libimobiledevice

brew install --HEAD libimobiledevice -g

libimobiledevice中并不包含ipa的安装命令,所以还需要安装ideviceinstaller

brew install --HEAD ideviceinstaller -g

2. 测试过有效的其他命令

一些要用到的信息:

// 手机的UDID
bf76c991995e61c5c783f3441bff4a18605bc7ba
// 桌面测试ipa的文件路径
/Users/ypf/Desktop/SmartTest.ipa
// 桌面测试ipa的BundleID
com.CSS.app.SmartTest
2.1 列出当前所有设备,包括连接到mac的真机、模拟器、这台mac电脑本身
instruments -s devices
2.2 列出当前连接到mac的设备的UDID,包括通过usb和wifi连接的
idevice_id -l
2.3 安装mac上的ipa到手机
ideviceinstaller -u [udid] -i [xxx.ipa]

// 举例子
ideviceinstaller --udid bf76c991995e61c5c783f3441bff4a18605bc7ba --install /Users/ypf/Desktop/SmartTest.ipa
2.4 卸载手机应用
ideviceinstaller -u [udid] -U [bundleId]

// 举例子
ideviceinstaller --udid bf76c991995e61c5c783f3441bff4a18605bc7ba --uninstall com.chinasoft.app.SmartTest
2.5 屏幕截图

这个截图的路径暂时不知道怎么设置,默认会存放在/users/ypf

idevicescreenshot
2.6 获取实时系统日志
idevicesyslog
2.7 获取指定设备的信息
ideviceinfo -u [udid]

// 举例子
ideviceinfo --udid bf76c991995e61c5c783f3441bff4a18605bc7ba
2.8 获取指定设备的名称
ideviceinfo -u [udid] -k DeviceName
// 举例子1
ideviceinfo --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -k DeviceName

idevicename -u [udid]

举例子2
idevicename --udid bf76c991995e61c5c783f3441bff4a18605bc7ba
2.9 获取指定设备的系统版本
ideviceinfo -u [udid] -k ProductVersion

// 举例子
ideviceinfo --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -k ProductVersion
2.10 获取指定设备的型号
ideviceinfo -u [udid] -k ProductType

// 举例子
ideviceinfo --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -k ProductType
2.11 获取指定设备的系统名称
ideviceinfo -u [udid] -k ProductName

// 举例子
ideviceinfo --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -k ProductName
2.12 获取设备时间
idevicedate
2.13 获取设备名称
idevicename
2.14 查看和操作设备的描述文件
ideviceprovision list
2.15 查看指定设备安装的所有应用,包括系统和第三方
ideviceinstaller -u [udid] -l -o list_all

// 举例子
ideviceinstaller --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -l -o list_all
2.16 查看指定设备安装的第三方应用
ideviceinstaller -u [udid] -l 

// 举例子1
ideviceinstaller --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -l

ideviceinstaller -u [udid] -l -o list_user

// 举例子2
ideviceinstaller --udid bf76c991995e61c5c783f3441bff4a18605bc7ba -l -o list_user
2.17 查看指定设备安装的系统应用
ideviceinstaller -u [udid] -l -o list_system

// 举例子
ideviceinstaller --udid 64af3bfaf93e6a0e97d75aeac8fbb8610732c150 -l -o list_system
2.18 设置代理 / 端口转发

(举个端口转发的例子)
先将iPhone用数据线连接到Mac,在终端执行如下命令:

// 第1个是Mac端口,第2个是iPhone端口
iproxy 7999 8100

此时会将iPhone上的8100端口的数据转发到Mac的7999端口,这个在做自动化测试时会用到(因为iOS自动化测试现有的主流框架大都是基于WebDriver协议的实现的,Facebook自家封装了一个开源框架WebDriverAgent,这里其实是有一个不小的坑,需要好好说道说道,详见我的另一篇文章xxx)

3. 待测试的命令

3.1 挂载DeveloperDiskImage

用于调试……

ideviceimagemounter
3.2 调试程序(需要预先挂载DeveloperImage)
idevicedebug

4. 用xcodebuild从源码构建应用安装包

$ cd /source-folder/
$ PROJECT=<your-project-name>
$ xcodebuild clean -project $PROJECT.xcodeproj -configuration Debug -alltargets
$ xcodebuild archive -project $PROJECT.xcodeproj -scheme $PROJECT -archivePath $PROJECT.xcarchive

# 注意,末尾的 exportProvisioningProfile 参数值是在 Xcode 的 Performance->Accounts->Apple ID->View Details 窗口的下半部分看到的名称。如 iOS Team Provisioning Profile: chj.ToDoList
$ xcodebuild -exportArchive -archivePath $PROJECT.xcarchive -exportPath $PROJECT -exportFormat ipa -exportProvisioningProfile "your provision profile"

# build 完的 ipa 包直接就放在当前目录

5. 解决ideviceinstaller报错:Could not connect to lockdownd. Exiting.

brew uninstall ideviceinstaller -g
brew uninstall libimobiledevice -g
brew install --HEAD libimobiledevice -g
brew install --HEAD ideviceinstaller -g
sudo chmod -R 777 /var/db/lockdown

待测试的解决方法:

brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
sudo chmod -R 777 /var/db/lockdown

PS:暂时没测试的https://www.jianshu.com/p/6423610d3293

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 文章图片上传不正常,如需文档,可联系微信:1017429387 目录 1 安装... 4 1.1 配置探针... ...
    Mrhappy_a7eb阅读 6,284评论 0 5
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,813评论 0 5
  • 有些人能决定自己成为什么样的人,有些人则不能。这不是不公平,而是现实。 我以前总以为能在人生的某一个阶段将人生的奥...
    Andylee阅读 530评论 2 3
  • 猎鹰火箭的光 无论是在大漠戈壁、汪洋大海或是在喧闹都市,无论是在夜幕降临、华灯初上的傍晚,还是在夜...
    不落的太阳pure阅读 215评论 1 1