如何从命令行获取 NSUserDefaults

Posted

技术标签:

【中文标题】如何从命令行获取 NSUserDefaults【英文标题】:How to get a NSUserDefaults from command line 【发布时间】:2016-01-06 15:36:54 【问题描述】:

如何从命令行拉取 NSUserDefaults 共享首选项?这将用于开发构建。我想使用某种 shell 脚本并调用它来检索此信息。这可能吗?如果是这样,怎么做?

更新: 不幸的是,我还需要从无根设备而不是模拟器中获取它。这是因为我想获取 APNS 令牌并将其存储在某个地方。我目前将 APNS 令牌存储在 NSUserDefaults 中。需要明确的是,我有一个 ios 应用程序,我想使用 Mac 上的命令行脚本获取我存储在 NSUserDefaults 中的 APNS 令牌。我需要从设备获得它的原因是我无法从模拟器推送通知,所以除非真实设备注册,否则我不会获得 APNS 令牌。

更新:我看到了这篇 SO 文章 Browse the files created on a device by the IOS application I'm developing, on workstation?,但我想自动执行此操作。无论如何要使用 xcode 命令从外壳中拉下容器?

【问题讨论】:

除非你的设备越狱,我怀疑这是可能的。 如果您将令牌记录到控制台,您可以使用 libimobiledevice 检索它:krypted.com/mac-os-x/use-libimobiledevice-to-view-ios-logs 【参考方案1】:

如果您使用的是模拟器,您可以在

中找到它们

~/Library/Developer/CoreSimulator/Devices/<dev-uuid>/data/Containers/Data/Application/<app-uuid>/Library/Preferences/<app-bundle>.plist

dev-uuid是模拟器的UUID(你可以通过xcrun simctl list找到它们的列表)

app-uuid 是此应用安装的 UUID

app-bundle 是您的应用程序包(即 com.test.testApp)

【讨论】:

【参考方案2】:

首先,你不需要解决这个问题。只需编写一些代码即可将数据打印到控制台。

如果您确实需要这样做,这里是标准用户默认值的解决方案(组用户默认值存储在另一个路径中,我现在无法处理)。

    确保您的应用不是通过 App Store 安装的。 安装 iExplorer(在 Mac OS 上或在 Windows 上的 iFunbox)并插入您的设备。 打开 iExplorer(或 iFunbox)和浏览器到这个应用程序。将整个沙盒目录导出到您的 PC。 用户默认值存储在Library/Preferences/<app-bundle>.plist。用 Xcode 打开它。

【讨论】:

我需要它自动化。发生了什么是我的自动化测试,我需要获取 APNS 令牌,以便我们可以使用它进行自动化测试。您是否建议我们将其打印到控制台并从那里读取? iFunbox 不会是自动化的,而是手动的。 @john-wong 如果你安装了 Xcode,你就不需要 iFunbox。您可以从“设备”窗口获取应用沙盒。

以上是关于如何从命令行获取 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python 程序中的命令行获取数据?

如何从命令行获取最后 5 分钟的日志

如何从 shell 获取准确的命令行字符串?

如何从命令行获取 nvidia 驱动程序版本?

如何从 curl 请求中获取响应时间(通过命令行)

如何:可以从 Unix 命令行获取参数的 MATLAB 脚本