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

时间:2012-04-18 07:23:24

标签: objective-c ios ipad

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

1 个答案:

答案 0 :(得分:16)

首先我要说此方法只是越狱!它使用私有API,Apple可以在以后的版本中随时停止支持

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

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

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

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

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

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

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

enter image description here

我会使用与Cydia相同的那些:

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

接下来,一个小技巧。二进制文件需要setuid bit

chmod 4755 /Applications/YourApp.app/YourApp

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

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

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

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

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

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

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