Эта пресс-конференция “только по приглашениям” состоялась 8 апреля 2010 года в Купертино, по адресу Infinite Loop 4.
На конференции гостям представили следующую версию мобильной операционной системы компании, пообещав выпустить её летом… Вышедший 8 апреля 2010 года Developer Preview новой операционной системы и её SDK, исключительно для официально зарегистрированных разработчиков, назывался iPhone OS 4 Beta.
После этого, с интервалом примерно в 2 недели, вышли еще три бета-версии, и все они назывались iPhone OS 4 Beta X, где X – число от 2 до 4. 7 июня систему переименовали в iOS, а еще через две недели, 21 июня, iOS 4.0 официально вышла в свет.
- То есть, такая операционная система все-таки была. Вот картинка с приглашения:
В самой компании систему уже давно называли словом из трех букв. Только Стив пытался соблюдать закон, и называл систему iPhone OS 4, но даже он один раз оговорился. Другие видимо так и не смогли преодолеть себя. Слова из трех букв непобедимы.
В один из дней между 8 апреля и 7 июня 2010 года (точная дата неизвестна) Apple и Cisco подписали соглашение. Apple получила лицензию на использование торговой марки iOS, права на которую принадлежат Cisco, для обозначения своей мобильной операционной системы. Права на торговую марку “iOS” до сих пор принадлежат Cisco, Apple пользуется ей по лицензии…
Это деcятая часть серии про iPhone и ему подобных, предыдущие части здесь: Первая часть: MacWorld Expo 2007; Вторая часть: Touch-интерфейс приходит на iPod; Третья часть: iPhone для предприятий, iPhone SDK и App Store; Четвертая часть: Леопард переселяется в iPhone.
Пятая часть: Следующий шаг: iPhone 3G, iPhone OS 2.0 и много чего еще…; Шестая часть: iPhone OS 2.1, уже не бета-версия…; Седьмая часть: iPhone OS 3.
0 и поле искажения реальности; Восьмая часть: iPhone 3GS – на 2 грамма легче, в 2 раза быстрее…; Девятая часть: iPod touch третьего поколения, и другие iPod’ы….
Бабочки в животе…
Есть такое выражение в английском языке – “бабочки в животе”, оно обозначает сильное беспокойство. Продажи iPad начинались 3 апреля 2010 года, в 9:00 по местному времени на всей территории США. Месяцы напряжения всех сил и без выходных закончились. От тех кто создавал iPad больше ничего не зависело.
Напряжение и аврал наступили у службы логистики, а у инженеров и менеджеров наступил самый тяжелый и бесконечный период жизни: а вдруг они не прийдут и не купят? Или еще хуже – купят, но какая-нибудь из устраненных проблем iPad вдруг вернется (такое бывает), или проявится что-то еще, ужасное и неприятное, незамеченное разработчиками и тестировщиками?
Пришло время тех самых “бабочек в животе”. Но… 300 000 iPad куплено за первые 24 часа. 8 апреля, на 10 часов утра по тихоокеанскому времени, за пять дней с начала продаж, их уже было продано 650 000. Проблемы были, но другие: не хватало iPad’ов. Объёмы продаж были неожиданностью для самой Apple, никто не ожидал такого ажиотажа. Такого никогда еще не было…
С самими iPad’ами проблем не было, только единичные случаи – и вот пресс-конференция, очередной следующий поворот колеса истории – это я без малейшей иронии.
Пересматривая видеозапись пресс-конференции я заметил кое-что, ускользнувшее от моего внимания в 2010: устройства от Apple все еще были лидерами в Интернете, в сети их было 64%. Меньше чем раньше – но больше все-таки. А вот второе место, с 19%, занимал Android, которого еще полгода назад почти не было видно. Сильный конкурент, и доля его быстро росла. Как раковая опухоль.
Вот видео: (длительность – 00:59:48)
В информации к видео указана неверная дата (пресс-конференция состоялась 8 апреля, а не 11), и система названа iOS 4. Но качество ролика приличное.
iPhone OS 4
В новой версии, как обычно, было более 1 500 новых API и более 100 новшеств на уровне обычного пользователя.
На пресс-конференции рассказали только о семи новых больших новшествах из ста, лишь скользь упомянув некоторые другие. Естественно то, о чем рассказали, было интереснее остальных новшеств, но теперь не терпелось узнать о чем они умолчали. Маркетинг!
Про многозадачность от Apple – чуть ниже. Остальные шесть инноваций были и интересны, и важны – но ни одна из них не была воспринята столь по разному, и не вызывала столько споров.
Папки. Идея простая, и потребность в ней давно назрела – iPhone OS 3.х ограничивала число установленных приложений: их не могло быть больше 180. Больше на 11 страницах домашнего экрана не умещалось.
А пользователи распробовали App Store, и вошли во вкус. Увеличить число страниц было несложно, но и 11 страниц было слишком много. Папки, включающие до 9 приложений, в закрытом виде занимающие место одного приложения. При желании, теперь можно было установить более двух тысяч приложений… или разместить имеющиеся полторы сотни на двух или трех экранах.
По моему, реализация работы с папками в iOS – один из шедевров Apple. Просто, логично и ничего лишнего. Запоминается с первого раза.
Улучшения в почтовом клиенте (ни одного “мимо тазика”), iBooks для iPhone и iPod touch – во многом такая же (программа – значит “она”?), как и на iPad. Game Center – остроумная социальная сеть для игр и развлечений, самая забавная из всех социалок виденных мной.
Масса улучшений для корпоративных пользователей – с особой лицензией для крупных организаций, которые имели право на собственный корпоративный App Store. Круто.
И iAd. Затея почему-то не пошла – а жаль. 85 миллионов iPhone и iPod touch, а в удачной программе пользователи сидят часами. Добавив в приложение поддержку iAd – и все. А заботы о контенте и учете их просмотров берет на себя Apple, она же платит 60% прибыли – создателю приложения, выделившему место для рекламы.
Популярные приложения генерировали бы приличные рекламные поступления, бесплатные приложения могли бы оставаться бесплатными, их авторы покупали бы больше Mac’ов и других устройство от Apple – если захотят, конечно.
Если бы ролики настоящих рекламодателей были такими же увлекательными как примеры рекламной мультимедиа от инженеров и маркетологов Apple, показанные 8 апреля…
Многозадачность
Вечером 8 апреля многие СМИ сообщили, что на пресс-конференции в Купертино Apple объявила о внедрении многозадачности в следующей версии iPhone OS. Процитировали Стива: “как и с Copy-Paste, мы не стремились быть первыми, мы хотели быть первыми кто сделает это (многозадачность) как надо”.
“Apple неспособна реализовать простую и обычную многозадачность, какой позор!” – это обобщенная цитата из многочисленных СМИ того времени. И вот – свершилось?
Нет. Многозадачность невозможно было внедрить в iPhone OS: её поддержка была в этой системе с самого начала. На нескольких уровнях. И использовалась, в системе постоянно трудились несколько процессов, без которых она не смогла бы выполнять свои базовые задачи.
Использовать многозадачность в приложении было легче легкого: механизмов для этого в ней было несколько, один лучше другого. Это было запрещено, для чего были серьёзные и уважительные причины. В приложении предназначенном для нелегальных каналов сбыта многозадачность применялась легко и непринужденно – с ожидаемыми последствиями.
iPhone OS была с нечеловеческой тщательностью сбалансирована, иначе она просто не смогла бы работать. Заряд батареи исчезал бы за минуты, устройство нагревалось и его внутренности выгорали – пока инженеры Apple не добавили в комплекс систему раннего обнаружения перегрева, с принудительным выключением устройства в качестве последней меры защиты.
Тему корректнее было бы назвать “имитация поддержки многозадачности в приложениях при минимальном или нулевом использовании средств многозадачности”. Корректнее, но не правильнее. Стив и Скотт этого и не скрывали, просто не фокусируя внимание публики на вопросах, рассмотрение которых погрузило бы 9/10 присутствующих в спячку.
Термин “многозадачность” можно понимать по разному. У пользователя появились новые возможности – быстрое переключение между приложениями, сохранение приложениями их состояния… Строго говоря, многозадачность в этом почти не участвовала.
В момент переключения на другое приложение, система автоматически фиксировала состояние текущего, и сохраняла его где-то в памяти – и приложение замораживалось.
То есть, оно выключалось – но в списке “фоновых приложений” появлялась его иконка, в любой момент его можно было вернуть к жизни и продолжить с того же самого места.
Fast Application Switching было представлено как седьмой сервис многозадачности. Другие шесть сервисов позволяли ограниченному набору задач выполняться в фоновом режиме, под пристальным контролем системы.
Со временем число сервисов росло, но правила оставались те же: фоновое исполнение задачи могло быть прервано в любой момент. Из-за злоупотреблений самой задачей, но не только.
Причиной мог стать дефицит ресурсов к которому уничтожаемый процесс не имел отношения.
Fast Application Switching был пользовательским интерфейсом “многозадачности” в iPhone OS, и именно он был главным новшеством новой системы. И сделан он был “правильно”.
Начиная с iPhone OS 4 Beta 3, в этом интерфейсе появился способ удаления приложений из списка. Даже в замороженном состоянии приложения занимали место в постоянной памяти, и частичку оперативной – для ускорения процесса “воскрешения”. С тех пор набор функциональностей практически не менялся.
- Критических замечаний было много, от абсолютно идиотских до вполне разумных.
- Не знаю к каким из них отнести вот это: “совместимость приложения с многозадачностью требует его доработки разработчиком” – и это, по мнению процитированного источника, кошмар и ужас, крест на всех преимуществах и тому подобное.
Доля истины в этом замечании была: для совместимости с Fast Application Switching и в самом деле нужно было “переработать”. Собрать для iPhone OS 4 (или для iOS 4). И все.
Для устранения проблемы, начиная с 21 июня (дня выхода iOS 4), в App Store принимали только приложения способные участвовать в Fast Application Switching.
Творцам тех что были размещены в App Store до этого дня отправляли предупреждение: “до такого-то срока устраните несовместимость с FAS, иначе приложение будет удалено из Store”.
Продолжение следует
Обсудить историю Apple вы можете в нашем Telegram-чате.
Как открывать режим многозадачности на iPhone при помощи 3D Touch | Яблык
Традиционно режим многозадачности открывался при помощи двойного нажатия на кнопку Домой. Одновременно с дебютом iPhone 6s, который получил технологию 3D Touch, Apple представила новый, не менее удобный способ переключения между активными приложениями, который пришелся пользователям iOS по душе. В этом материале мы расскажем как этим пользоваться.
Сейчас этот материал как никогда актуален. Всё дело в том, что в iOS 11.0 по каким-то причинам Apple отключила возможность открытия режима многозадачности при помощи 3D Touch.
Знали бы вы, сколько гневных отзывов в сторону компании посыпалось от людей, которые регулярно использовали этот элемент взаимодействия между смартфоном и пользователем. Благо, с релизом iOS 11.
1 всё было исправлено и жест возвратили назад.
Жест 3D Touch может быть использован в контексте меню многозадачности для двух разных ситуаций — открытия самого меню многозадачности и быстрого переключения между приложениями.
Как открыть меню многозадачности при помощи жеста 3D Touch?
Для того чтобы запустить режим многозадачности при помощи жеста 3D Touch необходимо сначала сделать среднее по силе нажатие (50%) по левой грани дисплея (появится черная полоса разделяющая текущее приложение от предыдущего активного), а затем, не отпуская и не убирая с текущей позиции палец, сделать глубокое по силе нажатие (100%). Откроется режим многозадачности. Теперь вы можете отпустить палец и свайпами влево-вправо прокручивать карточки с миниатюрами запущенных приложений в поисках необходимого.
Как быстро переключаться между приложениями при помощи жеста 3D Touch?
Этот жест похож на тот, что мы описывали в предыдущем абзаце, но есть отличие.
Для того чтобы быстро переключиться на последнее активное приложение (запускаемое в предыдущий раз перед текущим), необходимо сначала сделать среднее по силе нажатие (50%) по левой грани дисплея (появится черная полоса разделяющая текущее приложение от предыдущего активного), а затем не отпуская палец сделать свайп до правой грани.
Оба жеста работают по всей левой грани дисплея за исключением области со статус-баром (там отображаются мобильный оператор, часы, заряд аккумулятора и беспроводные подключения), дока и запущенной клавиатуры. Два этих жеста 3D Touch невозможно использовать если устройство находится в альбомной ориентации. Оба жеста работают и с рабочего стола (спрингборда), и с любого запущенного приложения.
Кау устроена iOS
Все в курсе, что мобильные девайсы Apple работают под управлением iOS. Многие знают, что iOS представляет собой облегченную версию настольной Mac OS X.
Некоторые догадываются, что в основе Mac OS X лежит POSIX-совместимая ОС Darwin, а те, кто всерьез интересуется IT, в курсе, что основа Darwin — это ядро XNU, появившееся на свет в результате слияния микроядра Mach и компонентов ядра FreeBSD.
Однако все это голые факты, которые ничего не скажут нам о том, как же на самом деле работает iOS и в чем ее отличия от настольного собрата.
Mac OS X
Операционная система, установленная сегодня на все маки и (в измененном виде) на айдевайсы, ведет свою историю аж с 1988 года, который в мире IT известен также тем, что стал годом выпуска первой бета-версии операционной системы NeXTSTEP. Сама NeXTSTEP была детищем команды разработчиков Стива Джобса, который к тому времени уже покинул Apple и основал компанию NeXT, которая занялась разработкой компьютеров для образовательных нужд.
В момент своего появления на свет NeXTSTEP была поистине передовой операционной системой, которая включала в себя множество технологических новаций. В основе ОС лежало модифицированное микроядро Mach, дополненное компонентами ядра FreeBSD, включая эталонную реализацию сетевого стека.
Более высокоуровневые компоненты NeXTSTEP были написаны с использованием языка Objective-C и предоставляли разработчикам приложений богатый объектно-ориентированный API.
Система была снабжена развитым и весьма удобным графическим интерфейсом (ключевые компоненты которого сохранились в OS X и даже iOS) и мощной средой разработки, включавшей в себя в том числе известный всем современным разработчикам визуальный дизайнер интерфейса.
После провала NeXT и возвращения Стива Джобса в компанию Apple в 1997 году NeXTSTEP легла в основу проекта Rhapsody, в рамках которого началась разработка системы-наследника Mac OS 9.
В 2000 году из Rhapsody был выделен открытый проект Darwin, исходники которого опубликованы под лицензией APSL, а уже в 2001 году появилась на свет OS X 10.0, построенная на его основе.
Спустя несколько лет Darwin лег в основу операционной системы для готовящегося к выпуску смартфона, о котором до 2007-го, кроме слухов, не было известно почти ничего.
XNU и Darwin
Условно начинку OS X / iOS можно разделить на три логических уровня: ядро XNU, слой совместимости со стандартом POSIX (плюс различные системные демоны/сервисы) и слой NeXTSTEP, реализующий графический стек, фреймворк и API приложений.
Darwin включает в себя первые два слоя и распространяется свободно, но только в версии для OS X.
iOS-вариант, портированный на архитектуру ARM и включающий в себя некоторые доработки, полностью закрыт и распространяется только в составе прошивок для айдевайсов (судя по всему, это защита от портирования iOS на другие устройства).
По своей сути Darwin — это «голая» UNIX-подобная ОС, которая включает в себя POSIX API, шелл, набор команд и сервисов, минимально необходимых для работы системы в консольном режиме и запуска UNIX-софта.
В этом плане он похож на базовую систему FreeBSD или минимальную установку какого-нибудь Arch Linux, которые позволяют запустить консольный UNIX-софт, но не имеют ни графической оболочки, ни всего необходимого для запуска серьезных графических приложений из сред GNOME или KDE.
Ключевой компонент Darwin — гибридное ядро XNU, основанное, как уже было сказано выше, на ядре Mach и компонентах ядра FreeBSD, таких как планировщик процессов, сетевой стек и виртуальная файловая система (слой VFS). В отличие от Mach и FreeBSD, ядро OS X использует собственный API драйверов, названный I/O Kit и позволяющий писать драйверы на C++, используя объектно-ориентированный подход, сильно упрощающий разработку.
iOS использует несколько измененную версию XNU, однако в силу того, что ядро iOS закрыто, сказать, что именно изменила Apple, затруднительно.
Известно только, что оно собрано с другими опциями компилятора и модифицированным менеджером памяти, который учитывает небольшие объемы оперативки в мобильных устройствах.
Во всем остальном это все то же XNU, которое можно найти в виде зашифрованного кеша (ядро + все драйверы/модули) в каталоге /System/Library/Caches/com.apple.kernelcaches/kernelcache на самом устройстве.
Уровнем выше ядра в Darwin располагается слой UNIX/BSD, включающий в себя набор стандартных библиотек языка си (libc, libmatch, libpthread и так далее), а также инструменты командной строки, набор шеллов (bash, tcsh и ksh) и демонов, таких как launchd и стандартный SSH-сервер. Последний, кстати, можно активировать путем правки файла /System/Library/LaunchDaemons/ssh.plist. Если, конечно, джейлбрейкнуть девайс.
На этом открытая часть ОС под названием Darwin заканчивается, и начинается слой фреймворков, которые как раз и образуют то, что мы привыкли считать OS X / iOS.
Фреймворки
Darwin реализует лишь базовую часть Mac OS / iOS, которая отвечает только за низкоуровневые функции (драйверы, запуск/остановка системы, управление сетью, изоляция приложений и так далее).
Та часть системы, которая видна пользователю и приложениям, в его состав не входит и реализована в так называемых фреймворках — наборах библиотек и сервисов, которые отвечают в том числе за формирование графического окружения и высокоуровневый API для сторонних и стоковых приложений
INFO
Как и во многих других ОС, API Mac OS и iOS разделен на публичный и приватный. Сторонним приложениям доступен исключительно публичный и сильно урезанный API, однако jailbreak-приложения могут использовать и приватный.
В стандартной поставке Mac OS и iOS можно найти десятки различных фреймворков, которые отвечают за доступ к самым разным функциям ОС — от реализации адресной книги (фреймворк AddressBook) до библиотеки OpenGL (GLKit).
Набор базовых фреймворков для разработки графических приложений объединен в так называемый Cocoa API, своего рода метафреймворк, позволяющий получить доступ к основным возможностям ОС.
В iOS он носит имя Cocoa Touch и отличается от настольной версии ориентацией на сенсорные дисплеи.
Далеко не все фреймворки доступны в обеих ОС. Многие из них специфичны только для iOS.
В качестве примеров можно привести AssetsLibrary, который отвечает за работу с фотографиями и видео, CoreBlueTooth, позволяющий получить доступ к синезубу, или iAd, предназначенный для вывода рекламных объявлений в приложениях.
Другие фреймворки существуют только в настольной версии системы, однако время от времени Apple переносит те или иные части iOS в Mac OS или обратно, как, например, случилось с фреймворком CoreMedia, который изначально был доступен только в iOS.
Все стандартные системные фреймворки можно найти в системном каталоге /System/Library/Frameworks/. Каждый из них находится в своем собственном каталоге, называемом бандлом (boundle), который включает в себя ресурсы (изображения и описание элементов интерфейса), хидеры языка си, описывающие API, а также динамически загружаемую библиотеку (в формате dylib) с реализацией фреймворка.
Одна из интересных особенностей фреймворков — их версионность.
Один фреймворк может иметь сразу несколько разных версий, поэтому приложение, разработанное для устаревших версий системы, будет продолжать работать, даже несмотря на изменения, внесенные в новые версии ОС.
Именно так реализован механизм запуска старых iOS-приложений в iOS 7 и выше. Приложение, разработанное для iOS 6, будет выглядеть и работать именно так, как если бы оно было запущено в iOS 6.
SpringBoard
Уровнем выше находятся приложения, системные и устанавливаемые из магазина приложений. Центральное место среди них занимает, конечно же, SpringBoard (только в iOS), реализующее домашний экран (рабочий стол).
Именно оно запускается первым после старта системных демонов, загрузки в память фреймворков и старта дисплейного сервера (он же менеджер композитинга, он же Quartz Compositor), отвечающего за вывод изображения на экран.
SpringBoard — это связующее звено между операционной системой и ее пользователем, графический интерфейс, позволяющий запускать приложения, переключаться между ними, просматривать уведомления и управлять некоторыми настройками системы (начиная с iOS 7).
Но также это и обработчик событий, таких как касание экрана или переворот устройства.
В отличие от Mac OS X, которая использует различные приложения и демоны-агенты для реализации компонентов интерфейса (Finder, Dashboard, LaunchPad и другие), в iOS почти все базовые возможности интерфейса пользователя, в том числе экран блокировки и «шторка», заключены в одном SpringBoard.
В отличие от других стоковых приложений iOS, которые располагаются в каталоге /Applications, SpringBoard наравне с дисплейным сервером считается частью фреймворков и располагается в каталоге /System/Library/CoreServices/.
Для выполнения многих задач он использует плагины, которые лежат в /System/Library/SpringBoardPlugins/. Кроме всего прочего, там можно найти, например, NowPlayingArtLockScreen.
lockboundle, отвечающий за отображение информации о проигрываемой композиции на экране блокировки, или IncomingCall.serviceboundle, ответственный за обработку входящего звонка.
Начиная с iOS 6 SpringBoard разделен на две части: сам рабочий стол и сервис BackBoard, ответственный за коммуникации с низкоуровневой частью ОС, работающей с оборудованием (уровень HAL).
BackBoard отвечает за обработку таких событий, как касания экрана, нажатия клавиш, получение показания акселерометра, датчика положения и датчика освещенности, а также управляет запуском, приостановкой и завершением приложений.
SpringBoard и BackBoard имеют настолько большое значение для iOS, что, если каким-либо образом их остановить, вся система застынет на месте и даже запущенное в данный момент приложение не будет реагировать на касания экрана.
Это отличает их от домашнего экрана Android, который является всего лишь стандартным приложением, которое можно остановить, заменить или вообще удалить из системы (в этом случае на экране останутся вполне рабочие кнопки навигации и строка состояния со «шторкой»).
Приложения
На самой вершине этой пирамиды находятся приложения. iOS различает встроенные (стоковые) высоко привилегированные приложения и сторонние, устанавливаемые из iTunes.
И те и другие хранятся в системе в виде бандлов, во многом похожих на те, что используются для фреймворков.
Разница заключается лишь в том, что бандл приложения включает в себя несколько иную метаинформацию, а место динамической библиотеки занимает исполняемый файл в формате Mach-O.
Стандартный каталог хранения стоковых приложений — /Applications/. В iOS он абсолютно статичный и изменяется только во время обновлений системы; пользователь получить к нему доступ не может.
Сторонние приложения, устанавливаемые из iTunes, напротив, хранятся в домашнем каталоге пользователя /var/mobile/Applications/ внутри подкаталогов, имеющих вид 4-2-2-2-4, где два и четыре — это шестнадцатеричные числа.
Это так называемый GUID — уникальный идентификатор, который однозначно идентифицирует приложение в системе и нужен в том числе для создания изолированной песочницы (sandbox).
Sandbox
В iOS песочницы используются для изолирования сервисов и приложений от системы и друг от друга. Каждое стороннее приложение и большинство системных работают в песочнице.
С технической точки зрения песочница представляет собой классический для мира UNIX chroot, усиленный системой принудительного контроля доступа TrustedBSD MAC (модуль ядра sandbox.
kext), которая отрезает приложениям не только доступ к файлам за пределами домашнего каталога, но и прямой доступ к железу и многим системным функциям ОС.
В целом заключенное в sandbox приложение ограничено в следующих возможностях:
- Доступ к файловой системе за исключением своего собственного каталога и домашнего каталога пользователя.
- Доступ к каталогам Media и Library внутри домашнего каталога за исключением Media/DCIM/, Media/Photos/, Library/AddressBook/, Library/Keyboard/ и Library/Preferences/.
- Доступ к информации о других процессах (приложение «считает» себя единственным в системе).
- Прямой доступ к железу (разрешено использовать только Cocoa API и другие фреймворки).
- Ограничение на использование оперативной памяти (контролируется механизмом Jatsam).
Все эти ограничения соответствуют sandbox-профилю (набору ограничивающих правил) container и применяются к любому стороннему приложению. Для стоковых приложений, в свою очередь, могут применяться другие ограничения, более мягкие или жесткие.
В качестве примера можно привести почтовый клиент (профиль MobileMail), который в целом имеет такие же серьезные ограничения, как и сторонние приложения, но может получить доступ ко всему содержимому каталога Library/.
Обратная ситуация — SpringBoard, вообще не имеющий ограничений.
Внутри песочниц работают многие системные демоны, включая, например, AFC, предназначенный для работы с файловой системой устройства с ПК, но ограничивающий «область видимости» только домашним каталогом пользователя.
Все доступные системные sandbox-профили располагаются в каталоге /System/Library/Sandbox/Profiles/* и представляют собой наборы правил, написанных на языке Scheme. Кроме этого, приложения также могут включать в себя дополнительные наборы правил, называемых entitlement. По сути, это все те же профили, но вшитые прямо в бинарный файл приложения (своего рода самоограничение).
Просмотреть эти правила можно, например, так:
# cat -tv /Applications/MobileSafari.app/MobileSafari | tail -31 | more
Смысл существования всех этих ограничений двойной. Первая (и главная) задача, которую решает sandbox, — это защита от вредоносных приложений.
Вкупе с тщательной проверкой опубликованных в iTunes приложений и запретом на запуск не подписанных цифровым ключом приложений (читай: любых, полученных не из iTunes) такой подход дает прекрасный результат и позволяет iOS находиться на вершине в списке самых защищенных от вирусов ОС.
Вторая проблема — это защита системы от самой себя и пользователя. Баги могут существовать как в стоковом софте от Apple, так и в головах юзеров. Sandbox защищает от обоих.
Даже если злоумышленник найдет дыру в Safari и попытается ее эксплуатировать, он все равно останется в песочнице и не сможет навредить системе. А юзер не сможет «сломать свой любимый телефончик» и не напишет гневных отзывов в адрес Apple.
К счастью, знающие люди всегда могут сделать jailbreak и обойти защиту sandbox (собственно, в этом и есть смысл джейлбрейка).
Многозадачность
Одна из самых спорных особенностей iOS — это реализация многозадачности. Она вроде бы и есть, а с другой стороны, ее нет.
В сравнении с традиционными настольными ОС и пресловутым Android iOS не является многозадачной операционной системой в привычном смысле этого слова и не позволяет приложениям свободно работать в фоне.
Вместо этого ОС реализует API, который приложение может использовать для выполнения отдельных задач, пока оно находится в фоновом режиме.
Впервые такой API появился в iOS 4 (до этого фоновые задачи могли выполнять только стоковые приложения) и наращивался по мере развития операционной системы. Сегодня (речь идет об iOS 7) так называемый Background API позволяет делать следующее:
- получать информацию о смене местоположения;
- получать push-уведомления;
- планировать отложенный вывод уведомлений;
- запрашивать дополнительное время для завершения работы после перехода в фоновый режим;
- обмениваться данными с подключенными к девайсу аксессуарами (в том числе Bluetooth);
- получать и отправлять данные по сети (начиная с iOS 7).
Такие ограничения на работу в фоне необходимы в первую очередь для того, чтобы сохранить заряд батареи и избежать лагов интерфейса, так знакомых пользователям Android, где приложения могут делать в фоне все что захотят.
На самом деле Apple настолько сильно заботится о сохранении батареи, что даже реализовала специальный механизм для группировки фоновых действий приложений и их запуска в нужные моменты, например тогда, когда смартфон активно используется, подключен к Wi-Fi-сети или к зарядному устройству.
Выводы
Нужно ли выгружать приложения iOS вручную и как работает многозадачность на iPhone и iPad
На iPhone и iPad вы можете запускать несколько программ одновременно. Благодаря многозадачности можно комбинировать функционал нескольких приложений, например, включить запись в «Диктофоне» и открыть какую-либо игрушку.
Запись звука в фоном режиме будет сопровождаться красной панелью в верхней части экрана (видима будет только на домашнем экране). И это лишь один из примеров, который влечет за собой несколько вопросов о том, как же работает многозадачность в iOS.
Давайте попробуем разобраться…
Как принудительно закрыть приложение на iPhone, iPad
Но для начала простой ответ на простой вопрос. Если программа зависла, автоматически закрывается или отказывается нормально запускаться, попробуйте закрыть ее принудительно, а потом вновь запустить.
Для того чтобы посмотреть или закрыть запущенные игры и программы в iOS, необходимо дважды нажать кнопку «Home». Так вы попадете в панель многозадачности, где можно просмотреть все ранее открытие приложения.
Закрытие осуществляется движением вверх по выбранному окну.
В принципе, интерфейс многозадачности в iOS интуитивен и его функционал очевиден. Свайпы влево-вправо перелистывают приложения, а доступ к ним осуществляется касанием.
Закрыть сразу все приложения невозможно, зато можно закрывать по три штуки за раз, смахивая их вверх тремя пальцами.
Как работает многозадачность в iOS
Когда вы выходите из того или иного приложения, нельзя сказать, что оно сворачивается, как это происходит в Windows.
По большому счету приложения в панели многозадачности не работают и практически не потребляют ресурсов вашего iPhone, iPad.
Почему так происходит? Давайте разберем вопрос с технической стороны…
Один из разработчиков iOS в одном из своих материалов технически описывает пять состояний, в которых может находиться приложение;
- активное состояние – в данный момент приложение открыто и используется;
- неактивное состояние – в данный момент приложение открыто, но не используется (например, экран девайса заблокирован);
- состояние фоновой активности – приложение закрыто, но продолжает активность в фоновом режиме;
- приостановленное состояние – приложение закрыто, не проявляет активности;
- нерабочее состояние – приложение было принудительно закрыто или не открывалось вовсе.
Каждое запущенное на iPhone или iPad приложение следует следующему «циклу жизни»:
- Приложение запускают и оно работает в полной мере, потребляя ресурсы вашего гаджета;
- после нажатия кнопки «Home» приложение закрывается, но продолжает вести активность в фоновом режиме еще до 30 секунд;
- если по истечению этого времени приложение не потребовало от iOS возможности работать в фоновом режиме (например, чтобы загрузить большой документ или завершить какую-либо операцию), оно автоматически перейдет в приостановленное состояние, в котором уже не будет потреблять ресурсы устройства, но продолжит занимать место в оперативной памяти;
- приложение уходит в нерабочее состояние в том случае, если вы запустили другую игру или программу, которой требуется больше оперативной памяти.
Другими словами iOS автоматически выгружает неиспользуемые приложения и освобождает занимаемую ими память. Вы спросите, зачем тогда система держит в панели многозадачности все эти приложения, которые не используются. Ответ прост, чтобы пользователь смог быстрее открыть их. Отмечу, что в панели многозадачности будут отображены все запущенные ранее приложения в хронологическом порядке независимо от того работают ли они в фоновом режиме или уже давно выгружены из памяти устройства. В фоновом режиме долгое время позволяется работать не всем приложениям, через 10 минут игра или программа будет принудительно переведено в приостановленное состояние, за исключением тех программ, которые предназначены для фоновой работы – музыкальные программы; приложения отслеживающие ваше местоположение; программы работающие с внешними аксессуарами и так далее…
«Тогда как приходят уведомления тех приложений, которые находятся в выгруженном или приостановленном состоянии?» – спросите вы. Для работы в фоновом режиме разработчиками игр и программ используются специально предусмотренные в Apple API. Коротко расскажу о них так, насколько мне позволяют знания.
- Background Fetch – API работает с приложениями по принципу опроса, который подстраивается под пользователя. Этакая интеллектуальная система оценки фоновой активности. Например, пользователь запускает программу 1 раз в день, механизм адаптируется и проверяет обновления достаточно редко, тем самым практически не «будит» приложение. Если пользователь открывает программу десятки раз в сутки, API будет обращаться к ней чаще. Так же механизм адаптируется под время, в которое пользователь использует приложение, обновляя контент до его открытия.
Помимо этого обновление контаета подстраивается под периоды пониженного энергопотребления вашего девайса, например, в зоне действия Wi-Fi или при подключении к зарядному устройству. - Remote Notification – это самые обычные Push-уведомления. На сервере разработчика регистрируется обновление контаета или чего-либо еще, после этого пользователю отправляется соответствующее Push-уведомление. Данная технология так же практически не увеличивает затраты системных ресурсов приложением, так как оно работает только в тот момент, когда приходит уведомление.
Нужно ли закрывать приложения на iPhone, iPad вручную?
Сложный вопрос, на который можно ответить и «да» и «нет». В большинстве случаев панель многозадачности не отображает перечень запущенных приложений, а показывает перечень недавно использованных приложений. С одной стороны, выгружать вручную смысла нет, так как iOS все делает за вас тогда, когда это необходимо.
А приложения, находящиеся в приостановленном состоянии не израсходуют заряд аккумулятора. Но с другой стороны, многие приложения могут еще 10 минут спокойно работать в фоном режиме, а некоторые и вовсе все время пожирать заряд вашего аккумулятора. Закрыв их вы сократите расход батареи.
Чаще всего приложения, которым дозволено работать в фоновом режиме все время, очень хорошо оптимизированы и не должны создавать для вас проблем, кроме тех, которые используют модуль GPS/Глонасс.
Если вы действительно замечаете, что после принудительного закрытия игр и программ ваш iPhone, iPad работает лучше или аккумулятор израсходуется медленнее, то значит вы используете какое-то приложение, которое очень активно работает в фоновом режиме. Если разницы не замечаете, то и закрывать приложения вручную смысла нет, как я уже сказал выше, iOS все сделает за вас.
Если вы не нашли ответа на свой вопрос или у вас что-то не получилось, а в комментаряих ниже нет подходящего решения, задайте вопрос через нашу форму помощи. Это быстро, просто, удобно и не требует регистрации. Ответы на свой и другие вопросы вы найдете в данном разделе.
Изучение iOS SDK
Хорошее понимание iOS SDK является ключевым моментом при разработке нативных приложений для iOS. Это не только поможет вам выбрать правильные инструменты для решения конкретной проблемы, но также позволит вам не потеряться в десятках платформ, включенных в iOS SDK. В этой статье мы рассмотрим архитектуру iOS и выясним, что работает под iOS-приложениями.
Я уверен, что даже нескольким опытным разработчикам iOS будет сложно определить iOS SDK в одном предложении.
SDK акроним расшифровывается как S разработки программного обеспечения K it.
IOS SDK содержит инструменты и ресурсы для разработки собственных приложений iOS, а это означает, что SDK позволяет разработчикам разрабатывать, устанавливать, запускать и тестировать приложения в симуляторе iOS и на физических устройствах.
Двумя движущими силами, приводящими в действие собственные приложения для iOS, являются Objective-C и системные платформы для iOS. В предыдущей статье мы исследовали язык программирования Objective-C. В этой статье я хочу исследовать фреймворки, которые поддерживают собственные приложения iOS.
Это включает в себя платформы высокого уровня, такие как UIKit и Map Kit , а также платформы, тесно связанные с аппаратным обеспечением, такие как платформы Accelerate и Core Location .
Теперь вы знаете, что такое iOS SDK, но что делает приложение квалифицированным как приложение для iOS? Простой ответ заключается в том, что приложение iOS – это приложение, которое работает на устройстве iOS. Однако это только половина правды. А как насчет веб-приложений, которые запускаются в браузере Safari?
Приложение iOS – это приложение Cocoa, разработанное для платформы iOS. Отлично. Что такое приложение Какао? Приложение с какао определить немного сложнее. Это язык, на котором написано приложение? На самом деле, нет. Это инструменты, с помощью которых создается приложение Какао? Нет. Можно разработать приложение Какао без помощи Xcode.
Apple определяет приложение Какао как приложение, которое состоит из объектов, которые в конечном итоге наследуются от NSObject , корневого класса, объявленного в платформе Foundation, и основанного на среде выполнения Objective C.
В этой статье я хочу сосредоточиться на фреймворках, которые используются для создания нативных приложений для iOS. Если вы хотите узнать больше о среде выполнения Objective C, я рекомендую взглянуть на справочник Apple по Objective C или прочитать Руководство по программированию Objective C.
Платформа Foundation предоставляет второй корневой класс, NSProxy . Тем не менее, вы редко будете использовать его в своих проектах.
Еще одно отличие от веб-приложений, работающих в браузере Safari, заключается в том, что нативные приложения взаимодействуют напрямую с операционной системой iOS и собственными системными платформами iOS.
Операционная система действует как посредник между приложением и базовым оборудованием.
Основным преимуществом этого посредничества или абстракции является то, что нативным приложениям не нужно беспокоиться о будущих изменениях оборудования или спецификаций устройств.
Операционная система предоставляет родным приложениям необходимую информацию о возможностях оборудования (есть ли у устройства камера?) И технических характеристиках устройства (работает ли приложение на iPhone или iPad?).
Архитектура iOS может быть разбита на четыре отдельных уровня:
- Какао Touch
- СМИ
- Основные услуги
- ОС ядра
Эта многоуровневая архитектура иллюстрирует этот уровень абстракции, причем более высокие уровни более абстрагированы, а более низкие уровни более фундаментальны и тесно связаны с аппаратным обеспечением. Само собой разумеется, что слои более высокого уровня полагаются на слои более низкого уровня для некоторых своих функций.
Apple рекомендует в максимально возможной степени использовать платформы более высокого уровня, поскольку они часто являются объектно-ориентированными абстракциями структур более низкого уровня.
Другими словами, уровни более высокого уровня косвенно взаимодействуют с аппаратными средствами через уровни более низкого уровня, которые по своей природе являются более сложными.
Конечно, все еще возможно вернуться к средам более низкого уровня, если структуры более высокого уровня не отвечают вашим потребностям.
Напоминаем, что фреймворк – это каталог, который содержит динамическую разделяемую библиотеку и связанные с ней ресурсы, такие как заголовочные файлы, изображения и т. Д. Фреймворки – это точки доступа к различным системным интерфейсам, таким как адресная книга iOS, устройство Фотопленка и музыкальная библиотека.
В предыдущей статье я писал о Cocoa Touch и его отношении к Objective-C. В этой статье я хотел бы обсудить Cocoa Touch с более функциональной точки зрения, как приложения полагаются на слой Cocoa Touch и какова его роль в архитектуре iOS.
Слой Cocoa Touch – это самый верхний уровень архитектуры iOS. Он содержит некоторые ключевые структуры, на которые опираются нативные приложения iOS, и наиболее известной из них является инфраструктура UIKit .
Слой Cocoa Touch определяет базовую инфраструктуру приложений и предоставляет ряд жизненно важных технологий, таких как многозадачный и сенсорный ввод.
Как я уже упоминал, приложения для iOS в значительной степени зависят от инфраструктуры UIKit. Нативные приложения iOS не могут работать, если они не связаны с UIKit и платформами Foundation.
Платформа UIKit или UIKit адаптирована для платформы iOS. Существует эквивалентная платформа для платформы OS X, называемая Application Kit или AppKit framework.
UIKit предоставляет инфраструктуру для графических приложений iOS, управляемых событиями.
Он также заботится о других основных аспектах, характерных для платформы iOS, таких как многозадачность, push-уведомления и доступность.
Слой Cocoa Touch предоставляет разработчикам большое количество высокоуровневых функций, таких как автоматическая разметка, печать, распознаватели жестов и поддержка документов. В дополнение к UIKit, он содержит, помимо прочего, Map Kit, Event Kit и Message UI.
Чтобы получить полный список всех платформ слоя Cocoa Touch, я бы хотел обратиться к руководству Apple по обзору технологий iOS .
Графика, аудио и видео обрабатываются слоем Media. Этот уровень содержит ряд ключевых технологий, таких как Core Graphics, OpenGL ES и OpenAL, AV Foundation и Core Media.
Слой «Медиа» содержит большое количество платформ, в том числе инфраструктуру «Библиотека активов» для доступа к фотографиям и видео на устройстве, инфраструктуру Core Image для работы с изображениями с помощью фильтров и платформу Core Graphics для 2D-рисования.
Взгляните на руководство Apple по обзору технологий iOS для получения полного списка всех платформ слоя Media.
Уровень Core Services отвечает за управление основными системными службами, которые используют нативные приложения iOS. Слой Cocoa Touch в значительной степени зависит от уровня Core Services для некоторых своих функций. Уровень Core Services также предоставляет ряд незаменимых функций, таких как блочные объекты, Grand Central Dispatch, In-App Purchase и iCloud Storage.
Одним из наиболее полезных дополнений к уровню Core Services является ARC или Автоматическая установка ссылок. ARC – это функция уровня компилятора, представленная в 2011 году с выпуском iOS 5. ARC упрощает процесс управления памятью в Objective-C.
Управление памятью – это тема, которую мы не рассмотрели в этой серии, но важно, чтобы вы понимали основы управления памятью при разработке приложений Какао. Автоматический подсчет ссылок – отличное дополнение, но важно знать, что ARC делает для вас.
Вы можете прочитать больше об управлении памятью в руководстве по языку программирования Objective-C, и я настоятельно рекомендую вам это сделать.
Фреймворк Foundation или Foundation – это еще один важный каркас для приложений iOS и OS X. В следующей статье мы рассмотрим эту структуру более подробно. Платформа Foundation – это не просто набор полезных классов, таких как NSArray , NSDictionary и NSDate .
Foundation предоставляет корневой класс NSObject , который обеспечивает базовый интерфейс для среды выполнения Objective C, а также вводит несколько парадигм, таких как политики для владения объектами. Как и Core Foundation (см. Ниже), Foundation позволяет различным библиотекам и инфраструктурам легко обмениваться данными и кодом.
Другой важной структурой уровня Core Services, тесно связанной с платформой Foundation, является базовая платформа на основе C или Core Foundation. Как и платформа Foundation, она позволяет различным библиотекам и инфраструктурам обмениваться данными и кодом.
Базовая основа имеет функцию, называемую мостовым соединением без взимания платы , которая позволяет заменять объекты Какао на объекты Базовой основы в параметрах функций и наоборот.
Для получения полного списка всех структур уровня Core Services я хотел бы обратиться к руководству по обзору технологий iOS .
Большая часть функциональности, предоставляемой тремя уровнями более высокого уровня, построена на уровне ядра ОС и его низкоуровневых функций. Уровень Core OS предоставляет несколько платформ, которые ваше приложение может использовать напрямую, таких как платформы Accelerate и Security.
Уровень ядра ОС также инкапсулирует среду ядра и низкоуровневые интерфейсы UNIX, к которым ваше приложение не имеет доступа по очевидным причинам безопасности. Однако через библиотеку libSystem , которая основана на C, можно напрямую получить доступ ко многим низкоуровневым функциям, таким как сокеты BSD, потоки POSIX и службы DNS.
Ваш ближайший союзник при разработке нативных приложений для iOS – документация, включенная в iOS SDK. По большей части документация является выдающейся, и она поможет вам освоиться с новой технологией или структурой без особых усилий.
Несмотря на то, что документация доступна онлайн, большинство разработчиков используют браузер документации, который включен в XCode. В Xcode 5, Вы можете найти браузер документации, выбрав Documentation и Справочник по API из меню Window Xcode.
Поскольку вы будете широко использовать документацию, вам может понадобиться несколько сочетаний клавиш, чтобы найти то, что вы ищете в документации. Как я упоминал в предыдущем абзаце, браузер документации обеспечивает легкий доступ к документации. Чтобы быстро получить доступ к документации, нажмите Shift + Command + 0 в Xcode 5.
Во время написания кода в редакторе кода Xcode может быстро стать громоздким переключаться между редактором кода и браузером документации каждый раз, когда вам нужно найти класс или метод.
Есть два решения для эффективного просмотра документации. Всякий раз, когда вы помещаете курсор на имя класса или метода в редакторе кода XCode, инспектор быстрой справки на правой боковой панели показывает сводку соответствующего класса или метода. Сводка содержит несколько полезных ссылок, которые ведут в браузер документации.
Поскольку я обычно скрываю правую боковую панель, когда работаю в редакторе кода, я использую альтернативный метод для отображения документации класса или метода. Всякий раз, когда вы нажимаете клавишу Option и наводите курсор на имя класса или метода, курсоры изменяются на знак вопроса, и имя класса или метода выделяется.
Если щелкнуть имя класса или метода со знаком вопроса, появится новое окно, содержащее ту же сводку, что и инспектор быстрой справки . Нажав на одну из ссылок в окне, вы попадете в браузер документации.
Это быстрый и удобный способ переключения между редактором кода и браузером документации, особенно при работе с двумя мониторами.
Теперь вы должны хорошо понимать iOS SDK и различные уровни архитектуры iOS. Две основные платформы приложения для iOS, UIKit и Foundation, находятся в центре внимания следующих двух частей этой серии.
Эти платформы не только необходимы для каждого приложения iOS, они содержат десятки классов, которые вы часто будете использовать при разработке собственных приложений iOS.