特殊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不会被苹果认可 。