从我的应用程序启动应用程序的特殊API

ilh*_*ctn 10 objective-c ipad ios

我在这里问了一个问题,但答案指导我开了一个新话题.不久,我想从我的应用程序在Appstore上启动一个免费的应用程序,但我想要启动的应用程序没有URL方案.关于我的另一个问题的评论说,使用一些特殊的API,如SBSLaunchApplicationWithIdentifier或类,如UIDocumentInteractionController使它成为可能.任何人都可以帮我如何从我的应用程序启动一个应用程序.提前致谢

fbe*_*rdo 16

我先说这种方法只是越狱!它使用私有API,Apple可以在将来的版本中随时停止支持!

让我们来看看,这个方法使用[UIApplication launchApplicationWithIdentifier:suspended:]私有方法:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO];
Run Code Online (Sandbox Code Playgroud)

从我测试的那个调用这个方法的应用程序不是以root身份运行是没用的,显然SpringBoard(或LaunchServices)只允许root应用程序使用这种方法启动其他应用程序.

所以,首先你需要越狱你的iPhone,然后你需要让你的应用程序以root身份运行.

要让您的应用以root用户身份运行,您需要将其放在/Applications/YourApp.app中,而不是通常的/ User/Applications/UUID /YourApp.app中.

您可以使用Cydia安装OpenSSH并使用SSH访问手机的shell.

然后,在将应用程序放在正确的位置后,您需要设置权限,例如:

在此输入图像描述

我会使用与Cydia相同的:

chown -R root:wheel /Applications/YourApp.app
Run Code Online (Sandbox Code Playgroud)

接下来,一个小技巧.二进制文件需要setuid位:

chmod 4755 /Applications/YourApp.app/YourApp
Run Code Online (Sandbox Code Playgroud)

最后一步,SpringBoard不会使用setuid位打开应用程序,但会打开一个脚本(可以打开另一个应用程序)!只需将二进制文件的名称更改为YourApp_:

mv /Applications/YourApp.app/YourApp /Applications/YourApp.app/YourApp_
Run Code Online (Sandbox Code Playgroud)

使用以下脚本在app文件夹中创建一个名为YourApp的新文件:

#!/bin/bash
CrrDir=$(dirname "$0")
exec "${CrrDir}"/YourApp_
Run Code Online (Sandbox Code Playgroud)

现在,只是呼吁(在Cydia有一个应用程序),你准备好了.

对不起,如果这看起来很难,但事实并非如此,我不记得我在哪里学到它,但这是很久以前的事了.这种方法适用于所有iOS版本,我刚刚使用iOS 5.1进行了测试.

再次,如果您这样做,您的APP将不会被APPLE批准.

  • +1.但请注意,以root身份运行应用程序的**替代**(当然有一些缺点)是授予您的应用程序`com.apple.springboard.launchapplications`权利,[我在此处显示] (http://stackoverflow.com/a/15455831/119114). (2认同)