🔥

Тред (Алексей Гладков)


Всем привет. Сегодня хотел бы немножко рассказать как это - работать на две платформы сразу в ретроспективе моей собственной жизни. Как я уже писал во вступлении, я сразу начали писать на двух платформах. А вернее даже на 4х - iOS, Android, Windows Phone, Web

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

Первым шоком для меня стало то, что помнил я разработку по Delphi 7, а там был нехилый такой для того времени тулинг. Например, можно было реально верстать через UI, то есть накидывая компоненты на канвас и располагая их относительно друг друга. Даже iOS сейчас так не умеет

Я очень долго пытался воспользоваться именно UI редактором, но потом плюнул и попытался сам все сделать в xml. Курсов не было, моего канала на ютубе тоже :D, поэтому я все искал по вопросам в stackoverflow и бешено экспериментировал. Как по мне это мне до сих пор помогает

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

Так вот, когда я вроде только разобрался с Android, вернулась моя девушка (теперь уже жена) из Америки с новеньким макбуком. И иногда мне даже удавалось им завладеть и поставить на него XCode. В iOS все тоже было непросто, пришлось учиться всему заново.

Delphi и здесь сыграл злую шутку и я начал со сторибордов. Пожалуйста, не пользуйтесь сторибордами ) Но, самое важное, что я понял- не такая уж великая разница между двумя платформами. В целом вся логика оставалось единой (а ведь ObjC от Java отличался сильнее чем Kotlin и Swift)

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

В 2017-2018 году я очень много работал над тем, чтобы делать копии Андроид приложений в АппСтор, либо наоборот. Тогда произошел мой основной буст и я понял, что основных отличий между iOS и Android три. Первое это memory model. Да в iOS - RefCount GC, а в Android - Tracing GC

Второе - это дизайн система и все, что связанно с UI. Хотя когда я работал в те года почти все тащили иосный дизайн в андроид.. Господи, дизайнеры, если вы меня читаете - WHYY? Зачем вы так делаете? Сейчас стало вроде получше, но все равно я часто вижу паттерны иос в андроид

Третье это то, что в iOS как правило все есть из коробки, а в Android нужно допиливать. Хочешь сохранять стейт при переключении табов? - допили, списки с хедерами и футерами? - допили, хочешь норм навигацию? - допили. И так далее. Все! Остальное +- похоже, либо вообще одинаковое

Поэтому я так обрадовался кмм, наконец-то можно взять и запилить все что одинаковое на одном языке. Причем мне одинаково нравится и Swift и Kotlin. Причем во многих аппках коммонизация достигает 90%. То есть вот эти 10% и есть то чем отличается iOS от Android.

Кстати, если интересно про КММ - пиши и я напишу про него тред. А еще я незаслуженно забыл про Windows Phone. Вообще это было крайне интересно. С# был намного больше похож на джава, чем ObjC, однако, это было вообще не то. Вот прям все по другому как будто.

Мораль сей басни такова - учите концепции и подходы, а не языки и у вас не будет проблем с тем, чтобы сделать что угодно. А еще, пользуясь случаем, если вы пишите под одну платформу просто напишите, почему вы не пишите под обе? Реально интересно

Алексей ГладковАлексей Гладков