2

我正在寻找一种在贸易展上展示应用程序的解决方案。

我知道您可以使用未记录的有效负载将配置文件安装到您的设备,com.apple.defaults.managed以禁用设备的主页按钮。这是在贸易展览会上展示您的应用程序的好方法。但是,有时您的某些功能不应在此类节目中激活,或者在此演示模式期间某些数据不应存储在设备上。

由于您通过此 mobileconfig 文件启用的密钥是SBStoreDemoAppLock我认为这也会使私有+[UIApplication isRunningInStoreDemoMode]返回YES,但事实并非如此。有谁知道在什么情况下这个方法会返回YES?

我知道这是私有 API,但这是仅用于 beta 发行版的代码,因此并不重要。所以请不要评论并告诉我我会被苹果拒绝!

任何帮助表示赞赏!谢谢!

4

1 回答 1

2

isRunningInStoreDemoMode

我看了一下 UIKit。它在这个函数中的作用是:

CFPreferencesGetAppBooleanValue("StoreDemoMode", "com.apple.demo-settings', &value);

我 grep 二进制文件,发现它在很多地方都使用过。但是,我没有找到任何设置它的代码。(可能,我对此可能是错的,因为我在它上面花费的时间非常少,并且我通过模拟器二进制文件进行 grep,这与真实设备二进制文件不同)。

此外,它不能通过 com.apple.defaults.managed 进行设置(只能通过这种方式设置有限的一组设置)。

所以,我的假设是这个 API 可以让人想起一些旧的 Kiosk 机制,这些机制已经被替换/进化了。

最简单的方法

我认为对您来说最简单的方法就是为演示制作一个特殊的版本,而不是尝试找到一个可以区分信息亭模式和正常模式的私有 API

引导式访问模式

如果你喜欢挑战。您可以查看新的信息亭模式机制 - 引导访问模式。

有两种方法可以启用它:a) 通过 UI ( https://www.appcertain.com/apple-guided-access-mode-parents/ ) b) 使用 Apple 配置 ( https://itunes.apple.com/我们/app/apple-configurator/id434433123?mt=12

有一个库 /usr/lib/libAccessibility.dylib。它有 API AXSGuidedAccessEnabled(); 我没有使用它,但我认为它会返回设备是否处于可访问模式。

于 2013-05-09T15:56:26.893 回答