如何从终端访问 iOS 8 设备上的应用程序数据?

Posted

技术标签:

【中文标题】如何从终端访问 iOS 8 设备上的应用程序数据?【英文标题】:How to access application data on an iOS 8 device from terminal? 【发布时间】:2015-02-19 23:05:28 【问题描述】:

我们正在我们的 ios 应用上运行一些测试。该应用程序在 Library/Caches/Logs/ 中生成一个日志文件。在 iOS 7 设备上,我们可以创建应用程序的存档,其中包含应用程序数据,然后将存档从设备复制到我们的本地计算机。使用来自libimobiledevice (http://www.libimobiledevice.org/) 的ideviceinstaller 实用程序,我们可以解压缩存档并提取日志文件:

# Archive the app and copy to our local machine
ideviceinstaller --udid  $DEVICE_ID --archive $BUNDLE_ID -o copy=.

# Unzip the archive and redirect the log file to a file in our current directory
unzip -p $BUNDLE_ID.ipa "$(unzip -l $BUNDLE_ID.ipa | grep -o "Container/Library/Caches/Logs/$LOG_FILE_NAME")" > ./$LOG_FILE_NAME

不幸的是,这似乎不再适用于 iOS 8 设备,因为应用程序数据在文件系统中的存储位置发生了变化。特别是,显然应用数据不再包含在应用存档中:https://developer.apple.com/library/ios/technotes/tn2406/_index.html

我们需要一种方法来访问设备上的这个日志文件,并通过一个 shell 脚本将它复制到我们的本地机器上。我对 iOS 开发还很陌生,所以我对如何做到这一点以及在 iOS 8 中是否仍然可行感到有些困惑。

任何建议都将不胜感激,如果有任何需要澄清的地方,请告诉我。

【问题讨论】:

【参考方案1】:

我找到了一个名为 ifuse (https://github.com/libimobiledevice/ifuse) 的实用程序,它可以让我挂载应用程序的沙盒根文件夹并将文件复制到我的本地计算机:

# E.g. ifuse --container com.blah.yourappname <mountpoint>
ifuse --container $BUNDLE_ID ~/mnt

# I found I needed to sleep for a few seconds before trying to access
# the filesystem, otherwise I'd get "Device not configured" errors...
sleep 5 

cp ~/mnt/Library/Caches/Logs/$LOG_FILE ~
umount ~/mnt

希望这对其他人有帮助!

【讨论】:

以上是关于如何从终端访问 iOS 8 设备上的应用程序数据?的主要内容,如果未能解决你的问题,请参考以下文章

iOS/Javascript - 如何使用 Javascript 访问设备上的图像

如何从Particle上的网站读取数据

从 iOS 上的 React Native 应用程序访问 NSUserDefaults

如何从 Today Extensions(iOS 8) 访问核心数据详细信息?

iOS 8.3 上的布局位移

移动web终端 viewport设置