2013-10-06 95 views
7

在越獄的iOS設備上,一個應用程序是否可以從另一個應用程序(實例方法,而不是靜態方法)調用方法?措辭的另一種方式是:如何獲取應用程序的實例(假設應用程序正在運行),以便我可以調用其中一種方法?從另一個應用程序調用方法(越獄iOS)

背景:我試圖在iPodUI Private Framework(請參閱this post瞭解更多詳細信息)中的掛鉤方法中調用音樂播放器應用程序中的函數。

此問題已被要求Android,但我沒有找到任何越獄iOS。如果那是因爲我提出了錯誤的問題,並且需要採取不同的方法,那麼我對此持開放態度。

+1

拍攝,打字這一切之後,我發現這個問題,這似乎持有一個可能的答案:http://stackoverflow.com/questions/18224150 /通信之間調整和應用程序 – newenglander

+1

除非我誤解你的問題,我不認爲其他答案(關於'CPDistributedMessagingCenter')將幫助你。如果您知道其他應用程序(例如音樂播放器)已經被編碼以偵聽特定的通知/消息,這將非常有用。如果您只是想在另一個應用程序中調用任意方法,該方法不適用於其他進程調用,那麼我認爲您需要使用MobileSubstrate掛接。 – Nate

+0

謝謝Nate。但是,我不應該能夠掛接到音樂播放器應用程序並添加我自己的聽衆?或者我是否比這應該更復雜? – newenglander

回答

2

實現此目的的一種簡單而又可選的方法是使用cycript和system()調用,但請注意使用system()之前使用system()的危險,因爲它可能不安全(這對我來說並不是這樣在越獄的iOS許多重要的一切是非常不安全的)

讓我們說你有,你想從其他進程調用諸如[[SomeClass sharedInstance] methodToBeCalledExternally]的方法

您可以在調用保存到一個文本文件中/tmp/something.cy

然後你通過runnin從外部注入該代碼G:

cycript -p Music /tmp/something.cy 

但如果你需要以編程方式做到這一點,當然如果環境沒有沙箱(我認爲它沒有),那麼你可以做:

system("cycript -p Music /tmp/something.cy") 

這你可以在代碼中執行任意進程中的任意ObjC代碼(在本例中爲音樂應用程序)。

最後,不要忘了刪除文件/tmp/something.cy,你將不再需要它

+0

謝謝,聽起來像一個很好的解決方案,將不得不在某個時候嘗試。 – newenglander

相關問題