Xcode 6 / iOS 8 Simulator Data 和 Bundle 文件夹脚本

Posted

技术标签:

【中文标题】Xcode 6 / iOS 8 Simulator Data 和 Bundle 文件夹脚本【英文标题】:Xcode 6 / iOS 8 Simulator Data and Bundle folder script 【发布时间】:2014-11-05 20:00:18 【问题描述】:

随着对 xcode 6 的最新更改,.app 文件和文档文件夹看起来不再位于 iPhone 模拟器目录中的同一文件夹中。

之前,我们可以访问目录和.app文件

/Users/me/Library/Application Support/iPhone Simulator/7.1/Applications/SomeCrpyticNumber

但在 Xcode 6 中,模拟器目录完全不同:

~/Library/Developer/CoreSimulator/Devices/CrypticNumber1/data/Containers/Bundle/CrypticNumber2/MyApp.app

~/Library/Developer/CoreSimulator/Devices/CrypticNumber1/data/Containers/Data/CrypticNumber3/Documents    

其中 CryptNumber 1,2 和 3 都不同。找到包含 .app 文件的文件夹后,有没有办法可以获取相应的 Documents 文件夹?我遇到了这个问题。

为什么...?

如果我在 ios 7 模拟器上构建应用程序,文档目录和 .app 文件至少像以前一样位于同一文件夹中,但 iOS 8 将它们分开。

我现在能想到的唯一解决方案是将 2 个具有最新创建/修改日期的文件夹配对。

编辑:

附带说明,此工具对于现在在 xcode 6 上查找模拟器文件夹非常有用:http://simpholders.com/

【问题讨论】:

试试this 【参考方案1】:

Xcode 有一个很棒的插件,它允许你打开任何你想要的应用程序的目录。 它被称为ZLGotoSandboxPlugin,您可以通过Alcatraz 安装它。这个插件向 Xcode 的“文件”菜单添加了一个特殊的子菜单(我在那里隐藏了几个应用程序名称):

我觉得很方便。

【讨论】:

【参考方案2】:

我在使用 CoreData 存储完整路径时遇到了同样的问题。检索完整路径时,它返回 null,因为每次应用重新启动时文档文件夹 UUID 都不相同。以下是我的解决方案:

    确保在 CoreData 中仅存储文档/文件的相对路径。例如。存储“Files/image.jpg”而不是“/Users/yourname/.../Applications/UUID/Document/Files/image.jpg”。 使用以下命令检索应用文档位置:

    [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

    连接 #2 和 #1 以获得您要检索的文档/文件的完整路径。
你可以参考苹果开发者说明: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

【讨论】:

【参考方案3】:

这也一直困扰着我。我无法 100% 解决它,但我创建了一个快速而肮脏的应用程序来提供一些帮助。我总能找到设备目录,但我还没有找到可靠地追踪捆绑/沙箱目录的方法。来源:https://github.com/somegeekintn/SimDirs

编辑:继续并开始扫描 mobile_installation.log 以查找其他位置。现在好像什么都找到了。

【讨论】:

看起来不错。我也在做与你类似的事情,只是我没有 GUI :) 现在,我将只使用simulator_app="$(find "~/Library/Developer/CoreSimulator/Devices" -name "$ project_name.app")" full_path_to_app="$( dirname "$simulator_app" )" 来查找应用程序的目录,但我假设我们希望将此文件夹的创建日期与另一个文件夹匹配以查找捆绑目录。 您可能还想在 data/Library/Logs/MobileInstallation/mobile_installation.log.0 中查找。它似乎记录了应用程序安装和卸载信息。必须在您认为的某个地方对此进行更永久的记录。 我使用的脚本将捆绑 ID 与 .com.apple.mobile_container_manager.metadata.plist 中的 ID 匹配 - 似乎足够可靠。 非常有用。谢谢。

以上是关于Xcode 6 / iOS 8 Simulator Data 和 Bundle 文件夹脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 6 (iOS 8) 模拟器上使用 Charles Proxy?

Xcode 6 iOS Simulator 不记得应用程序设置

Xcode 6 - 如何从终端打开 IOS Simulator Mobile Safari 中的 Url?

Xcode 6.4“无法下载和安装 iOS 8.3 模拟器”

iOS 8 / Xcode 6 模拟器不再使用 HTTP 代理

使用 IB / Xcode 4.5.1 和 iOS Simulator 6.0 自定义 UIView 操作方法