В мобильной разработке есть две основных операционных системы, которые сильно отличаются друг от друга, и не только языками программирования. В начале пути достаточно сложно разрабатывать проект одновременно на Android и iOS. Но лучше разобраться в базовых подходах к обеим платформам, узнать, в чем они схожи и различны, какие нюансы стоит учитывать.
Илья Богин, эксперт программы ускоренного онлайн-бакалавриата «Фронтенд и мобильная разработка» от Яндекс Практикума и ИТМО, руководитель Школы Мобильной Разработки Яндекса, рассказывает, чем отличается работа мобильного разработчика для iOS и Android, а также какие есть тренды в этих направлениях.
Подготовка среды для разработки
Android и iOS из года в год сближаются всё сильнее как по возможностям, так и общим подходам. Несмотря на это, всё ещё остаются принципиальные моменты, которые меняются очень медленно или не меняются совсем. Они и создают ту большую разницу, которая сейчас присутствует между двумя платформами.
Каждый проект начинается с подготовки среды для разработки. Android многим покажется более привлекательным из-за отсутствия жесткой привязки к платформе. Можно программировать на Windows, Mac, Linux — ограничений здесь нет.
iOS в этом плане более замкнут и ограничен. Вы не можете взять Windows и попробовать создать приложение на iOS. Для начала разработки вам понадобится техника от Apple, которая может обойтись в круглую сумму. Либо можно попробовать Hackintosh устройства — компьютеры, на которых установлена операционная система Apple, отличная от устройств компании.
Работа с многопоточностью
Android-разработка стоит на двух языках: Java и Kotlin, а для iOS нужно понимание Swift или Objective-C. Они сильно различаются, но в целом это лишь инструмент, к которому нужно приспособиться — эти языки не ограничивают ваши возможности. Поэтому не стоит выбирать платформу, опираясь только на Java или Swift.
Принципиальные отличия проявляются на уровне многопоточности. iOS, например, предоставляет вам только один процесс, и вы не можете создавать дополнительные. В то же время Android дает больше свободы и возможность строить многопроцессные системы. На практике такие системы обеспечивают большую изолированность, а следовательно и надежность. Это значит, что если в рамках одного дополнительного процесса что-то пошло не так, то он просто перезапустится основным.
Второй важный момент — изолированность с точки зрения безопасности. Процессы не могут иметь доступа к адресному пространству друг друга. Поэтому, если в одном процессе появилась уязвимость, то это не распространится на другой функционал. Например, многопроцессный подход используют все современные браузеры, что делает их более защищенными и надежными.
Работа в фоновом режиме
Если мы говорим про работу приложения в фоновом режиме, то и тут Android показывает себя более дружелюбной платформой. Приложение может работать даже в те моменты, когда пользователь не взаимодействует с ним напрямую — оно может в этому время что-то мониторить, исправлять, посылать или получать данные. Это позволяет, например, выстраивать более сложные системы с комплексными сценариями. В iOS, если пользователь переключил внимание на другое приложение, текущее будет зафрижено за исключением определенного набора ограниченных кейсов. Это ограничивает разработку, заставляя искать обходные пути .
Процессы разработки
Также в Android есть возможность получить полный доступ к устройству, если пользователь дает на это согласие. На основе телефона можно строить сложные и защищенные системы. Например, можно сделать автоматизированное рабочее место, где есть определенный набор строгих функций. На iPhone вы не сможете изменить поведение системы, даже если это необходимо.
Еще одно важное преимущество Android — возможность выпустить свое устройство с видоизмененной системой, которая будет совместима с большинством мобильных приложений. То есть вы можете создавать свои устройства и вносить изменения на уровне операционной системы. А с iOS клиентские устройства не имеют возможности получить доступ к таким системам.
Тестирование и установка приложения
Наступает момент, когда вы уже разработали приложение и готовы показать его коллегам или заказчикам. И тут снова сильно сказывается различие между операционными системами.
На Android вам достаточно собрать бинарный файл в формате APK и переслать его любым способом: мессенджером или почтой. После этого вы можете его установить — всё очень просто. Человек сразу посмотрит на ваше творение и даст фидбэк.
С iOS и тут всё гораздо сложнее. Ваше приложение нельзя так просто переслать. Для этого вам нужен телефон, добавленный в developer-программу. Придется получить разрешение для конкретного человека, чтобы у него был доступ к установке. Другие способы установки приложения до выкладки в AppStore (Testflight, Enterprise program) также имеют свои дополнительные ограничения .
Установка приложения через стор
Здесь сказывается та же разница между открытостью Android и закрытостью iOS. На Android можно установить приложение не только через Google Play Market, но и через альтернативные сторы, например AppGallery, Galaxy Store, GetApps, RuStore. У вас есть возможность выложить приложение на все сторы или только в нужный набор.
На iOS система жестко замкнута. Есть только AppStore, где нужно отвечать всем требованиям Apple. Но сейчас в Европе принят The Digital Markets Act, согласно которому с 2024 во всех операционных системах должны работать third party сторы, типа того же GetApps или RuStore. Поэтому возможно через год ситуация поменяется, но пока изменений от Apple в этом плане нет.
А в чём же тогда хорош iOS?
Однако на практике минусы имеют и обратные положительные моменты. Закрытость iOS дает значительно меньшую фрагментированность и большую скорость обновлений операционной системы. Одна из главных проблем Android — наличие очень длинного хвоста старых версий операционной системы. Многие предпочитают не обновлять систему, потому что им это просто не нужно. Это создает определенные трудности при разработке приложения. Если вы спросите людей, какую версию они используют, то поймете, что почти у каждого она разная. Эта распределенность может доходить до того, что один человек до сих пор будет находиться на версии 4.4, а другой уже на 12.0 — это огромная разница, которая затрудняет разработку и поддержку приложения. Во многом это связано с тем, что некоторые телефоны даже не поддерживают функции обновления, ведь продавцам проще выпустить новый телефон со свежей версией Android, чем обновлять систему на старых устройствах.
В iOS всё контролируется Apple. Покупая телефон, вы можете быть уверенным, что 4-5 лет вы будете получать самые актуальные обновления. Как разработчик, вы знаете, что большая часть аудитории перейдет на новую версию. У Android такой гарантии нет, хотя Google активно работает над тем чтобы это исправить и улучшить
На iOS у вас также гораздо меньше разница между девайсами из-за того, что Apple контролирует свои физические устройства. Общий подход к архитектуре и единый производитель гарантируют стандартизованное и предсказуемую работу как фреймворков так и непосредственно аппаратных возможностей. Устройства на Android производит гигантское количество вендоров — здесь гарантий ждать не приходится. Поэтому в iOS гораздо проще убедиться, что приложение будет корректно работать у всех ваших пользователей из-за надежности и меньшей фрагментированности платформы.
Доступ приложений к аппаратным возможностям и персональным данным
iOS достаточно строг к тому, какие доступы имеет приложение и к какому объему данных. Сейчас Android также «закручивает гайки», приближая уровень контроля пользователя к iOS. В этом плане обе операционные системы уже достаточно близки друг к другу. Раньше в Android при установке приложения вы получали длинный список необходимых ему прав доступа, и среди них могли быть те, которые имели право отправлять за пользователя смс или звонить куда-то без его ведома. Таких кейсов в Google Play было очень много, но сейчас Android гораздо серьезнее относится к подобным вещам и работает более гранулярно.
Для начинающих разработчиков Android выглядит намного дружелюбнее и доступнее iOS. На Android можно начать разработку с любого устройства, а распространение приложений гораздо легче. Операционная системы также дает больше возможностей для проработки многопроцессных систем и даже создания собственного кастомного устройства.
Однако, у и iOS есть свои преимущества. Несмотря на закрытость системы, Apple тщательно следит за обновлениями всех своих устройств. Вы можете быть уверены, что большинство ваших пользователей будут находиться на самых последних версиях. В таком случае разработчикам будет проще отлаживать и тестировать работоспособность приложения. Если вы предпочитаете предсказуемость и меньшую фрагментированность, то, скорее всего, это ваш вариант.
Освоить одну из двух специализаций можно на нашем онлайн-курсе «Фронтенд и мобильная разработка». Обучение дает базовые и продвинутые знания о разработке на iOS и Android. Так, при изучении Android вы узнаете о принципе многопоточности и такие языки программирования, как Java и Kotlin. А при обучении на iOS познакомитесь с основами Swift, клиент-серверными взаимодействиями и другими нюансами, характерными для платформы.