タイマーが切れたらアプリをフォアグラウンドにする方法はありますか? これは、ユーザーのセッション中のさまざまな時点でいくつかの情報を表示するキオスク タイプのアプリ用です。
これは、エンタープライズ デバイスにのみインストールされるアプリのためのものであり、承認のために Apple に提出する必要はありません。また、脱獄オプションの探索も開始しています。
皆さんが提供できるヘルプ/ヒントをいただければ幸いです。ありがとう。
はい、技術的には脱獄開発に Xcode を使用できます (ただし、そうする必要はありません)。アプリを通常のサンドボックスの外で/Applications/にインストールする場合は、コード署名なしで Xcode を使用してビルドし、偽のコード署名 (または自己署名証明書を使用) してから、アプリをコピーしてインストールします。または同様のものを使用するデバイスscp(おそらく、このためのスクリプトがあります)。
「Theos」、「Logos」、「iOSOpenDev」などのツールで Google 検索を行うこともできます。 詳細はこちら
また、Xcode を使用した偽のコード署名については、このページを参照してください。
アプリをフォアグラウンドに移動するという点では、それを処理する方法が少なくとも 2 つあります。
1 つは、Cydia を使用して (無料の) ユーティリティをインストールすることですopen。ではopen、バンドル ID (例: ) を使用して、任意のアプリを開くコマンド ライン呼び出しを発行できますopen com.mycompany.MyAppName。これをプログラムで実行する場合は、system()呼び出し内でそのコマンドを発行します。
#import <stdlib.h>
int returnCode = system("/usr/bin/open com.mycompany.MyAppName");
別の方法として、@WrightsCS によるこの回答を確認することもできます。これがどこに行くかについてのコメントも必ず読んでください。
更新:アプリをバックグラウンドに置くという点では、 または のいずれかでアプリを完全に強制終了できexit(0)ます[[UIApplication sharedApplication] terminateWithSuccess]。または、ホームボタンの押下をプログラムでシミュレートするソリューションについては、この回答を参照してください。これにより、アプリは強制終了せずにバックグラウンドに送信されます。
NSTimerアプリがバックグラウンドにある間はタイマーが起動しないため、を使用することはできません。ただし、GCDブロックを使用してバックグラウンド作業を実行し、呼び出しを行ってフォアグラウンドに戻すことができます。 system()open
アプリをフォアグラウンドにするための脱獄オプション:
MobileSubstrate を使用して SpringBoard にフックします。[SBApplicationIcon launch]やなど、有望な名前のクラスとメソッドを見つけることができます[SBApplication launch]。もう 1 つの可能性はSBSLaunchApplicationWithIdentifier()、SpringBoardServices プライベート フレームワークから使用することです。
アプリを一時停止するためのオプション:
MobileSubstrate を使用して、SpringBoard に特定のアプリを閉じさせることで、これをもう一度行うことができます。電話などでホームボタンのクリックをシミュレートできるかもしれません[SBUIController handleMenuTap]。