2010-03-12 39 views
1

在iphone安全架構上工作時,我開始知道我可以在iphone中運行其他應用程序的應用程序。參考以下網址http://iosdevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.htmliPhone外殼 - 有沒有?

例如,我可以把一個網站的鏈接與以下超鏈接 SKYPE:// 將導致Skype的運行,並在特定的號碼打電話。現在我在這裏幾乎沒有顧慮。

  • 是否有一個shell在iphone的後臺運行,以便它允許其他應用程序運行基本的應用程序命令。
  • 如果上面的語句是真的,那麼我怎麼能啓用或運行命令直接進入iphone外殼?
  • 如果上面的語句是錯誤的,那麼你能否解釋一下這些命令是如何執行的?
  • 是這部分的iPhone SDK?或本funcationality是iPhone OS
+0

PS:我不是在談論** jailbroken ** iphone :) – 2010-03-12 04:23:51

+2

它是SDK的一部分。您可以要求您的應用程序處理一個URL。當它這樣做時,它會檢查URL的方案並確定* something *。例如,如果該方案是sms://它將打開消息應用程序。你的應用程序也可以有一個方案和URL,在這種情況下,它將打開該應用程序。它不會通過外殼執行命令,除非您將手機越獄安裝一個,否則沒有外殼。 – 2010-03-12 04:28:20

+0

這不是一個真正的編程問題,tho。 – 2010-03-12 04:30:29

回答

5

這是iPhone OS的功能。應用程序將自己註冊爲特定協議的URL處理程序。在這種情況下,Skype應用程序被註冊以處理skype:// URL協議。

  • 應用程序通過其Info.plist中的CFBundleURLTypes項將自己註冊爲協議處理程序。請參閱here
  • 安裝應用程序時,操作系統讀取此密鑰。
  • 只要遇到並點擊該協議的URL,操作系統就會啓動您的應用程序,您的應用程序委託將發送application:handleOpenURL:消息。
  • 然後由您的應用程序正確解碼URL並執行正確的操作。

PS。 Mac OS X中提供了幾乎相同的功能,還可以將URL發送到已運行的應用程序。

+0

是有道理的。最後一個問題。如果我在瀏覽器地址欄中輸入命令skype://,那麼它不起作用(即不打開skype),但如果我在網站上使它成爲鏈接,那麼它工作正常。有人可以解釋嗎? – 2010-03-12 05:57:26

+0

這應該工作,它對我有用。你在什麼操作系統版本? – 2010-03-12 06:07:57

0

alee詢問的是什麼,我想是「mailto://」。當你把它放在瀏覽器的地址欄中時,它什麼也不做,但是如果你把它作爲一個鏈接並點擊它,它就會發送郵件應用程序。爲什麼郵件應用程序有這種行爲?

2

Shell可以用systempopen等。當然催生,因爲應用程序的沙盒,fork()被拒絕,因此外殼不會從任何AppStore的應用程序訪問。

但是,在iPhoneOS上有很多東西在後臺運行。其中之一是SpringBoard.app,這是您在啓動時看到的「主屏幕」。實際上,SpringBoard.app負責更多的東西,而不僅僅是顯示主屏幕,其中之一是接收和發送URL請求。

登記過程已由@Alan描述。但在引擎蓋,當URL請求是由應用程序發出的,會發生以下情況:

  1. 的應用程序,知道自己不能處理特定的網址,電話-[UIKit openURL:]委派打開請求給他人。
  2. UIKit會將URL請求打包到GSEvent(IPC機制)中,然後將其分發到SpringBoard。
  3. SpringBoard,收到此GSEvent,請致電-[SpringBoard applicationOpenURL:]
  4. 這種方法將檢查URL是否正確和安全(例如,像tel://*5005*78283#這樣的東西將被拒絕)。如果它是有效的,將執行該動作(撥打號碼,訂閱日曆,打開應用程序等)