我在这里问了一个问题,但答案引导我打开一个新话题。很快,我想从我的应用程序在 Appstore 上启动一个免费应用程序,但我想启动的应用程序没有URL Scheme。我的另一个问题的评论说使用一些特殊的 API,如 SBSLaunchApplicationWithIdentifier 或 UIDocumentInteractionController 之类的类使其成为可能。谁能帮助我如何从我的应用程序启动应用程序。提前致谢
1 回答
我先说这个方法只是越狱!它使用 Apple 可以在未来版本中随时停止支持的私有 API!
让我们开始吧,这个方法使用[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 访问手机的外壳。
然后,将您的应用程序放在正确的位置后,您需要设置权限,例如:
我会使用与 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_
并使用以下脚本在您的应用文件夹中创建一个名为 YourApp 的新文件:
#!/bin/bash
CrrDir=$(dirname "$0")
exec "${CrrDir}"/YourApp_
现在,只需重新启动(Cydia 中有一个应用程序),您就可以开始了。
抱歉,如果这看起来很难,其实不是,我不记得我在哪里学到的,但那是很久以前的事了。此方法适用于所有 iOS 版本,我刚刚使用 iOS 5.1 对其进行了测试。
同样,如果您这样做,您的应用将不会被 Apple 批准。