iPhone Shell - есть ли? - PullRequest
       13

iPhone Shell - есть ли?

1 голос
/ 12 марта 2010

Работая над архитектурой безопасности iphone, я узнал, что могу запускать приложения из других приложений в iphone. ссылаясь на следующий URL http://iosdevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.html

например, я могу разместить ссылку на веб-сайте со следующей гиперссылкой скайп: // в результате скайп запустится и позвонит по определенному номеру. Теперь у меня есть несколько проблем здесь.

  • есть ли в iphone фоновая оболочка, позволяющая другим приложениям выполнять основные команды приложения.
  • если приведенное выше утверждение верно, то как я могу включить или запустить команды непосредственно в оболочке iphone?
  • если приведенные выше утверждения ложны, то не могли бы вы объяснить, как выполняются эти команды?
  • это часть iPhone SDK ? или эта функция iPhone OS

Ответы [ 3 ]

5 голосов
/ 12 марта 2010

Это функциональность iPhone OS . Приложения регистрируют себя как обработчики URL для определенных протоколов. В этом случае приложение Skype зарегистрировано для обработки протоколов Skype: // URL.

  • Приложение регистрируется как обработчик протокола через ключ CFBundleURLTypes в своем Info.plist. Смотри здесь .
  • ОС читает этот ключ, когда ваше приложение установлено.
  • Каждый раз, когда URL-адрес этого протокола встречается и включается, ОС запускает ваше приложение, и вашему делегату приложения будет отправлено приложение application: handleOpenURL: .
  • Тогда ваше приложение должно правильно декодировать URL-адрес и выполнить правильное действие.

PS. В Mac OS X имеется практически идентичная функциональность, с дополнительной возможностью отправки URL-адресов уже запущенным приложениям.

2 голосов
/ 12 марта 2010

Оболочка может порождаться с system или popen и т. Д. Конечно, поскольку приложения находятся в «песочнице», fork() отклоняется, поэтому оболочка не будет доступна из любых приложений AppStore.

Однако на iPhoneOS в фоновом режиме работает много всего. Одним из них является SpringBoard.app , который является «домашним экраном», который вы видите при запуске. На самом деле SpringBoard.app отвечает за гораздо больше вещей, чем просто отображение домашнего экрана, одним из них является получение и доставка URL-запросов.

Процесс регистрации описан @ Alan . Но под капотом, когда приложение выдаст URL-запрос, произойдет следующее:

  1. Приложение, зная, что не может обработать определенный URL, вызывает -[UIKit openURL:], чтобы делегировать открытый запрос другим.
  2. UIKit упакует запрос URL в GSEvent (механизм IPC), а затем отправит его в SpringBoard.
  3. SpringBoard, получив это GSEvent, вызывает -[SpringBoard applicationOpenURL:].
  4. Этот метод проверяет правильность формы URL и его безопасность (например, такие как tel://*5005*78283# будут отклонены). Если оно действительно, действие будет выполнено (наберите номер, подпишитесь на календарь, откройте приложение и т. Д.)
0 голосов
/ 12 марта 2010

То, о чем Эли спрашивает, я думаю, это "mailto: //". когда вы помещаете это в адресную строку браузера, оно ничего не делает, но если вы помещаете это как ссылку и нажимаете на нее, запускается почтовое приложение. почему почтовое приложение имеет такое поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...