以编程方式在单一应用模式下锁定iOS应用

时间:2013-11-29 11:49:38

标签: ios objective-c iphone-privateapi springboard

注意:我不想将此应用提交到应用商店。

我想要实现的目标:

我希望简单的应用程序有一个视图,有两个按钮锁定和解锁。

锁定 - 此按钮将锁定设备。只有这个应用程序的屏幕显示即使重新启动相同的屏幕将显示其他任何东西都将无法访问。主页按钮,手势将被禁用,类似于单一应用程序模式。

解锁 - 这将解锁设备并切换到设备的正常行为。

iOS: 我希望这适用于iOS 4.3及更高版本。

我已检查过以下解决方案,但这些不符合我的要求

  1. 配置文件

    Lock-down iPhone/iPod/iPad so it can only run one app

    但它是手动的(重启设备,打开应用程序,您想在单应用程序模式下运行)。我希望通过我的应用程序以上述方式进行编程。

  2. 引导式访问(iOS 6及更高版本)

    How to lock down user to Single App mode in iOS 6, Programmatically?

    我希望它以所有操作系统和编程方式执行。

  3. 有没有办法做到这一点?因为我不想将它提交到应用商店是否有任何私人api,一些hack跳板实现这一点?

    提前致谢!!

3 个答案:

答案 0 :(得分:21)

正如我在iOS 7中所知,有一项新功能可以让您完全按照自己的意愿行事。 但是,它仅适用于iOS 7(我相信它仅适用于受监督的设备)。

1)您需要使用autonomousSingleAppModePermittedAppIDs密钥安装限制配置文件(查看here

这是一个时间步,用户需要手动接受此配置文件。

还有另一种方法可以使用MDM以静默方式安装它,但这可能对你来说太过分了。

2)你应该使用API​​:

UIAccessibilityRequestGuidedAccessSession (to lock/unlock)

定义为here

3)和大多数美化部分。所有这些都是官方文件。因此,您甚至可以将其提交给AppStore。

P.S。你为什么关心4.3或5?他们现在的市场份额很小。最有可能的是iOS 6的市场份额已经低于20%。

更新1

您可以尝试使用发送点击次数和密钥的API(在iPhone-privateapi标记中搜索GSEvent)。可以使用这些API,你可以做三重家庭来打开和关闭可访问性。

如果这项工作,我认为你应该能够覆盖iOS 6.我不确定此API和三次主页点击是否可用。

看起来这个私有API在iOS 7中已经无法访问了。所以,你可能会忽略这个想法。

答案 1 :(得分:3)

只是想写这个,即使这是旧的,因为我需要实现类似的解决方案,我得到它的工作。以下是我的步骤和说明,这涉及到MDM和其他具体步骤。

我的要求如下。每个位于不同位置的iPad都安装了一组应用程序。为了方便起见,我们假设每个部门都有自己的应用程序。参与者打开与他们的部门相关的应用程序。为了进行测试,APP自动将iPad锁定为单应用程序模式,在测试结束时,它将自行解锁。

  1. 使用Apple Configurator监控iPad / iphone。
  2. 安装MDM相关文件(每个MDM都有自己的一组说明,通常涉及下载配置文件)。
  3. 每个MDM都有单选APP模式或MultipleAppMode选项。选择第二个选项,然后将应用程序ID添加到列表中。 (单个APP模式与MDM的效果非常好,但我不希望应用程序一直锁定到单个APP)。
  4. 我使用UIAccessibilityRequestGuidedAccessSession api锁定从单一应用模式解锁设备。
  5. http://bobxcode.blogspot.com/2015/12/programmatically-implement-single-app.html

    谢谢, 鲍勃

答案 2 :(得分:1)

在MDM配置中,有一个选项

  • <强> autonomousSingleAppModePermittedAppIDs

    可选。仅限监督。如果存在,允许应用 由数组中列出的bundle ID标识 自主进入单一应用模式。 可用性:仅在iOS 7.0及更高版本中可用。

    但这需要监督设备模式。