私は現在、iPadアプリの "デバイス内"(シミュレータではない)モニタリングシステムを開発中です。システムは以下を実行できるはずです:extern [UIApplication sharedApplication]を取得しますか?
- ユーザー入力シミュレーション:タップ、ドラッグ、キーボードをシミュレートします。
-Information recollection:入力後にテキスト値と結果を取得します。
この情報は、後でイベント管理サーバーに報告されます。私はすでにKIFソフトウェアhttps://github.com/square/KIFのコードといくつかの自己開発コードを使用して、1つのアプリケーションで2つのポイントを処理しました。 UIViewオブジェクトのaccessibleNameプロパティを使用してポインタを取得し、人工イベントを[[UIApplication sharedApplication] sendEvent:]メソッドに送信します。
ここには次のようなものがあります。私はこれらのイベントを私がいるアプリケーション#1からアプリケーション#2に送る必要があります。 (監視を独立に保つために、アプリケーション#2にすべてのコードを埋め込むことはオプションではありません)私はアプリケーション#2を開くために[[UIApplication sharedApplication] openURL:]メソッドを使用します。 https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW18
問題がある、私はアプリの第1位コードでアプリ#2の[のUIApplication sharedApplication]オブジェクトへのポインタを取得するように見えることができないので、私はアプリ#2にアプリ#1からイベントを送信することはできません。
プロセス間の共有メモリ通信は素晴らしいですが、私が見つけた情報によれば、URLメッセージング方式はiOSのアプリケーション(またはプロセス)間の唯一の通信のようです。 NSConnectionクラスもiOSには存在しません。私はMachポートとPOSIXファイル記述子についても少し読んだことがありますが、かなり複雑に思えます。
私は、アプリケーション#2 [UIApplication sharedApplication]インスタンスのポインタの値をURLメッセージの文字列パラメータとして送信しようとしても、文字列をapp#1のポインタに戻しましたが、EXC_BAD_ACCESS 。私はポインタアドレスが両方のプロセスで同じことを意味しないと思います。たぶん、各プロセスに独自の「オフセット」がありますか? ご協力いただければ幸いです。
はい、プライベートAPIなしではこれはできません。実際、KIF自体はプライベートAPIを使用してタップイベントを偽造しています。このコードまたはアプリはアプリストアに送信されないため、これは問題ではありません。これは監視と監視の目的にすぎません。 アプリ#1がバックグラウンドで、アプリ#2がアクティブのときに[UIApplication sharedApplication]を呼び出すというバックグラウンドアプローチを試みましたが、アプリ#1のUIApplicationインスタンスが返されました。 これらのAPIの1つはすでに存在すると思いますか? MachポートまたはPOSIXファイル記述子、またはDistributedオブジェクトで行われますか? ご協力いただきありがとうございます。 –
はい、別のアプリからアプリにアクセスできると確信しています。そして[この投稿](http://stackoverflow.com/questions/4312613/can-we-retrieve-the-applications-currently-running-in-iphone-and-ipad)はプライベートで遊ぶのに適しているかもしれませんAPIを使用して、他のアプリのメモリにアクセスする方法を見つけます。 – bontoJR