Оболочка может порождаться с system
или popen
и т. Д. Конечно, поскольку приложения находятся в «песочнице», fork()
отклоняется, поэтому оболочка не будет доступна из любых приложений AppStore.
Однако на iPhoneOS в фоновом режиме работает много всего. Одним из них является SpringBoard.app , который является «домашним экраном», который вы видите при запуске. На самом деле SpringBoard.app отвечает за гораздо больше вещей, чем просто отображение домашнего экрана, одним из них является получение и доставка URL-запросов.
Процесс регистрации описан @ Alan . Но под капотом, когда приложение выдаст URL-запрос, произойдет следующее:
- Приложение, зная, что не может обработать определенный URL, вызывает
-[UIKit openURL:]
, чтобы делегировать открытый запрос другим.
- UIKit упакует запрос URL в GSEvent (механизм IPC), а затем отправит его в SpringBoard.
- SpringBoard, получив это GSEvent, вызывает
-[SpringBoard applicationOpenURL:]
.
- Этот метод проверяет правильность формы URL и его безопасность (например, такие как
tel://*5005*78283#
будут отклонены). Если оно действительно, действие будет выполнено (наберите номер, подпишитесь на календарь, откройте приложение и т. Д.)