从Mac命令行访问iOS应用程序目录(沙箱)

我需要使用Mac或Linux上的命令行(non-gui)访问安装在iOS设备上的应用程序的沙箱目录。 这有助于开发和测试自动化。 将json文件放入沙箱可以让我设置额外的调试消息和更小的刷新间隔等参数。

像iFunBox这样的工具可以很好地工作,但只是图形化,需要多次点击才能完成。 发给开发人员的电子邮件没有得到答复。 它也不支持AppleScript。 我确实找到了另一个提供Fuse模块的应用程序,但是如果应用程序被卸载然后重新安装(为了重置为第一次用户体验),它就变成了错误。 我向开发人员报告了这些问题,但没有解决问题。

我需要做的事情是:

  • 测试是否安装了具有特定软件包ID的应用程序
  • 创建Library / Caches / MYLIBNAME目录(如果它不存在)
  • 将一个~100字节的json文件从Mac复制到该目录
  • 获取该文件的副本
  • 只能在Linux上运行的解决方案也是可以接受的
  • 设备没有越狱,我宁愿不要求这样做

在某些情况下,我没有应用程序的源代码,因为它是使用我的库的第三方,因此编译应用程序的不同版本是不切实际的。

由于lxt,许多评论中的答案如下。 总结是:

  • 与libimobiledevice相关的各种库和程序可以解决这些问题
    • 使用修补的 iFuse安装应用程序沙箱
    • 使用idevicesyslog查看控制台日志
    • 使用ideviceinstaller安装/卸载应用程序
  • 与libimobiledevice相关的各种库和程序即使不是不可能在Linux或Mac上编译也是非常困难的,并且没有统一分发源或二进制文件
    • 对于Ubuntu,请尝试libimobiledevice(可能有3个后缀),ideviceinstaller和libimobiledevice-utils包
    • 对于Mac,搜索libimobiledevice-macosx可能会让你获得一些方法

这有点棘手,因为我认为您已经发现应用程序名称是在每次安装时随机生成的。 我不认为有过这样的方式,当然我知道。 这解释了您在模拟新安装时遇到的问题(…应用程序目录名称更改为新的随机哈希,然后您被卡住了)。

虽然我倾向于以其他方式访问此配置文件(可能通过网络,并且只有一些代码只能在调试/测试版本上执行检查),如果你确实想这样做,那么我建议你尝试一下类似于编写脚本,当您想要模拟新安装时,选择最近修改过的应用程序目录。 但这非常hacky。

如果您无法插入仅在调试/测试版本上执行的条件代码,那么我认为iOS在文件系统级别使用的随机应用程序命名架构对您采取的任何方法都将存在问题。

更新 :关于iFuse和libimobiledevice – 开箱即用它限制你到文档目录。 这是因为iFuse的作者不会让入门级用户感到困惑,也因为结构因iOS版本而略有不同。 你可以注释掉iFuse源代码中的行 – fuse_opt_add_arg(&args, "-osubdir=Documents"); – 通过mount访问库目录。 如果这样做,你显然需要自己重新编译iFuse。

您可以使用MobileDevice Library

我知道这是一个老问题,我怀疑任何人都在这里看,但我想我会提到你可以使用’brew install libimobiledevice’在mac上编译。 有许多依赖项,Homebrew真的有助于通过为您安装它们来使其成为一个简单的过程。