【问题标题】:Command line access to iOS app directory (sandbox) from Mac从 Mac 命令行访问 iOS 应用程序目录(沙盒)
【发布时间】:2013-04-05 12:33:07
【问题描述】:

我需要使用 Mac 或 Linux 的命令行(非 GUI)访问安装在 iOS 设备上的应用程序的沙盒目录。这是为了帮助开发和测试自动化。将 json 文件拖放到沙箱中可以让我设置额外的调试消息和更短的刷新间隔等参数。

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

我需要做的事情是:

  • 测试是否安装了具有特定捆绑 ID 的应用
  • 如果 Library/Caches/MYLIBNAME 目录不存在,则创建它
  • 将 ~100 字节的 json 文件从 Mac 复制到该目录
  • 获取该文件的副本
  • 也可以接受仅适用于 Linux 的解决方案
  • 设备未越狱,我不希望将其作为要求

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

感谢lxt,许多cmets的答案都在下面。总结是:

  • 与 libimobiledevice 相关的各种库和程序可以解决问题
    • 使用 patched iFuse 挂载应用程序沙盒
    • 使用 idevicesyslog 查看控制台日志
    • 使用 ideviceinstaller 安装/卸载应用程序
  • 与 libimobiledevice 相关的各种库和程序很难在 Linux 或 Mac 上按原样编译,即使不是不可能,也没有统一的源代码或二进制分发
    • 对于 Ubuntu,请尝试 libimobiledevice(可能有 3 个后缀)、ideviceinstaller 和 libimobiledevice-utils 软件包
    • 对于 Mac,搜索 libimobiledevice-macosx 可能会找到一些方法

【问题讨论】:

    标签: ios


    【解决方案1】:

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

    虽然我的偏好是以其他方式访问此配置文件(可能通过网络,并且有一些仅在调试/测试构建时执行的代码检查它),但如果您确实想这样做,那么我' d 建议尝试编写一个脚本,当您想模拟新安装时选择最近修改的应用程序目录。但这很hacky。

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

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

    【讨论】:

    • 我很乐意做这一切,但我没有办法首先进行命令行访问。一旦我有了,其他一切都很容易/SMOP。我能找到的所有工具都是 GUI 且无法以任何方式自动化,这就是问题所在。
    • 啊,很抱歉 - 这就是你所追求的:libimobiledevice.org - 它适用于非越狱设备,尽管显然你只能访问应用程序目录。在 Linux 上应该没问题,虽然我只在 OS X 上使用过。
    • 您确定 libimobiledevice 可以访问应用程序沙箱目录(库、缓存等)吗?我确实看了很长一段时间,但找不到任何证据证明它可以。它肯定可以访问其他目录(应用程序文件共享等),但这对我没有用。据我所知,他们使用不同的协议。
    • 假设您通过 iFuse 使用 libimobiledevice:协议是相同的,只是库存 iFuse 安装对其进行了限制,以免混淆入门级用户。我将更新我的答案,而不是在评论中发布,因为您需要修改来源
    • 编译/工作依赖项是一场噩梦。最后,我不得不从随机 PPA 中挑选预编译的部分。但 iFuse 确实奏效了。我还没有测试卸载和重新安装应用程序时它的行为,但假设它会中断。然而,作为命令行意味着我可以解决这个问题。 Linux 上唯一缺少的部分是获取控制台日志。 (Mac没有预编译的ifuse+依赖,macports不知道,我也没办法从源代码尝试。)
    【解决方案2】:

    您可以使用MobileDevice Library

    【讨论】:

    • Ocelot,你能告诉我如何使用它吗?我喜欢通过命令行将一些文档(在设备上)文件传输到 mac 机器
    【解决方案3】:

    我知道这是一个老问题,我怀疑有人会再看这里,但我想我会提到你可以使用“brew install libimobiledevice”在 mac 上编译。有很多依赖项,Homebrew 为您安装它们确实有助于使其变得简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多