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

我在这里问了一个问题,但答案指导我开一个新的话题。 不久,我想从我的应用程序上启动一个免费的Appstore应用程序,但我想要启动的应用程序没有URL计划 。 对我的另一个问题的意见说,使用一些特殊的API,如SBSLaunchApplicationWithIdentifier或像UIDocumentInteractionController这样的类使它成为可能。 任何人都可以请帮助我如何从我appication启动一个应用程序。 提前致谢

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

让我们开始吧,这个方法使用[UIApplication launchApplicationWithIdentifier:suspended:]私有方法:

 [[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO]; 

从我testing过的将这个方法从一个不以root运行的应用程序调用的方式来看,SpringBoard(或LaunchServices)显然只允许根应用程序使用这个方法启动其他应用程序。

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

要让你的应用程序以root身份运行,你需要把它放在/Applications/YourApp.app而不是通常的/User/Applications/UUID/YourApp.app。

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

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

在这里输入图像说明

我会使用与Cydia相同的:

 chown -R root:wheel /Applications/YourApp.app 

接下来,一个小技巧。 二进制将需要setuid位 :

 chmod 4755 /Applications/YourApp.app/YourApp 

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

 mv /Applications/YourApp.app/YourApp /Applications/YourApp.app/YourApp_ 

并使用以下脚本在您的应用程序文件夹中创build一个名为YourApp的新文件:

 #!/bin/bash CrrDir=$(dirname "$0") exec "${CrrDir}"/YourApp_ 

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

对不起,如果这看起来很难,那不是,我不记得我在哪里学过的,但是很久以前。 这个方法在所有iOS版本中都能正常工作,而且我刚刚在iOS 5.1中进行了testing。

再一次, 如果你这样做你的APP不会被苹果认可