使用libimobiledevice + ifuse提取iOS沙盒文件
简介
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
brew update
brew install libimobiledevice
#libimobiledevice中并不包含ipa的安装命令,所以还需要安装
brew install ideviceinstaller
Ubuntu下安装libimobiledevice
sudo add-apt-repository ppa:pmcenery/ppa
sudo apt-get update
apt-get install libimobiledevice-utils
sudo apt-get install ideviceinstaller
常用功能
1. 获取设备已安装app的bundleID
ideviceinstaller -l
演示:
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -l
Total: apps
com.zhouxi.xiaoailiteios - 小米同学
com.apple.test.WebDriverAgentRunner-Runner - WebDriverAgentRunner-Runner
com.apple.store.Jolly - Apple Store 5.0.0.0302
com.apple.clips - 可立拍 4141.1.
com.apple.mobilegarageband - 库乐队 4878.17
com.apple.Keynote - Keynote 讲演
com.apple.Numbers - Numbers 表格
com.apple.Pages - Pages 文稿
com.apple.iMovie - iMovie 3709.9.
com.apple.itunesu - iTunes U
com.sogou.sogouinput - 搜狗输入法
com.tencent.xin - 微信 6.7.4.44
com.ss.iphone.ugc.AwemeInhouse - 抖音短视频内测
Jackeys-MacBook-Pro:/ jackey$
2. 安装ipa包,卸载应用
//命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。
ideviceinstaller -i xxx.ipa //命令卸载应用,需要知道此应用的bundleID
ideviceinstaller -U [bundleID]
卸载演示:
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -U com.zhouxi.xiaoailiteios
Uninstalling 'com.zhouxi.xiaoailiteios'
- RemovingApplication (%)
- GeneratingApplicationMap (%)
- Complete
Jackeys-MacBook-Pro:/ jackey$
安装演示:
Jackeys-MacBook-Pro:Code jackey$ ideviceinstaller -i QQ音乐\ 8.9..ipa
Copying 'QQ音乐 8.9.7.ipa' to device... DONE.
Installing 'com.tencent.QQMusic'
- CreatingStagingDirectory (%)
- ExtractingPackage (%)
- InspectingPackage (%)
- TakingInstallLock (%)
- PreflightingApplication (%)
- VerifyingApplication (%)
- CreatingContainer (%)
- InstallingApplication (%)
- PostflightingApplication (%)
- SandboxingApplication (%)
- GeneratingApplicationMap (%)
- Complete
Jackeys-MacBook-Pro:Code jackey$
这里补充一个: ipa我们可以通过itunes来进行下载, 下载完后可以在iTunnes偏好设置中看到存放目录
如果连接了多部手机需要分别安装时,请使用UDID指定:ideviceinstaller -u udid -i *.ipa
3. 查看系统日志
idevicesyslog
4. 查看当前已连接的设备的UUID
idevice_id --list
5. 截图
idevicescreenshot
6. 查看设备信息
ideviceinfo
7. 获取设备时间
idevicedate
8. 设置代理
iproxy
usage: iproxy LOCAL_TCP_PORT DEVICE_TCP_PORT [UDID]
9. 获取设备名称
idevicename
10. 查看和操作设备的描述文件
ideviceprovision list
11. 挂载DeveloperDiskImage,用于调试(这个在我的机器上面不能用, 应该是缺少什么东西了)
ideviceimagemounter
12. 调试程序
idevicedebug
如果在运行上面指令出现以下错误:
"Could not connect to lockdownd. Exiting."
使用以下方式重新安装
brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install --HEAD ideviceinstaller
brew link --overwrite ideviceinstaller
重新安装过程中如果出现以下错误:
A recent change to libimobiledevice bumped the constraint on libusbmuxd to >= version 1.1.. The current usbmuxd homebrew package is version 1.0..
As a result, homebrew --HEAD installs of libimobiledevice no longer build without a --HEAD install of usbmuxd.
使用以下指令升级usbmuxd:
brew update
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew link --overwrite usbmuxd
升级后接着安装libimobiledevice
挂载文件系统工具:ifuse
安装方式:
brew cask install osxfuse
brew install ifuse
或者通过官网安装 osxfuse
然后使用上面指令安装ifuse
1. 安装好后使用ifuse -h会打印详细使用说明
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 -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. 挂在媒体文件目录:
//注意,此处的挂载点必须要真实存在,需要预先创建好目录,否则挂载失败 ifuse [挂载点]
演示:
sudo mkdir /myapp
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse myapp/
Password:
Jackeys-MacBook-Pro:/ jackey$
卸载挂载点
fusermount -u [挂载点]
这个指令在我的电脑上不行, 我改用的sudo umount /myapp
3. 挂载某个应用的documents目录
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.
演示:
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
ERROR: InstallationLookupFailed
Jackeys-MacBook-Pro:/ jackey$
报这个错是因为我们app没有开启文件共享,需要在app的info.plist添加一下字段
我们再试试
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
mount_osxfuse: mount point /myapp is itself on a OSXFUSE volume
这里报错的原因是我们不能把文件挂在到根目录, 我们先删除之前的挂载
重新挂在到Document目录下我们自己的文件夹中
ifuse --documents com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp
OK, 这次没有出错, 打开Finder进入所在目录发现myapp文件夹没有了, 但增加了一个OSXFUSE Volume的目录
打开里面就是我们的Documents目录
使用umount可卸载
umount /Users/jackey/Documents/Xiaomi/myapp
4. 挂在某应用的整个沙盒目录
ifuse --container [要挂载的应用的bundleID] [挂载点]
演示:
ifuse --container com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp/xiaoailite
打开finder可以看到整个沙盒目录都挂在上来了
如果需要自动提取沙盒日志,这里我们可以写脚本使用挂在的目录去获取里面的内容
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$
使用libimobiledevice + ifuse提取iOS沙盒文件的更多相关文章
- iOS 沙盒文件操作
//获得document +(NSString *)documentsPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDoc ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- IOS应用沙盒文件操作
iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. 1 ...
- iOS 沙盒(sandbox)机制和文件操作
本文参看了 http://www.uml.org.cn/mobiledev/201209211.asp#1 这篇文章中的介绍,尊重原著. 1.IOS沙盒机制 IOS应用程序只能在本应用程序中创建的文件 ...
- 【转】【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
原文网址:http://www.cnblogs.com/fengtengfei/p/5090276.html 1:模拟器 1.1 方法1: 程序中打印一下的地址,能直接前往沙盒路径. NSString ...
- iOS开发——数据持久化Swift篇&(二)沙盒文件
沙盒文件 //******************** 5.2 文件操作 func use_FileOperations() { //1.获取程序的Home目录 let homeDirectory = ...
- IOS学习之IOS沙盒(sandbox)机制和文件操作
IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...
- iOS 开发查看应用的沙盒文件
在iOS开发中,常常需要将一些信息保存到本地,比如说用户的一些搜索历史等.那么,如何查看所保存的文件呢? 这里介绍两种途径来查看应用的沙盒文件. 方法一:通过Xcode来查看,步骤如下: (1): X ...
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等 ...
随机推荐
- Hadoop 2.0 上深度学习的解决方案
原文连接:https://www.paypal-engineering.com/tag/data-science/ 摘要:伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的 ...
- APP图标设计小技巧:在iOS上快速获得APP图标的真实预览图
严格来说,这并不是一篇关于前端开发的文章,因为涉及到的知识非常浅.这只是一个向设计狮们分享的小经验,只是其中用到了一些前端内容. 最近接了个私活,了解到一个初创公司正在高价悬赏Logo(主要用于APP ...
- 验证APNS证书的有效性
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert xxx.pem
- 一键安装lnmp-php(5)
php(){cd $pathtar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0.tar.gz ./configuremakemake installcd $pathtar ...
- GET 对比 POST
HTTP 方法:GET 对比 POST HTTP 消息 标签列表(字母排序) 两种最常用的 HTTP 方法是:GET 和 POST. 什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户 ...
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(一)
不可避免,苦杏仁的香味总是让他想起爱情受阻后的命运. 一切都显得凄凉无助,可那一间间肮脏的小酒馆里却传来震耳欲聋的鼓乐声,那是穷人的狂欢,既无涉上帝,也无涉圣神降临节的诫命. 他们经常谈起它,一同承受 ...
- 20144303 《Java程序设计》第五周学习总结
20144303 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 异常处理 异常就是程序在运行时出现不正常情况,异常的由来是因为Java把出现的问题封装成了对象,换句话说Ja ...
- 20135302魏静静Linux内核分析第二周学习总结
操作系统是如何工作的 1. 小结:计算机是怎样工作的 三个法宝 存储程序计算机.函数调用堆栈.中断机制 两把宝剑 中断上下文.进程上下文的切换 2. 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径 ...
- MR案例:MR和Hive中使用Lzo压缩
在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst wo ...
- Fatal error compiling: java.lang.NoSuc hFieldError??
用了两天时间,试了各种方法,问题最终解决.是JDK的版本问题:Maven3.5不支持jdk-9.0.1,最后退回:jdk1.8.0_151,问题圆满解决!! [ERROR] Failed to exe ...