如何在iPad上以编程方式启用“展示模式”?

9
我正在开发一个应用程序,需要在完成指定的目标之前引起用户的完全注意。在达成目标之前,如果用户尝试按“主页”按钮,它应该被禁用,或者像iOS6中的“导览模式”一样。我只需要在启动应用程序时以编程方式完成,不喜欢在iPhone / iPad的设置菜单中手动更改任何内容。在我的应用程序完成目标后,主页按钮应该被启用。该应用程序针对企业。因此无需通过应用商店获得批准。如何实现?谢谢提前。
编辑:我了解了“移动配置plist”的相关内容。这需要重新启动设备。但我不想重启设备。一旦启动了我的应用程序,它应该编程方式处理所有内容。我不希望用户/监管人员干预。只想像“Guided Access”那样在我的应用程序内以编程方式禁用主页按钮。 Guided Access中是否有可用于禁用主页按钮的私有API?
注意:不适用于越狱设备。目标是企业许可应用程序。

1
我认为那是不被允许的... - Sagrian
需要重新启动设备以加载“移动配置plist”。但我不想重新启动设备。一旦我的应用程序启动,它应该通过编程处理所有事情。我不希望用户/监管者在此进行干预。只是想像引导访问那样通过编程禁用主页按钮。 - Ka-rocks
2个回答

11

Zachary Christopoulos在一篇文章中使用了"移动配置plist"的方法。

安装了这个配置文件后,当设备重新启动时,只有在重启设备之前运行的第一个应用程序才会运行。

Zachary的文章中提供了一个示例plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadDescription</key>
            <string>Disables the home button.</string>
            <key>PayloadDisplayName</key>
            <string>Home Button Lock</string>
            <key>PayloadIdentifier</key>
            <string>com.zchristopoulos.kiosk</string>
            <key>PayloadOrganization</key>
            <string>Zachary Christopoulos</string>
            <key>PayloadType</key>
            <string>com.apple.defaults.managed</string>
            <key>PayloadUUID</key>
            <string>B2D02E2D-BAC5-431B-8A29-4B91F71C9FC1</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadContent</key>
            <array>
                <dict>
                    <key>DefaultsDomainName</key>
                    <string>com.apple.springboard</string>
                    <key>DefaultsData</key>
                    <dict>
                    <key>SBStoreDemoAppLock</key>
                    <true/>
                    </dict>
                </dict>
            </array>
        </dict>
    </array>
    <key>PayloadDescription</key>
    <string>Disables Home Button</string>
    <key>PayloadDisplayName</key>
    <string>Home Button Lock</string>
    <key>PayloadIdentifier</key>
    <string>com.zchristopoulos.hbkill</string>
    <key>PayloadOrganization</key>
    <string>Zachary Christopoulos</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>614D1FE3-F80D-4643-AF6B-D10C4CC8737A</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
</dict>
</plist>

谢谢。但是我不想重新启动设备。一旦我的应用程序启动,它应该在程序中处理所有事情。我不希望用户/主管干涉其中。 - Ka-rocks
这在iOS 7上已不再受支持。这不是官方的方式。https://devforums.apple.com/thread/216385?tstart=0 - Krešimir Prcela
1
我们必须使用App Lock Payload(PayLoadType=com.apple.app.lock),根据iOS 6配置文件参考(https://developer.apple.com/library/ios/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010206-CH1-SW4)。@Rjstelling考虑提供一个iOS 7的示例plist文件,以便成为此展示模式设置的一站式商店。 - Durai Amuthan.H

2
不使用私有框架或越狱设备,您无法自动禁用主页按钮。您能做的最接近的事情是让最终用户使用“指定访问”来要求三次点击主页按钮退出应用程序。在“设置”应用程序下的“通用->辅助功能”中首先必须打开“指定访问”。
另请参阅:Disable Home Button Without Rebooting Device - Stack Overflow

谢谢。但是在上面提到的链接中仍然没有确切的解决方案。 - Ka-rocks
没错。这个话题以前已经被提出过,目前还没有解决方案。 - WhoaItsAFactorial

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接