iOS разработчик, который делится фишками, своим опытом и опытом других.
В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки
Авторский канал, iOS разработка
Погружаемся в Observation: введение, принципы и примеры использованияНовый фреймворкObservation создали с целью уменьшить ненужные обновления во вьюхах SwiftUI, тем самым повышая производительность приложений.
Он представляет следующие возможности:
1️⃣ Маркировка типа как observable (наблюдаемого).
2️⃣ Отслеживание изменений в экземпляре такого типа.
3️⃣ Наблюдение и использование этих изменений в другом месте, например, в пользовательском интерфейсе приложения.
Для более детального знакомства я выбрал две обширных статьи с примерами:
📖 Обзорный материал, для чего необходим этот фреймворк: как объявлять оъекты Observable, разбор решаемых проблем с производительностью и примеры.
📖 Гайд, как перенести ObservableObject в Observable.
@iOS Dev
Мой опыт разработки пет-проектов
Возможно, вы читали пост, в котором я писал, что создаю приложения с 2011 года. За это время до стора добрались три десятка, из которых так или иначе до сих пор там примерно двадцать. Около половины из них на Objective-c, другая же часть на Swift, а виджеты/приложения для часов уже на SwiftUI. Ха-ха, а ещё у меня есть одно на Kotlin.
Хочу поделиться с вами своими мыслями про то, для чего это всё было (и будет).
🔘 Доведённый до конца проект это важно. На работе встречаются сложные задачи, требующие усидчивости, нескольких подходов, иногда даже пересмотра таски под другим углом.
🔘 Мои приложения — не основной источник дохода. Скорее рассматриваю их как способ узнать что-то новое, попробовать какие-то архитектуры, или, например, попытаться написать проект только c использованием фреймворка Texture.
🔘 Вопросы ревьюеров помогут вам аргументировать свою позицию и отстаивать свои решения. Хотя периодически с ними нужно будет соглашаться 😎.
🔘 Иногда что-то даже может выстрелить. Когда-то у меня был клиент для ВК, а сам ВК тогда выпилили за авторские права на музыку, и в течение нескольких дней случилось около 50 000 установок (для меня это много).
🔘 Чаще пользователи молчат, когда их всё устраивает. Но как только что-то пойдёт не так, будьте готовы получить десяток гневных отзывов (всё, как в обычной жизни). На работе ведь тоже иногда случаются сложности при обновлении, верно?
🔘 Ваши проекты — это один из лучших способов рассказать (и показать), что вы умеете. Но, конечно, далеко не единственный.
🔘 Вложенное время, силы и деньги не окупятся напрямую. Скорее всего, никогда, будьте готовы к этому. Фактически, вам может повезти занять узкую нишу либо ресурсы позволят подключить продвижение, тогда шансов будет больше.
🔘 Когда начинаю новый проект, то стараюсь фокусироваться на одной функции. Для этого можно представить, что это фича, которую вам нужно реализовать в спринте.
🔘 Я учусь. В том числе и создавать дизайн, даже участвовал в паре конкурсов скетча, но безрезультатно. Для чего? Когда вы пробуете сделать правильно и по гайдлайнам, вы сможете лучше понимать дизайнеров-коллег и их мысли, хотя это и не всегда получается.
🔘 Про аудиторию. У меня есть приложение, которое не пользуется особым успехом (про составление слов), но там есть один пользователь, который играет в него уже 5 лет, и периодически пишет отзывы. Это невероятно круто, когда ваше приложение кому-то интересно. К сравнению, нишевый знаток скачали около 40к человек за всё время, и периодически на разных турнирах я встречаю пользователей, это забавно 🙂
В целом было множество разных ситуаций, и пусть никаких ощутимых средств приложения мне так и не принесли, но сказать, что я жалею об этом, будет преувеличением.
Пробуйте. Но всегда старайтесь найти баланс между личным временем, творчеством и перфекционизмом.
@iOS Dev
Swift OpenAPI Generator: генерация кода для клиента и сервера с помощью инструмента AppleSwift OpenAPI Generator от Apple — это плагин SwiftPM, в который можно передать OpenAPI-док и сгенерить либо клиентский код для выполнения HTTP-запросов, либо код сервера для обработки этих вызовов.
Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.
📖 В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.
🛠 Сам репозиторий на github.
@iOS Dev
Зарплаты мобильных разработчиков по данным Хабр Карьера
Появились результаты нового исследования, в котором есть распределение вакансий и по квалификации.
Самые популярные разработчики мобильных приложений — мидлы и сеньоры, доли вакансий для них одинаковые — по 45,2%.
Реже ищут лидов — доля 7,1%. Для джунов вакансий меньше всего: 2,5%.
💰По цифрам, которые оставили сами разработчики, можно сделать выводы, что джуны в среднем получают 110 000 ₽, а лиды — 430 000 ₽.@iOS Dev
Концепт приложения для visionOS в связке с Figma (обновления в реальном времени)
Ещё одна необычная идея от Alex Widua (вы только посмотрите на его прошлый прототип!).
Во время работы с visionOS он придумал такую связку: плагин фигмы общается с приложением iOS через WebSockets. Все фреймы Figma загружаются как изображения AR, которые может распознать ARKit.
Удивительно, но работает очень даже неплохо🤩.
🛠 Тут можно посмотреть на реализацию анимации сетки при обнаружении фрейма.
😃 iOS Dev
Тинькофф приглашает в команду крутых ИТ-специалистов
Мы решаем масштабные задачи: создаем высоконагруженные сервисы для 30 миллионов клиентов, экспериментируем и ищем новые решения. А еще с нами комфортно работать. Большинство бытовых забот делегируем компании: от расширенного ДМС и юридической помощи до питания и поддержки спорта.
Оставить резюме в ИТ-команду Тинькофф: https://o.tinkoff.ru/prof_it
😃 iOS Dev
Создание интерактивного виджета с использованием App Intents
📖 В этом несложном примере можно узнать, как создать виджет для увеличения глобального счетчика, используемого вместе с таргет-приложением.
📖 Больше про App Intents можно узнать в официальной документации (iOS 16+).
Кстати, если вам нужно использовать больше, чем один виджет, то в канале есть пост и про такую ситуацию.
😃 iOS Dev
Объединяемые библиотеки (mergeable libraries) в Xcode 15: лучшее от динамических и статических либ
До введения объединяемых библиотек в WWDC этого года мы должны были решить, каким должен быть фреймворк — статическим или динамическим.
Выбор мог повлиять на время сборки приложения и производительность во время запуска.
Начиная с Xcode 15, нам не нужно будет принимать такое решение.
📺 Были анонсированы объединяемые библиотеки, сочетающие в себе лучшее из динамических и статических библиотек.
📖 В этой статье можно узнать, какие проблемы они решают и как настроить проект в Xcode для использования таких библиотек.
😃 iOS Dev
Серии вопросов и ответов, связанных с SwiftData и CoreData
Keith Harrison (автор сайта useyourloaf) задавал вопросы на QA-сессии в Slack напрямую инженерам Apple, после чего поделился кратким изложением информации, которую узнал.
И пусть SwiftData пока только анонсирована, уже есть важные моменты, на которые стоит обратить внимание:
🔘 Асинхронные операции.
🔘 Синхронизация CloudKit.
🔘 Вопросы, посвященные миграции с CoreData и так далее.
📖 Про SwiftData можно прочесть здесь, а про CoreData материал доступен вот тут.
🧑💻 Кстати, напоминаю, что у нас есть пополняемый список обновлений с WWDC23.
😃 iOS Dev
Создание сложных интерфейсов в SwiftUI: вертикальный список с возможностью горизонтальной прокрутки
Пожалуй, одна из непростых, но в то же время часто встречающихся задач — реализация такого отображения.
📖 В этом обучающем материале от Applе вы сможете внимательнее изучить один из возможных подходов и посмотреть, как такой интерфейс может адаптироваться к различным размерам и ориентациям устройств.
🛠 А по этой ссылке доступны оба проекта (стартовый и финальный).
🧑💻 К слову, вот тут в нашем канале есть пост о том, как можно реализовать двунаправленнуюUICollectionView (тоже с примерами).
😃 iOS Dev
🎉 В Foundation открыли исходный код и теперь каждый iOS-разработчик лично может его улучшить
Сегодня произошло важнейшее событие, анонс которого ранее появлялся в нашем канале.
🛠 В Apple выпустили в открытый доступ репозиторий, целью которого является создание унифицированной реализации Swift Foundation для всех платформ.
Многие типы, в том числе JSONEncoder, Calendar, TimeZone и Locale, являются совершенно новыми реализациями Swift.
🆕 FormatStyle и ParseStyleвпервые доступны с открытым исходным кодом.
Качество и производительность - две самые важные цели в проекте.
Позднее в этом году ожидается реализация на Swift дополнительных важных базовых API, таких как URL, Bundle, FileManager, FileHandle, Process, SortDescriptor, SortComparator и других.
Реализация на Swift обеспечивает важные преимущества по сравнению с C и Objective-C.
Например, FormatStyle показал значительное улучшение на 150% в тесте форматирования со стандартным шаблоном даты и времени.
Foundationприветствует вклад сообщества, включая исправления ошибок, тесты, документацию и переносы на новые платформы.
И лично вы тоже можете поучаствовать.
😃 iOS Dev
Последняя возможность попасть на обучение iOS в ШколуМобильной Разработки от Академии Яндекса🔥
За 3 месяца обучения вы прокачаете профессиональные скиллы, пообщаетесь с экспертами и другими увлечёнными студентами, погрузитесь в задачи IT-индустрии. Участие в школах бесплатное, занятия можно совмещать с работой или учёбой.
Обучение состоит из двух этапов:
🔸 Первый этап (8 недель) — онлайн-часть с лекциями, семинарами и практическими занятиями;
🔸 Второй этап (4 недели) — офлайн-часть в офисах Яндекса: непрерывный хакатон и работа в командах над реальными проектами.
Школа абсолютно бесплатная. На втором этапе для студентов из других городов компания оплатит перелет и проживание. После Школы у каждого студента есть возможность пройти отбор на стажировку или в штат по фаст-треку.
🌐 Чтобы попасть в школу, надо подать заявку и сделать тестовое. Прием заявок и тестовых открыт до 27 апреля включительно. Сами занятия начнутся в начале лета.
Этот проект отличная возможность прокачать свои навыки, а уже после этого можно побороться и за призы в соревнованиях.
😃 iOS Dev
Выход из зоны комфорта
Когда-то (на самом деле не так давно), я писал большой пост про необходимость базы и знания алгоритмов в нашей работе.
В канале Льва я увидел одну интересную активность (кстати, тут есть ещё и неплохая подборка задач).
Когда часть наших коллег говорит, что алгосы не нужны, они по-своему правы. В повседневной жизни не нужно писать алгоритм Дейкстры для покраски кнопок, с другой стороны, если вы говорите, что ни разу не работали с графами - вспомните об иерархии UIView и попробуйте ответить на этот вопрос ещё раз.
💨 Последние пару недель я пробую свои силы в контесте coderun, не ставя цель войти в топ-20, а скорее с целью решить столько задач, сколько получится.
Оказалось, что некоторые средние (или даже сложные задачи) могут быть проще лёгких, особенно если попробовать мыслить нестандартно, или если их разбить на подзадачи (казалось бы, какая тут связь со спринтами на нашей работе).
Конечно, без большого опыта в нахождении нужных алгоритмов непросто, и мне уже не раз хотелось сдаться.
Сейчас кажется, что я достиг личного максимума, и чтобы решить что-то ещё, нужно сделать один маленький шаг, чтобы перейти на новый уровень.
Рекомендую вам поучаствовать и проверить, готовы ли вы вникать в непростые условия, вписываться в таймлимит и учитывать выделяемую память.
🌐 Попробовать свои силы можно здесь. Но пожалуйста, не обсуждайте решения задач с другими, ведь для самурая главное это путь (ещё и правила это запрещают).
😃 iOS Dev - поставьте какую-нибудь реакцию, если вам будет интересно почитать решения самых интересных задач после контеста
Книжная подборка для продвинутых разработчиков Swift от легендарного автора
📖 Flight School — это серия книг, в которой рассматриваются основные темы разработки для iOS и macOS с помощью кратких и целенаправленных руководств.
В 2018 году решение о создании такой подборки принял Mattt (без сомнений, легендарный разработчик). Он проработал 3 года в Apple техническим писателем, участвуя в написании языка программирования Swift, Swift Package Manager и Swift.org.
До этого Мэтт основал NSHipster (который лично я поставил бы если не первым, то в топ-3 ресурсов для обязательного ознакомления), еженедельное издание для разработчиков iOS и macOS, и поддерживал несколько библиотек с открытым исходным кодом, включая Alamofire и AFNetworking (думаю, вы не раз слышали о таких).
На данный момент в подборке доступно три бесплатные книги:
1️⃣ Flight School Guide to Swift Strings - полный справочник по работе с текстом в Swift и Foundation.
2️⃣ Flight School Guide to Swift Numbers - все, что вам нужно знать о работе с числами в Swift.
3️⃣ Flight School Guide to Swift Codable - эта книга предлагает всесторонний обзор всех аспектов Codable, начиная с основ и заканчивая изучением множества продвинутых тем с помощью увлекательных примеров проектов.
😃 iOS Dev
AttributedString в Swift: форматирование текста и создание собственных стилей
🧐 Создание красивых приложений зависит не только от изображений — оно также распространяется и на текст.
Различные стили строк с атрибутами могут сделать информацию более выразительной.
📖 В этом руководстве вы узнаете о том, как работать с AttributedString и использовать расширенные возможности, включая форматирование с помощью Markdown.
😃 iOS Dev
👨💻 Что нового в Swift 5.8: все особенности и пример playground
Недавно состоялся релиз Swit 5.8, который, к слову, включён в Xcode 14.3.
Вкратце основые изменения перечислены ниже:
🔘 Swift 5.8 позволяет начать поэтапную подготовку проектов для Swift 6, используя новые функции. Чтобы включить функцию, нужно передать флаг компилятора -enable-upcoming-feature
🔘 Прокачали реализацию Result builder.
🔘 Обновили экосистему, в том числе Swift-DocC и Swift Package Manager.
🔘 В выпуске SwiftSyntax вместе со Swift 5.8 теперь содержится полностью переписанный синтаксический анализатор, полностью реализованный на Swift. Новый парсер имеет ряд преимуществ.
📖 Детальный разбор новинок можно посмотреть здесь.
📖 А вот тут есть материал с разбором новых атрибутов, например @preconcurrency и hasAttribute.
🛠 Бонуc: пример Playground от Пола Хадсона, демонстрирующий новые фичи.
😃 iOS Dev
Опыт собеседований в Facebook: System Design и возможный путь обсуждения
📖 Во время собеседования по System Design испытуемого попросили разработать мобильное приложение.
Фокус и упор был конкретно на архитектуру мобильного приложения, а затем интервьюер переходил к многочисленным деталям.
Если один из раундов содержит system design, важно не пропустить следующие базовые вещи (мне кажется, и для интервьюера тоже):
1️⃣ Вы не можете спроектировать всё приложение за 20 минут. Задайте уточняющие вопросы, на какой части архитектуры нужно сделать акцент. В дальнейшем вопросы будут задавать уже вам.
Стоит уточнить условия для возможной нагрузки, безопасности, потенциальном расширении кодовой базы (и привлечении коллег в будущем).
2️⃣ Начните с базового прототипа. Здесь важно правильно разделить архитектуру по слоям (какой класс за что будет отвечать), можно от самого верхнего уровня и спускаться ниже.
3️⃣ Масштабируемость. Во время собеседования по системному дизайну для инженеров, проектирующих серверную часть, нужно знать о таких концепциях, как фермы серверов и сети с балансировщиками нагрузки и уровнями кэширования. При проектировании архитектуры приложения нам нужно думать о схожих концепциях и идеях.
4️⃣ Безопасность. Это огромная, иногда важнейшая часть приложения, и даже если мы не специалисты в области криптографии, мы должны обладать базовым набором навыков, которые помогут защитить пользователя (и нас тоже).
5️⃣ Кэширование. Существует множество различных механизмов и идей кэширования. Например, изображения обычно кэшируются в памяти. Приложение для обмена сообщениями более эффективно извлекает изображения из памяти, а не загружает их каждый раз (телеграм не исключение).
6️⃣ Автономная работа приложения. Её необходимость и доступность конечно же, будут связаны с предыдущим пунктом.
Вектор развития диалога может пойти как в глубину, так и в ширину в зависимости от требуемых знаний.
Это лишь один из концептов и сценариев, по которому можно побеседовать, но в целом это важный навык, и на мой взгляд — для позиций выше мидла основополагающий.
😃 iOS Dev
Инструмент апгрейда arm64-бинарников для запуска на Apple Silicon iOS Simulator
📖 В интересном исследовании последствий отключения розетты (и что с этим делать) Антон Грачёв наткнулся на любопытную утилиту.
Без долгих разговоров: она умеет прокачивать либу для запуска на симуляторе.
Основная идея в том, что если бинарник поддерживает архитектуру arm64 и может работать на устройстве, то с помощью этой утилиты можно сделать версию, которая подходит для запуска в симуляторе на машинах с Apple Silicon.
⚠️ Как человек, который работает в том числе и над защитой данных, хочу предупредить в очередной раз: использование любых опенсорсных продуктов должно быть тщательно взвешено.
В этих двух материалах разработчики либы пишут об этой идее и своих шагах:
1️⃣ Hacking native ARM64 binaries to run on the iOS Simulator.
2️⃣ Hacking native ARM64 binaries to run on the iOS Simulator - the dynamic framework edition.
⬇️ Сам инструмент доступен здесь, а простой способ всё-таки запустить ваш проект без серьёзных изменений вот тут.
😃 iOS Dev