2012-03-01 51 views
1

我目前正在爲iPad應用開發一個「in device」(不是模擬器)監控系統。系統應該能夠執行以下操作:Get extern [UIApplication sharedApplication]?

- 用戶輸入模擬:模擬用戶輸入:點擊,拖動,鍵盤。

-Information recollection:獲取輸入後的文本值和結果。

此信息稍後將報告給事件管理服務器。我已經在單個應用程序中關注了這兩點,通過使用來自KIF軟件https://github.com/square/KIF的一些代碼和一些自行開發的代碼。我使用UIView對象的accessibleName屬性來獲取它們的指針,並將仿真事件發送到[[UIApplication sharedApplication] sendEvent:]方法。

這是事情:我需要將這些事件從我所在的應用程序#1發送到應用程序#2。 (爲了保持獨立監控,也將所有代碼嵌入到應用#2中不是一種選擇)我使用[[UIApplication sharedApplication] openURL:]方法來打開應用#2。 https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW18

的問題是,我無法從應用程序#1事件發送到應用程序#2,因爲我似乎無法得到的指針的應用程序#2 [UIApplication的sharedApplication]對象在應用#1碼。

進程之間的共享內存通信會很好,但根據我發現的信息,URL消息傳遞方案似乎是iOS中應用程序(或進程)之間的唯一通信。 iOS中也不存在NSConnection類。我也讀了一些Mach端口和POSIX文件描述符,但看起來相當複雜,我不知道他們是否可以提供幫助。

我甚至嘗試發送該應用#1的指針的值2的UIApplication sharedApplication]實例作爲URL消息的字符串參數,然後轉換的字符串返回在應用程序#1的指針,但得到了EXC_BAD_ACCESS 。我想這兩個進程中的指針地址並不相同。也許每個進程都有自己的「抵消」? 任何幫助將不勝感激。

回答

2

在第一個例子中,我將闡明如果沒有私有API,你想要做的事情是不可能的。 每個應用程序都是沙盒,您無法直接訪問其他應用程序。我認爲你的問題真的很大。

在iOS中運行的每個應用程序都像小型獨立的生態系統,當用戶按下「主頁」按鈕時(除非聲明VOIP,本地化或音頻播放器等後臺服務)。應用程序關閉後,您仍然可以運行的唯一一個過程不應超過10分鐘。這是爲了防止過度使用後臺任務,即使在這裏,該應用程序也無法從其他應用程序訪問。

我認爲唯一的方法是搜索私有API,希望其他人已經找到了在兩個應用程序之間創建數據流(直接)的方法。

+0

是的,這是不可能的,沒有私人API。實際上,KIF本身確實使用私有API來僞造自來水事件。這不是問題,因爲此代碼或應用程序不會提交給應用程序商店。它僅用於監視和監視目的。 我嘗試了背景方法(當應用程序#1在後臺並且應用程序#2處於活動狀態時調用[UIApplication sharedApplication]),但是它返回了應用程序1的UIApplication實例。 您是否認爲其中一種API已經存在?它是否使用Mach端口或POSIX文件描述符或分佈式對象完成? 感謝您的幫助。 – 2012-03-01 13:56:01

+1

是的,我確定您可以從另一個應用程序訪問應用程序。和[這篇文章](http://stackoverflow.com/questions/4312613/can-we-retrieve-the-applications-currently-running-in-iphone-and-ipad)可能是一個很好的地方開始玩私人API,然後找到一種方法來訪問其他應用程序的內存。 – bontoJR 2012-03-01 14:01:42

相關問題