Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用libimobiledevice + ifuse提取iOS沙盒文件

使用libimobiledevice + ifuse提取iOS沙盒文件

作者头像
周希
发布于 2019-10-15 06:35:29
发布于 2019-10-15 06:35:29
3.4K00
代码可运行
举报
文章被收录于专栏:APP自动化测试APP自动化测试
运行总次数:0
代码可运行

简介

libimobiledevice:一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。

Git仓库: https://github.com/libimobiledevice/libimobiledevice.git

ifuse: 也是一个开源包,可以用来访问iDevice的工具

Git仓库: https://github.com/libimobiledevice/ifuse.git

我们可以利用libimobiledevice与ifuse进行shell封装,辅助实现自动化的测试过程。

这里我们用来提取iOS设备上APP沙盒中的日志文件

快速直接安装libmobiledevice的方法

MacOS上安装libimobiledevice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo brew update
sudo brew install libimobiledevice
#libimobiledevice中并不包含ipa的安装命令,所以还需要安装
sudo brew install ideviceinstaller

Ubuntu下安装libimobiledevice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo add-apt-repository ppa:pmcenery/ppa
sudo apt-get update
apt-get install libimobiledevice-utils
sudo apt-get install ideviceinstaller

常用功能

1. 获取设备已安装app的bundleID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceinstaller -l

演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -l
Total: 13 apps
com.zhouxi.xiaoailiteios - 小米同学 20
com.apple.test.WebDriverAgentRunner-Runner - WebDriverAgentRunner-Runner 1
com.apple.store.Jolly - Apple Store 5.0.0.0302
com.apple.clips - 可立拍 4141.1.91
com.apple.mobilegarageband - 库乐队 4878.17
com.apple.Keynote - Keynote 讲演 5625
com.apple.Numbers - Numbers 表格 5625
com.apple.Pages - Pages 文稿 5625
com.apple.iMovie - iMovie 3709.9.72
com.apple.itunesu - iTunes U 2360
com.sogou.sogouinput - 搜狗输入法 148198
com.tencent.xin - 微信 6.7.4.44
com.ss.iphone.ugc.AwemeInhouse - 抖音短视频内测 43006
Jackeys-MacBook-Pro:/ jackey$ 

2. 安装ipa包,卸载应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。
ideviceinstaller -i xxx.ipa

//命令卸载应用,需要知道此应用的bundleID
ideviceinstaller -U [bundleID]

卸载演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -U com.zhouxi.xiaoailiteios
Uninstalling 'com.zhouxi.xiaoailiteios'
 - RemovingApplication (50%)
 - GeneratingApplicationMap (90%)
 - Complete
Jackeys-MacBook-Pro:/ jackey$ 

安装演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:Code jackey$ ideviceinstaller -i QQ音乐\ 8.9.7.ipa 
Copying 'QQ音乐 8.9.7.ipa' to device... DONE.
Installing 'com.tencent.QQMusic'
 - CreatingStagingDirectory (5%)
 - ExtractingPackage (15%)
 - InspectingPackage (20%)
 - TakingInstallLock (20%)
 - PreflightingApplication (30%)
 - VerifyingApplication (40%)
 - CreatingContainer (50%)
 - InstallingApplication (60%)
 - PostflightingApplication (70%)
 - SandboxingApplication (80%)
 - GeneratingApplicationMap (90%)
 - Complete
Jackeys-MacBook-Pro:Code jackey$ 

这里补充一个: ipa我们可以通过itunes来进行下载, 下载完后可以在iTunnes偏好设置中看到存放目录

如果连接了多部手机需要分别安装时,请使用UDID指定:ideviceinstaller -u udid -i *.ipa

3. 查看系统日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicesyslog

4. 查看当前已连接的设备的UUID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevice_id --list

5. 截图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicescreenshot

6. 查看设备信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceinfo

7. 获取设备时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicedate

8. 设置代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iproxy

9. 获取设备名称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicename

10. 查看和操作设备的描述文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceprovision list

11. 挂载DeveloperDiskImage,用于调试(这个在我的机器上面不能用, 应该是缺少什么东西了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceimagemounter

12. 调试程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicedebug

如果在运行上面指令出现以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"Could not connect to lockdownd. Exiting."

使用以下方式重新安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller

重新安装过程中如果出现以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A recent change to libimobiledevice bumped the constraint on libusbmuxd to >= version 1.1.0. The current usbmuxd homebrew package is version 1.0.10.
As a result, homebrew --HEAD installs of libimobiledevice no longer build without a --HEAD install of usbmuxd.

使用以下指令升级usbmuxd:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew update
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew link --overwrite usbmuxd

升级后接着安装libimobiledevice

挂载文件系统工具:ifuse

安装方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew cask install osxfuse
brew install ifuse

或者通过官网安装

https://osxfuse.github.io

1. 安装好后使用ifuse -h会打印详细使用说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Usage: ifuse MOUNTPOINT [OPTIONS]
Mount directories of an iOS device locally using fuse.

  -o opt,[opt...]    mount options
  -u, --udid UDID    mount specific device by its 40-digit device UDID
  -h, --help        print usage information
  -V, --version        print version
  -d, --debug        enable libimobiledevice communication debugging
  --documents APPID    mount 'Documents' folder of app identified by APPID
  --container APPID    mount sandbox root of an app identified by APPID
  --root        mount root file system (jailbroken device required)

Example:

  $ ifuse /media/iPhone --root

  This mounts the root filesystem of the first attached device on
  this computer in the directory /media/iPhone.

Jackeys-MacBook-Pro:Code jackey$ 

2. 挂在媒体文件目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//注意,此处的挂载点必须要真实存在,需要预先创建好目录,否则挂载失败

ifuse [挂载点]

演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo mkdir /myapp
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse myapp/
Password:
Jackeys-MacBook-Pro:/ jackey$

卸载挂载点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fusermount -u [挂载点]

这个指令在我的电脑上不行, 我改用的sudo umount /myapp

3. 挂载某个应用的documents目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifuse --documents [要挂载的应用的bundleID] [挂载点]

//注意,iOS 8.3之后要求应用的UIFileSharingEnabled权限要开启,否则可能没有权限访问,会有如下的错误提示

ERROR: InstallationLookupFailed
The App 'com.wsgh.test' is either not present on the device, or the 'UIFileSharingEnabled' key is not set in its Info.plist. Starting with iOS 8.3 this key is mandatory to allow access to an app's Documents folder.

演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
ERROR: InstallationLookupFailed
Jackeys-MacBook-Pro:/ jackey$ 

报这个错是因为我们app没有开启文件共享,需要在app的info.plist添加一下字段

我们再试试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
mount_osxfuse: mount point /myapp is itself on a OSXFUSE volume

这里报错的原因是我们不能把文件挂在到根目录, 我们先删除之前的挂载

重新挂在到Document目录下我们自己的文件夹中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifuse --documents com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp

OK, 这次没有出错, 打开Finder进入所在目录发现myapp文件夹没有了, 但增加了一个OSXFUSE Volume的目录

打开里面就是我们的Documents目录

使用umount可卸载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
umount /Users/jackey/Documents/Xiaomi/myapp

4. 挂在某应用的整个沙盒目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifuse --container [要挂载的应用的bundleID] [挂载点]

演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifuse --container com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp/xiaoailite

打开finder可以看到整个沙盒目录都挂在上来了

如果需要自动提取沙盒日志,这里我们可以写脚本使用挂在的目录去获取里面的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Jackeys-MacBook-Pro:xiaoailite jackey$ pwd
/Users/jackey/Documents/Xiaomi/myapp/xiaoailite
Jackeys-MacBook-Pro:xiaoailite jackey$ ls
Documents    Library        SystemData    tmp
Jackeys-MacBook-Pro:xiaoailite jackey$ 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用libimobiledevice&ifuse提取iOS沙盒文件
libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch 等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。
用户6094182
2020/08/20
1.7K0
关于Mac上使用ideviceinstaller操作iPhoneXR等24位UDID设备报“ERROR: Invalid UDID specified”解决办法
最近新申请了一台iPhone XR, 测试时发现使用ideviceinstaller命令老是报错:
周希
2019/10/15
1.3K0
关于Mac上使用ideviceinstaller操作iPhoneXR等24位UDID设备报“ERROR: Invalid UDID specified”解决办法
测试人工智能自动语音识别系统之IOS
前面写过Android的测试情况,今天来讲讲IOS如何来测。 其实IOS跟Android区别不大。在Android里面,很多参数是可以用ADB来获取的,但是IOS不太好弄。 有没有办法呢?
赵云龙龙
2020/06/30
1.2K0
Flutter入门第一讲:环境搭建(mac os为例)
《Flutter零基础入门》,从无到有构建Android、iOS双平台APP,更新中…
毛大姑娘
2020/09/10
1.7K0
Flutter入门第一讲:环境搭建(mac os为例)
iOS如何获取崩溃日志
在日常测试iOS中会经常遇到App崩溃的情况,然后给研发提bug。如果就提bug就有一两句话描述,研发很难精准排查问题,所以作为测试人员需要提供崩溃日志或者崩溃堆栈辅助研发排查问题。
测试加
2022/12/05
3.4K0
iOS如何获取崩溃日志
基于Python+appium的ios自动化测试demo(更新中)
appium环境搭建可参考以下两个链接: https://www.jianshu.com/p/a2b79cd8bf38 https://www.jianshu.com/p/3c04e029c3ea
freesan44
2018/12/21
3.9K0
如何在iphone真机上自动化测试
我们做自动化测试的时候,有的时候需要用模拟器来跑。 主要好处是:节约设备,不需要占用实际的设备资源;而且不会锁屏,需要充电等各种烦恼。 有的时候却用真机跑有好处,他们的区别是什么? 1.模拟器太慢
赵云龙龙
2020/05/22
2.1K0
IOS自动化的那些经验
在自动化中,IOS我们可以用libimobiledevice来辅助做一些工作,用xcrun simctl可以来操纵模拟器,具体咋用呢?
赵云龙龙
2019/11/09
2.6K0
WDA问题混总
多个xcode线程在跑,杀掉xcode, 杀掉xcodebuild进程 , clean
全栈程序员站长
2022/09/14
8820
自动化-Appium-环境搭建-IOS(Java版)
Xcode如何下载安装或更新呢?打开Mac机上的App Store,搜索Xcode,进行安装或者更新,注意观察下Xcode的更新日志,可以看到当前版本支持的IOS SDK版本。
wangmcn
2022/07/25
5.7K0
自动化-Appium-环境搭建-IOS(Java版)
解决ifuse不支持24位UDID问题
在使用ifuse对iphone设备进行沙盒挂载时, 对类似XXXXXXXX-XXXXXXXXXXXXXXXX UDID设备会提示Invalid device UDID specified, length needs to be 40 characters
周希
2019/10/15
5080
解决ifuse不支持24位UDID问题
iOS命令行工具
libimobiledevice:使用本机协议与 iOS 真机设备上的服务进行通信的开源包
沈宥
2022/06/21
2.4K0
Mac 环境Appium自动化测试环境搭建
上一篇分享了 Windows环境Appium自动化测试环境搭建 但是由于Win环境不支持iOS设备测试,因此这里再分享Appium+Mac环境搭建,值得一提的是:在Mac环境既可以进行Android也可以进行iOS App自动化测试。
清风穆云
2021/08/09
2.5K0
自动化-Appium-环境搭建-IOS(Python版)
Xcode如何下载安装或更新呢?打开Mac机上的App Store,搜索Xcode,进行安装或者更新,注意观察下Xcode的更新日志,可以看到当前版本支持的IOS SDK版本。
wangmcn
2022/07/25
5.3K0
自动化-Appium-环境搭建-IOS(Python版)
自动化-Appium-常用命令
自动化测试过程中通常会使用一些操作命令,如针对Android需要查看App的appPackage和appActivity;针对IOS需要查看App的bundleID等。
wangmcn
2022/07/25
1.9K0
自动化-Appium-常用命令
ios重签名教程
我们遇到android app现在加固限制可能有很高的分析难度,不容易进行抓包,我们可以用ios的包脱壳然后进行分析会相对容易些,这篇文章主要讲了如何给ios设备越狱、给ios应用程序脱壳重签名,脱壳之后就可以进行分析代码、修改代码重签名之后可以在安装到设备上。
tea9
2022/07/16
1.5K0
ios重签名教程
iOS 逆向工具:逆向做的好,码农下班早丨音视频工具
App 逆向工程是做竞品分析的常用方法,常言道『逆向做的好,码农下班早』,懂的都懂。这里我们对 iOS 逆向做一下简单介绍,这里面会涉及如下工具:
关键帧
2022/06/13
1.2K0
iOS 逆向工具:逆向做的好,码农下班早丨音视频工具
跨平台iOS自动化测试工具——tidevice
一直以来,iOS自动化的实现&执行都依赖 Mac 系统,其主要原因是因为需要通过 Xcodebuild 编译&安装 WDA (WebDriverAgent) 到 iOS 设备中,通过WDA实现对被测应用进行操作。而Windows系统无法运行Xcode工具,所以无法运行iOS自动化测试。
清风穆云
2021/08/09
6.3K0
IOS App测试的那些坑和解决方案
在测试中常见的,如 xcode 版本问题,打包证书问题,闪退无法重现,不好抓 log, 上架被拒问题等等。本文总结一些常见的坑,可以完美绕过去。
赵云龙龙
2019/11/10
4.3K0
Flutter在Mac上搭建IOS开发环境
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
越陌度阡
2020/12/16
1.5K0
Flutter在Mac上搭建IOS开发环境
相关推荐
使用libimobiledevice&ifuse提取iOS沙盒文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验