10

私はここで質問をしましたが、その回答は私を新しいトピックを開くように導きました. まもなく、アプリケーションから Appstore で無料のアプリを起動したいのですが、起動したいアプリにURL スキームがありません。私の他の質問へのコメントは、SBSLaunchApplicationWithIdentifier のようないくつかの特別な API や UIDocumentInteractionController のようなクラスを使用すると、それが可能になると言います。アプリケーションからアプリケーションを起動する方法を教えてください。前もって感謝します

4

1 に答える 1

17

まず、この方法はジェイルブレイクのみです。Apple が将来のバージョンでいつでもサポートを停止できるプライベート API を使用しています。

始めましょう。このメソッドは[UIApplication launchApplicationWithIdentifier:suspended:]プライベート メソッドを使用します。

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

root として実行されていないアプリケーションからこのメソッドを呼び出してテストしたところ、どうやら SpringBoard (または LaunchServices) は root アプリケーションのみがこのメソッドを使用して他のアプリケーションを起動できるようです。

そのため、まず iPhone をジェイルブレイクし、次にアプリケーションを root として実行する必要があります。

アプリをルートとして実行するには、通常の /User/Applications/ UUID /YourApp.app ではなく、/Applications/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 に答える