10

我在这里问了一个问题,但答案引导我打开一个新话题。很快,我想从我的应用程序在 Appstore 上启动一个免费应用程序,但我想启动的应用程序没有URL Scheme。我的另一个问题的评论说使用一些特殊的 API,如 SBSLaunchApplicationWithIdentifier 或 UIDocumentInteractionController 之类的类使其成为可能。谁能帮助我如何从我的应用程序启动应用程序。提前致谢

4

1 回答 1

17

我先说这个方法只是越狱!它使用 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 批准

于 2012-04-18T14:11:18.567 回答