iPhone外壳 - 有没有?

时间:2010-03-12 04:22:34

标签: iphone shell

在开发iphone安全架构时,我开始知道我可以在iphone中运行其他应用程序的应用程序。参考以下网址http://iosdevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.html

例如,我可以在具有以下超链接的网站中放置链接     SKYPE:// 将导致skype运行并调用特定号码。现在我几乎没有担心。

  • 在iphone中有后台运行的shell,因此它允许其他应用程序运行基本的app命令。
  • 如果以上陈述为真,那么我如何直接启用或运行命令到iphone shell?
  • 如果以上陈述是假的,那么请您解释一下这些命令是如何执行的?
  • iPhone SDK 的一部分吗?或者这个功能是 iPhone OS

3 个答案:

答案 0 :(得分:5)

这是 iPhone OS 的功能。应用程序将自己注册为特定协议的URL处理程序。在这种情况下,Skype应用程序已注册处理skype:// URL协议。

  • 应用程序通过其Info.plist中的CFBundleURLTypes键将自身注册为协议处理程序。见here
  • 安装应用程序时,操作系统会读取此密钥。
  • 每当遇到并触发该协议的URL时,操作系统将启动您的应用程序,您的应用程序代表将发送application:handleOpenURL:消息。
  • 然后由您的应用程序来正确解码URL并执行正确的操作。

PS。 Mac OS X中提供了几乎相同的功能,还可以将URL发送到已经运行的应用程序。

答案 1 :(得分:2)

可以使用systempopen等来生成shell。当然,由于应用程序是沙盒,fork()被拒绝,因此无法从任何AppStore应用程序访问shell

然而,iPhoneOS背景中有很多东西在运行。其中一个是 SpringBoard.app ,这是你在启动时看到的“主屏幕”。实际上SpringBoard.app负责的不仅仅是显示主屏幕,其中一个是接收和发送URL请求。

@Alan描述了注册过程。但在幕后,当应用程序发出URL请求时,将发生以下情况:

  1. 知道自己无法处理特定网址的应用会调用-[UIKit openURL:]将开放请求委托给其他人。
  2. UIKit会将URL请求打包成GSEvent(IPC机制),然后将其发送给SpringBoard。
  3. 接收此GSEvent的SpringBoard调用-[SpringBoard applicationOpenURL:]
  4. 此方法将检查网址是否格式正确且安全(例如,tel://*5005*78283#之类的内容将被拒绝)。如果有效,将执行操作(拨打号码,订阅日历,打开应用程序等)。

答案 2 :(得分:0)

我猜,alee所询问的是“mailto://”。当你把它放在浏览器地址栏中时它没有做任何事情,但是如果你把它作为一个链接并点击它,它会在邮件应用程序中运行。为什么邮件应用程序有此行为?