Как создают мобильные приложения? Разбор

Сегодня мы углубимся в вопросы разработки приложений для разных мобильных операционных систем и снова попытаемся понять разницу между iOS и Android?
aka_opex 31 августа 2022 в 08:28

Представьте, что у вас во дворе лежит груда железа, вы произносите заклинание и вдруг это железо оживает и превращается в робота. Раньше такие вещи назывались магией, теперь это называется программированием.

Разработчики при помощи кода, по сути, просто текста, заставляет очень глупое сознание — компьютер или смартфон совершать невероятные вещи. Угадывать наши музыкальные вкусы, отслеживать пульс, управлять умным домом и так далее. Поэтому сегодня мы узнаем, что стоит за этой магией.

Разберемся, что такое среда разработки? Узнаем, чем отличаются приложения под iOS и Android? Что лучше, нативные или кросс-платформенные приложения?
И зададим главные вопросы разработчику!

Где разрабатываются приложения?

Итак, разработать приложение — это примерно как сделать табуретку. Для этого вам потребуется необходимый набор инструментов и помещение, где вы будете пилить свою табуретину. На программистском такое помещение с инструментами называется среда разработки или по-научному IDE.

IDE — Integrated development environment — интегрированная (или единая) среда разработки

Для Android такой средой разработки является Android Studio, а для iOS – Xcode.

Среда разработки – это просто программа, где есть всё что вам нужно для создания приложения. Тут есть:

  • где писать код,
  • где отлавливать баги,
  • встроенный эмулятор, в котором вы можете сразу тестировать приложение,
  • и даже визуальный редактор интерфейса, в котором вы можете двигать всякие элементы интерфейса прям как в PowerPoint.

Окей, двигаемся дальше.

На каких языках пишутся приложения?

Приложения под разные платформы пишут на разных языках программирования. Большую часть кода под iOS пишут на Objective-C и Swift, а под Android на Java и Kotlin.

Swift и Kotlin – это более современные и дружелюбные языки программирования. Эти языки очень похожи, вплоть до того, что некоторые участки кода могут совпадать на 70% и даже больше.

Вот пример функции которая на основе текущего дня и вида погоды создает сообщение о прогнозе.

Интересно, что Swift создан только для разработки под iOS. А вот на Kotlin можно писать под разные платформы, и под Windows, и под Linux, и даже под iOS. Думаю, это одна из причин радости разработчиков, когда Kotlin добавили в Android Studio. Это было на Google I/O в 2017 году.

Из чего состоят приложения?

С языками и средой разработки разобрались. Но из чего состоят приложения, и как они работают изнутри?

Разберем на примере Android.

Тут все приложения состоят из четырёх основных компонентов, это:

  1. Активность (activity)
  2. Сервис (service)
  3. Широковещательный приемник (broadcast receiver)
  4. Поставщик содержимого (content provider)

Чтобы вас сильно не грузить, подробнее остановимся на двух из них: Активностях и сервисах.

Начнем с Активностей. По сути, это основной интерфейс приложения. Это пустое окно, в которое мы запихиваем текст, картинки, кнопки и прочие элементы интерфейса. Как правило, активность занимает полный экран, и по своей сути она похоже на веб-страницу.

Активность может быть одна, либо их может быть несколько. И также как мы можем переключаться между веб-страницами при помощи гиперссылок, мы может переключаться между активностями при помощи специального класса Intent (т.е. намерение), попутно передавая информацию о действиях пользователя, то есть его намерениях.

Каждая Активность имеет свой жизненный цикл. Выглядит он вот так сложно:

Но если упростить, активность может находиться в одном из четырех состояний:

  1. Запущена
  2. На паузе
  3. Остановлена
  4. Уничтожена

А теперь важный момент. Активность, извините за тавтологию, активна только когда пользовательский интерфейс находится на переднем плане. Как только интерфейс другой Активности закрывает собой текущую, первая активность ставится на паузу, или вовсе уничтожается.

Иными словами активность не может работать в фоне. Для этого в Андроиде существует другой компонент — сервис (service)

Сервисы — очень удобная штука. При помощи сервисов в Android очень легко можно реализовать любые фоновые задачи: воспроизведение музыки, скачивание файлов, навигацию и прочее, прочее.

Сложность только одна, можно сильно увлечься с фоновыми процессами и сожрать весь заряд аккумулятора.

iOS и фоновые задачи

А вот в iOS проблемы совсем иного рода. В качестве аналога Сервисов тут есть шутка, которая называется Background Task, то есть буквально фоновая задача.

Вот только все фоновые процессы в iOS строго регламентируются. Разрешены только определенные типы фоновой обработки: типа воспроизведение аудио, если ваше приложение это аудиоплеер, ну или навигация, если вы навигатор или какой-нибудь фитнес-трекер. И то, вам еще предстоит предоставить вескую причину, что вам этот функционал необходим, иначе приложение просто не пройдет строгую проверку Apple.

Из плюсов: вряд ли какое-то приложение сожрет в фоне батарейку на вашем iPhone. Из минусов — вам придется постоянно тыкать в экран пока грузится видосик в Telegram.

Тем не менее, частично такие ограничения можно обойти и реализовать практически тоже самое, что можно сделать на Android.

Иными словами, разработка для iOS и Android очень похожа. Отсюда возникает вопрос, а можем ли мы написать одно приложение, которое будет работать и на iOS и Android? На самом деле можем, но с оговорками.

Когда перед разработчиком стоит задача погнаться сразу за двумя зайцами, то есть разработать приложение сразу под две ОС. У него есть три пути:

  1. Использовать нативную разработку,
  2. Использовать кросс-платформенную разработку
  3. Использовать гибридную разработку.

В чем разница?

Нативные, кросс-платформенные и гибридные разработки

Итак, нативная разработка — это самый прямолинейный, понятный, и при этом, наверное, самый затратный путь.

От англ. native — родной, естественный

В этом случае под каждую операционную систему пишется отдельное приложение с использованием родных для этой системы языков и инструментов, то есть для iOS нативные приложения пишутся в среде разработки Xcode на языках Objective-C и Swift. А для Android используют Android Studio и языки Java и Kotlin.

Нативные приложения считаются самыми быстрыми, надежными и вообще чувствуют себя в родной ОС как дома. Каждое такое приложение, как костюм сшитый на заказ. Из преимуществ — такой костюм идеально сидит, из недостатков — для каждой ОС приходится шить свой отдельный костюм.

Поэтому существует очень манящая идея кросс-платформенной разработки. Представляете, вы пишите один код, который работает на разных платформах. Звучит как настоящая мечта для заказчика. Нужно вдвое меньше разработчиков, вдвое меньше времени и, чисто теоретически, вдвое меньше бюджет. Более того есть масса инструментов, то есть фреймворков, которые позволяют это сделать: React Native, Flutter, Xamarin, Cordova, Ionic, Titanium Appcelerator, Vue Native.

Самые популярные — React Native и Flutter.

Естественно, каждый из таких фреймворков обещает, что их кросс-платформенное приложение будет ничем не хуже нативного, но на практике всё не так.

В большинстве случаев, кросс-платформенное приложение будет работать медленнее нативного, при этом будет больше багов и больше проблем с совместимостью, когда выходит новая версия ОС. Поэтому в долгосрочной перспективе, кросс-платформенная разработка может выйти даже дороже нативной.

Ну а гибридный подход совмещает обе эти идеи, когда какие-то куски приложения пишутся как кросс-платформенные, а какие-то как нативные.

Но какой из этих подходов круче? 

Нативные приложения — приложения, созданные с помощью инструментов, которые предоставляют владельцы ОС. Обычно они выглядят наиболее органично среди «родных» приложений ОС. Но, для каждой системы нужно делать свою версию приложения, так как у всех разные инструменты для создания таких приложений.

Кросс-платформенные приложения создаются с помощью специальных инструментов, которые позволяют запускать один и тот же код на разных платформах. Задумывалось, что это позволит сократить стоимость разработки за счет компромиссного подхода ко внешнему виду приложения и его производительности.

Гибридные приложения сочетают в себе нативные и кросс-платформенные части. Можно сказать, что они являются проявлением длительного, если не бесконечного, поиска баланса между стоимостью разработки приложения и его способностью приносить пользу для бизнеса.

Любое приложение разрабатывается для достижения какой-то цели. При выборе технологий важно учитывать несколько факторов, которые могут быть не всегда очевидны:

  • Можно ли на этой технологии в принципе сделать тот набор фичей, который нужен продукту?
  • Можно ли их отнести к стандартным фичам, которые известно как реализовывать? Насколько часто нам нужно выходить за пределы стандартных фичей? Насколько важен внешний вид приложения?
  • Насколько критичны требования к производительности приложения? Предполагается ли, что оно должно делать какие-то тяжелые вычисления, обрабатывать большие объемы данных, рисовать сложный пользовательский интерфейс?
  • Насколько критична скорость разработки, быстрота найма и стоимость работы разработчиков?
  • Каков риск и насколько он критичен в случае, если владельцы технологии поменяют к ней отношение? Они могут снизить затраты или вообще остановить ее разработку, поменять лицензионную политику, ввести какие-то другие ограничения на ее пользователей.

В качестве примера можно рассмотреть гипотетическое приложение для небольшого обучающего портала. Допустим, есть ребята, которые занимаются созданием обучающих видеокурсов и они хотят сделать приложение для того, чтобы пользователи могли смотреть ролики в пути и без интернета.

Кросс-платформенный подход, например React-Native, тут может отлично сработать. Почему?

А потому что задача не сложная. По сути, надо реализовать ряд достаточно простых фич типа: авторизация, просмотр списка доступных курсов, просмотр самих курсов и их покупка. Поэтому шансов, что что-то пойдет не так на разных платформах очень мало. А сэкономить средств получится прилично. Поэтому кросс-платформа для таких случаев очень логичный подход.

Какой подход использовался при разработке приложения «МойОфис Документы»?

Наше приложение можно рассмотреть как показательный пример нативного приложения. Расскажем подробнее, из чего оно состоит.

Приложение “МойОфис Документы” можно разделить на две части:

  1. Файловый менеджер (ФМ)
  2. Редактор документов

ФМ — это пример классического набора относительно стандартных функций: авторизация, работа с сетью, показ списка объектов с помощью стандартных UI элементов.

Редакторы — совсем другая история. Их «сердцем» является общее ядро, написанное на C++. За счет этого мы получаем полную унификацию того, как выглядят и ведут себя редакторы на всех платформах на которых мы умеем работать. Цена этой унификации конкретно нашего приложения — необходимость работы с C++, языком который сложно назвать стандартным для мобильной разработки. Что интересно, из-за ядра мы вполне можем назвать наше приложение гибридным, т.к. в нем есть кросс-платформенная часть. Разница лишь в том, что в такой кросс-платформе код ядра работает даже быстрее, чем если бы он был написан на наших «нативных» Java и Kotlin.

Помимо ядра у нас есть нестандартные элементы интерфейса, которые так же критичны к производительности. Я люблю приводить в качестве примера логику рендеринга документов. Этот компонент состоит из двух частей: логика ядра, которая рисует содержимое документа в буфер и логика рисования этого буфера уже на экране. Почему так работает — отдельная история, но сейчас важно, что это позволяет нам находить баланс между скоростью рисования содержимого и эффективным потреблением памяти и CPU. (Тут нужно вставить видео в котором включен developer mode в рендеринге, добавит наглядности)

В общем, наше приложение сложно назвать «тривиальным» с точки зрения разработки. У нас есть как стандартные вещи, так и весьма требовательные к производительности компоненты, проблемы в которых наши пользователи замечают очень быстро. Поэтому, мы изначально делаем наше приложение максимально нативным. Это позволяет сконцентрироваться на бизнес-задачах вместо борьбы с кросс-платформенными фреймворками для того, чтобы выжать из них максимум производительности.

Под какую платформу сложнее программировать iOS или Android?

После совместных обсуждений мы пришли к выводу, что сложность именно в работе примерно одинакова. Обе системы сейчас стремительно движутся в общем направлении как по фичам, так и по подходам к разработке (kotlin ~ swift, ComposeUI ~ SwiftUI). Отличия, конечно, остаются, но они не такие значительные чтобы о них говорить в контексте “сложнее-проще”. Другой вопрос, что порог входа в iOS по прежнему выше, чем в Android: вам нужен мак и айфон для того чтобы начать.

А можно ли написать приложение вообще без кода?

На сегодняшний день, действительно, существуют технологии, которые позволяют создавать некоторый вид приложений буквально не написав ни строчки кода. Чтобы понять как это работает можно вернуться к предыдущей теме. На разработку удобнее смотреть не бинарно (нативное или кросс-платформенное), а как на непрерывный процесс поиска наиболее оптимального способа решать бизнес-задачи. Двигаясь от нативной к полностью кросс-платформенной разработке мы также двигаемся по пути абстрагирования от конкретных платформ и ОС к технологиям которые позволяют сфокусироваться только на бизнес-задачах. Зерокодинг — это пример крайнего положения на спектре разработки. Тут вас ждет огромное количество ограничений: внешний вид, потенциально реализуемые фичи, производительность, полная зависимость от конкретной компании. С другой стороны, вы получаете возможность запустить первую версию приложения буквально за выходные. А в некоторых случаях это может быть крайне важно.

Подписывайтесь на МойОфис ВКонтакте, будьте в курсе новостей разработки приложений. 

Установить бесплатные редакторы для решения повседневных задач на домашнем компьютере или мобильном устройстве: ПК, Google Play StoreAppStore

Пора идти в IT?

Сегодня профессия программиста стала, кажется, одной из самых желанных, а рынку требуются новые специалисты. Как и где научиться Java и Frontend?
aka_opex 5 апреля 2022 в 02:23

Учиться никогда не поздно. Эти слова сегодня стали особенно актуальными. За последние несколько лет стало понятно, что при желании можно относительно легко поменять свою жизнь, получив новую профессию.

Кажется, 2022 год станет годом IT в России. В силу внешних и внутренних обстоятельств этот растущий и актуальный сегмент немного меняется, но нет сомнений в том, что он будет продолжать развиваться. Более того в IT точно будут оставаться деньги и будут вливаться инвестиции, в том числе на уровне государства. А это значит стабильная и высокая зарплата, а также льготы.

Например, в марте приняли специальные налоговые льготы для IT-компаний. Для таких компания будет “обнулён” налог на прибыль до конца 2024 года. Также для сотрудников будут снижены страховые взносы до 7,6 процентов. Кроме этого введен мораторий на плановые проверки до конца 2024 года. А также конечно нельзя не отметить отсрочку от армии для сотрудников IT-компаний, причем до 27 лет. Ну и вишенкой на торте является конечно же ипотека, которую айтишники в возрасте от 22 до 40 лет смогут оформить под очень приятные 5%. Но для этого надо соблюсти одно важное условие — уровень дохода в городах-миллионниках от 200 тысяч рублей и от 150 тысяч рублей в регионах. То есть деньги нужны и важны…

Кроме этого стоит отметить также и резкую нехватку специалистов в IT-отрасли. Есть оценки в десятки и даже сотни тысяч айтишников, которые уехали из России в последние месяцы. Рынок уже давно испытывает потребность в новых кадрах и связано это не только с последними событиями и отъездом специалистов. В то же время российский айтишник может получить приятные льготы и достойную зарплату.

Изучение иностранных языков всегда было делом полезным, а изучение востребованных языков программирования и стека, который нужен бизнесу, позволит буквально стереть границы для специалистов. Таким образом, знания и навыки IT могут помочь как в России, так и в мире.

Интересно и то, что по опросам часть айтишников уже решили поменять свою специализацию и перейти в бэкэнд разработку. Соответственно, если учиться новому, то можно начать с Java и Frontend, ведь эти области охватывают одни из самых популярных языков программирования.

Почему Java и Frontend?

Давайте напомним для чего сегодня используют Java и Frontend.

Язык Java используется во многих сферах начиная с e-commerce веб-сайтов и заканчивая приложениями для Android, в научных исследованиях и финансах, играх вроде Minecraft и настольных приложениях. Java-приложения можно найти везде: в «умном» чайнике, Android-смартфоне, компьютере или автомобиле Tesla. Java — универсальный язык, который используют сотни тысяч компаний. И поскольку Java есть практически везде, найти работу, зная этот язык, довольно просто.

Под понятием Frontend подразумевается разработка всего видимого для пользователя интерфейса сайтов и всех функций, с которыми он может взаимодействовать. То есть речь идет о кнопках, тексте, анимациях и других составляющих. Frontend-разработка — это три разных языка: HTML, CSS и JavaScript. В общем, это код и все, что с ним связано.

Идем учиться кодить?

К чему была вся эта долгая преамбула, которую мы начали со слов о том, что учиться никогда не поздно? Кажется, сейчас самое время научиться чему-то новому и изучить новую профессию, которая будет перспективной в ближайшие несколько лет и позволит найти работу не только в России, но, набравшись опыта, планировать переезд в другую страну с почти гарантированным трудоустройством.

И тут мы переходим к основному вопросу — где научиться программировать, как боженька? И в этом моменте появляется Kata Programming Academy, которая ранее называлась Java Mentor. Они существуют с 2015 года, а с 2019 года начали готовить сильных и востребованных разработчиков по модели ISA или “учись сейчас — плати потом”.

За все время выпускниками академии, а следовательно программистами, стало более 1500 человек.

У Kata Academy есть два основных направления — Java и Frontend. Но интереснее другое — оплата за курсы происходит после трудоустройства. То есть вам не нужно платить за свое обучение и брать кредит, специалисты академии гарантируют своим студентом трудоустройства: после этого оплата происходит из фактической зарплаты.

Такой формат давно существует в США и Европе, но в России Kata стали первыми, кто внедрил этот формат в свой Education Tech. Оплата происходит из зарплаты разработчика после вычета налога и составляет 17% от зарплаты. Это не вечный процесс — все рассчитано на 2 года, но все это время ваше развитие и обучение будет продолжаться по программе поддержки. В случае, если выпускник не находит работу, пройдя 30 собеседований (предоставляет письменные отказы от работодателей), в этом случае он ничего не должен. В случае, если человек не справляется, и академия его отчисляет, то студент ничего не платит.

В итоге вы не только обучаетесь программированию, но и можете получить гарантированный результат в виде должности в IT. И главное, для этого не надо брать кредит или тратить деньги.

Стоит отметить, что если вы выберете учебы по модели ISA, то срок обучения будет 8 и 9 месяцев в случае с Java и Frontend, а при обучении с ментором и оплате во время учебы придется потратить 11 месяцев на полный курс и Java и Frontend.

Уровень выпускников Kata Academy на старте оценивается как Junior+/Middle разработчики. И по опыту — все прошедшие обучение получают работу в первый месяц после выпуска. При этом предложение не одно, а три-пять, так что можно будет выбирать работу, исходя из интереса к проекту, команде и бонусов, которые вам также могут предложить.

В Kata Academy есть и другие сильные стороны:

  1. Интенсивное обучение и контроль знаний от ментора после пройденной темы.
  2. Опыт разработки в реальном проекте.
  3. Подготовка к собеседованиям и помощь в составлении резюме.
  4. Активное и дружное сообщество студентов и выпускников.
  5. А также кроме трудоустройства в IT гарантия зарплаты минимум от 100 тысяч рублей на Java и 80 тысяч на Frontend. Чаще всего зарплатные цифры уже на старте выше.

Поступить в Kata Academy несложно, но надо понимать, что вам придется приложить чуточку усилия, желание тоже важно. Вас будет ждать входное тестирование, то есть вам нужно обладать минимальной базой знаний или быть готовым ее изучить. Тестовое задание важно для проверки мотивации и заинтересованности потенциального студента. После этого проходит онлайн-собеседование. Если у вас есть знания и мотивация, то вас зачисляют на ближайший поток. Кстати, в одной группе обучаются 10-12 человек под присмотром наставника.

Кроме этого нужно быть готовым к переезду в Москву или Санкт-Петербург. Это обусловлено тем, что в столичных городах больше вакансий и зарплата, в среднем, на 30% выше, чем в регионах. А в перспективе профессиональный рост будет происходить быстрее, чем в регионах.

Важно сказать, что на рынке IT-образования сегодня также большая конкуренция, но мало, кто из курсов может гарантировать результат. Платформы и курсы получают вознаграждение сразу и они заинтересованы лишь в привлечении новых студентов, чаще всего никак не решая вопрос с трудоустройством. В случае Kata доход зависит от того, на какую зарплату устроится выпускник, и как быстро он будет расти по карьерной лестнице. Поэтому во время обучения академия внимательно контролирует процесс успеваемости, чтобы выпускник вышел конкурентоспособным специалистом, со знаниями соответствующими рынку труда.

Как проходит обучение в Kata Academy?

Во-первых, надо сказать, что обучение проходит интенсивно и надо быть готовым учиться минимум 25 часов в неделю. Более того академия обещает самурайский подход в обучении программированию: по итогу должны выходить самостоятельные бойцы с кодом.

Все студенты обучаются на образовательной платформе, изучают теорию, решают задания, а ментор контролирует усвоение материала после каждого пройденного блока и также проводит ревью кода.

После завершения теоретического блока все студенты участвуют в проекте. Он может быть коммерческим или некоммерческим. Всего таких проектов более двадцати. Но каждый из них направлен на знакомство студентов с настоящей боевой средой, где у тебя есть тимлид и распределение ролей и задач в команде.

После этого блока ученики проходят подготовку к собеседованиям, во время которой освежают весь пройденный материал. Затем готовятся к ответам на непростые вопросы от HR и составляют резюме. Таким образом, на рынок они выходят сильными самостоятельными и востребованными специалистами.

С одной стороны Kata Programming Academy — это не самый быстрый способ обучения программированию. С другой стороны на самостоятельное изучение может уйти пара лет, а в университете программированию учат все пять лет. При этом подход Kata Academy — качественный и гарантирует ваше трудоустройство в будущем и при желании — хорошую зарплату и крутые перспективы, в том числе международные. Не это ли главное сегодня?

Google откажется от Java API в Android N

Илья Рябов 30 декабря 2015 в 02:54

Люди только начали забывать об ужасах патентных войн, но на бывших полях сражений ещё чувствуется запах пороха. Одним из затянувшихся поединков стала судебная тяжба между Google и Oracle — юристы компаний регулярно встречаются в суде с 2010 года.

Android Java

В результате разбирательств поисковой гигант принял решение перевести Android на другой программный интерфейс, чтобы избежать патентных претензий.
(далее…)

Oracle намерена снова судиться с Google

Sleepp 15 февраля 2013 в 04:02

Вчера стало известно о том, что компания Oracle обратилась в апелляционный суд США с требование пересмотреть дело, в котором она обвиняет Google в незаконном использовании Java в Android.

 Oracle и Google

Напомним, что в 2010 году Oracle подала на интернет-гиганта в суд за неправомерное использование кода Java, и спустя почти два года выиграла дело. Правда, вместо одного миллиарда долларов компания Лари Эллисона получила всего 150 тысяч.
(далее…)

Oracle vs Google: Присяжные вынесли вердикт

Sleepp 10 мая 2012 в 09:11

Судебная тяжба тянулась на протяжении долгого периода времени и сейчас все же наметились сдвиги. Присяжные признали Google виновным лишь по одному пункту из четырех представленных, согласно которому поисковый гигант позаимствовал у Oracle девять строк Java кода и использовал их при разработке Android.

Oracle vs Google: Присяжные вынесли вердикт

Благодаря тому, что вина доказана лишь в одном пункте, сумма компенсации будет значительно меньше, чем предполагалась ранее, а именно не 1 млрд. долларов, а около 150-200 млн. Возникает вопрос, почему при огромных прибылях и наличных средствах, компания Google не пожелала заплатить за право использовать Java. (далее…)

Google готов признать нарушение патентов Oracle?

vedensky 21 июля 2011 в 01:19

Около года назад компания Oracle подала судебный иск на Google, обвинив Android в нарушении 7 патентов, касающихся Java, и потребовав компенсации в размере 2,6 миллиарда долларов. Тогда подобное требование не было воспринято поисковиком всерьез и было названо «поразительным» («breathtaking»). Сегодня же стало известно о некоторых интересных подвижках в этом громком деле.

В среду обе стороны подали в суд официальные бумаги о проведении повторной экспертизы. Скорее всего, это затянет процесс и приведет к пересмотру исковых сумм. Зато такой ход можно считать первым официальным шагом к примирению со стороны Google. (далее…)