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