AppFiles - Mobile Development
2.17K subscribers
3.17K photos
42 videos
13 files
4.16K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Поддержка нескольких версий iOS в SwiftUI без превращения ваших представлений в хаос

Одно из главных достоинств SwiftUI — это скорость его развития. На каждой конференции WWDC представляются новые API, новые модификаторы и небольшие улучшения, повышающие удобство использования, благодаря которым код пользовательского интерфейса становится чище и выразительнее. Естественно, вам хочется начать их использовать.

А потом компилятор напоминает вам, что ваше приложение по-прежнему поддерживает старые версии iOS.
'sectionIndexLabel' is only available in iOS 26.0 or newer

На первый взгляд, это не кажется большой проблемой. Swift поддерживает проверки доступности уже много лет, поэтому обертывание нового кода в директиву if #available кажется очевидным решением. К сожалению, SwiftUI не всегда так прост.

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

Вместо этого цель должна заключаться в изоляции логики совместимости, сохраняя при этом само представление практически идентичным.

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

Статья: https://apptractor.ru/info/articles/podderzhka-neskolkih-versiy-ios-v-swiftui-bez-prevrascheniya-vashih-predstavleniy-v-haos.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы построили систему регрессионного UI-тестирования для iOS-приложения: XCUITest, mock backend и XcodeBuildMCP

В этой статье разберём, как эти компоненты соединяются в единый процесс: от сценария, описанного тестировщиком, до воспроизводимого запуска в CI.

Статья: https://habr.com/ru/articles/1067816/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Showcase Layout Compose - подсветка UI

Showcase Layout Compose создает красивые анимированные эффекты подсветки для ваших интерфейсов. С поддержкой нескольких платформ и двумя различными вариантами для демонстрации:

• ShowcaseLayout: Классическое полноэкранное наложение с вырезами
• TargetShowcaseLayout: Современная целевая подсветка с настраиваемыми формами

Showcase Layout Compose на GitHub: https://github.com/tahaak67/ShowcaseLayoutCompose
Платформа: Android/кроссплатформа
⭐️: 124

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Шпаргалка: Structured Concurrency и отмена корутин

Что будет, если запустить тяжелую фоновую обработку данных, а пользователь закроет экран? Если мы не контролируем этот процесс, потоки продолжат работу, сжигая батарею, процессорное время и создавая утечки памяти. Для решения этой проблемы в Kotlin Coroutines применяется концепция Structured Concurrency.

Статья: https://habr.com/ru/articles/1068314/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Концентрические кнопки с использованием нового API SwiftUI в iOS 27

SwiftUI для iOS, iPadOS и macOS 27 (далее я буду сокращать до *OS 27) приносит множество новых дополнений. Одно из таких дополнений, которое меня особенно заинтересовало, — это возможность считывать значение свойства concentricCornerRadii для GeometryProxy. Я чувствовал, что это может стать способом создания действительно концентрической формы кнопки. С момента появления концентричности углов я с нетерпением ждал появления специального ButtonBorderShape, учитывающего углы. До сих пор каждое обновление меня разочаровывало. Даже в *OS 27 SwiftUI по-прежнему не хватает полноценной формы, но теперь у нас есть возможность создать собственное решение, которое интегрируется в стандартные API SwiftUI, максимально скрывая нашу собственную реализацию.

Статья: https://apptractor.ru/info/articles/kontsentricheskie-knopki-s-ispolzovaniem-novogo-api-swiftui-v-ios-27.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Neon Vision Editor - редактор Markdown на Swift

Neon Vision Editor - нативный редактор для Markdown, заметок и кода на macOS, iPhone, iPad и Apple Vision Pro. Минималистичный дизайн. Быстрое редактирование, быстрый доступ к файлам, отсутствие лишних компонентов IDE.

Элементы архитектуры:

EditorViewModel — единая точка оркестрации, с которой взаимодействует интерфейс для каждого окна или сцены.
• Сериализованные команды вкладок отделяют вкладку интерфейса от ресурса документа, который она представляет, сохраняя для каждого документа положение курсора и состояние области просмотра при асинхронной загрузке и обновлениях.
• Открытые локальные документы используют события NSFilePresenter, а также ограниченные проверки метаданных и содержимого. Неизменённые буферы обновляются на месте; для изменённых предлагаются варианты Keep Local, Reload from Disk или Compare.
• Нативные бриджи редактора управляют созданием объектов TextKit/UIKit и прокруткой. SwiftUI отвечает за размещение областей интерфейса, включая обёрнутый вариант разделения исходного текста и предпросмотра в macOS.
• Доступ к файлам, разбор, сравнение различий, структурированные снепшоты и другая тяжёлая работа выполняются вне главного актора; изменения состояния интерфейса возвращаются в @MainActor.
• Оболочки для отдельных платформ остаются минимальными. visionOS использует тот же редактор семейства UIKit, адаптируя только представление под пространственные интерфейсы.
• Удалённые сеансы включаются только по желанию пользователя; macOS отвечает за SSH и размещение посредника соединений, а iPhone, iPad и Apple Vision Pro подключаются в качестве клиентов.
• Сборки для App Store не содержат механизма автоматического обновления. Отдельная версия для прямого распространения на macOS подключает Sparkle и использует подписанный канал обновлений, размещённый на GitHub Pages.
• Конфиденциальные учётные данные и закладки SSH-ключей хранятся в Keychain через SecureTokenStore, а не в обычных настройках.

Neon Vision Editor на GitHub: https://github.com/h3pdesign/Neon-Vision-Editor
Платформа: iOS
⭐️: 368
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Пет-проекты джунов (Android)

На собеседовании часто хотят видеть свой личный пет-проект. Проект, в котором человек самостоятельно придумал идею, организовал код, спроектировал архитектуру и наступил на свои собственные грабли. Ведь именно самостоятельная разработка — от локальной базы данных до UI — дает самый мощный буст в навыках (особенно, когда одно и то же приложение переписал 3 раза =)). Поэтому у автора этой статьи появилось желание помочь начинающим разработчикам. Он собрал идеи для пет-проектов, которые личня бы оценил =), а также подобрал актуальные инструменты и бесплатные API для их реализации.

Статья: https://habr.com/ru/articles/1068942/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Наше Android-приложение написано на Swift

Уже не вызывают удивление iOS-приложения, написанные на Kotlin или даже Kotlin/Compose. А вот Polymarket, крупнейший сервис пари и предсказаний в мире, сделал свое Android-приложение с использованием Swift. Внутри приложения работает почти 170 000 строк промышленного Swift-кода: модели, сетевой слой, бизнес-логика и более 120 моделей представления. Тот же самый код используется в приложении для iOS. Одна кодовая база — два приложения. Как они это сделали, что сломалось по дороге и почему разработчики повторили бы этот путь снова - в статье.

Статья: https://apptractor.ru/info/articles/nashe-android-prilozhenie-napisano-na-swift.html
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Pose - автоматическая генерация превью для Composable

Экосистема предварительного просмотра Compose отлично справляется с обработкой предварительных просмотров (Showkase, Paparazzi, Roborazzi, плагин Google для скриншот-тестирования), но не имеет механизма их генерации на этапе сборки.

Pose автоматически генерирует @Previewдля функций Jetpack Compose из вашего @Composable кода во время сборки, детерминированно, автономно, без LLM. Аннотируете, собираете, готово. 

Pose на GitHub: https://github.com/AkshayChordiya/Pose
Платформа: Android
⭐️: 29

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
9 лет Android-разработки, 3 месяца без работы - как выбраться из тупика?

Разработчик с более чем девятилетним опытом Android-разработки пожаловался на Reddit, что уже три месяца не может найти новую работу и начинает сомневаться, хочет ли вообще оставаться в мобильной разработке. Обсуждение быстро превратилось в довольно показательный срез состояния рынка Android-разработчиков в 2026 году: в комментариях появились специалисты с 5, 9, 12 и даже 14 годами опыта, которые месяцами не могут найти работу, почти не получают интервью или начинают переучиваться на backend, web и AI.

• Что случилось с автором
• «Ты не разучился программировать, ты просто заржавел»
• Android-вакансий действительно стало меньше
• Возможно, проблема не только в Android
• Android слишком узкая специализация?
• Куда уходят Android-разработчики
• AI не обязательно конкурент Android — он может стать его продолжением
• Появилась проблема «гиперспециализированных» вакансий
• Senior-интервью тоже вызывают раздражение
• Flutter тоже не выглядит очевидным спасением
• «Всё уже написано»
• Три месяца теперь воспринимаются почти как нормальный срок
• Что в итоге советует сообщество

Статья: https://apptractor.ru/info/articles/9-let-android-razrabotki-3-mesyatsa-bez-raboty-kak-vybratsya-iz-tupika.html
Платформа: Android/карьера

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Xcode 27, похоже, меняет правила игры

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

Это всё ещё бета-версия, поэтому до финального выпуска многое может измениться. Но уже сейчас всё выглядит на удивление цельно и определённо заслуживает обсуждения.

Вот что особенно привлекло моё внимание.

Статья: https://apptractor.ru/info/articles/xcode-27-pohozhe-menyaet-pravila-igry.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Fud AI - трекер калорий для iOS и Android

Fud AI - открытый privacy-first трекер калорий для iOS и Android. Позволяет делать снимки или импортировать до 10 фотографий еды с возможностью добавления заметок, сканировать штрихкоды, спрашивать у своего ИИ-тренера, как достичь цели, озвучивать свой обед или использовать Siri Shortcuts на iOS для записи еды и веса. Нужно использовать собственный ключ для работы с ИИ, зато никаких учетных записей, облачной синхронизации, отслеживания или рекламы — совершенно бесплатно.

В версии для iOS используется SwiftUI, в Android - Kotlin + Jetpack Compose. Плюс есть маркетинговый сайт и готовое описание для магазинов. 

Fud AI на GitHub: https://github.com/apoorvdarshan/fud-ai
Платформа: iOS/Android
⭐️: 337
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

(iOS En) Apple Photos App Tab Bar Using SwiftUI
(iOS En) What's New in Xcode 27
(iOS En) Stacked Glass Toasts Using SwiftUI
(iOS En) Balancing High and Low-Level Programming in Swift
(And En) What AI Gets Wrong About Android...
(And En) If you don't type code yourself, you're falling behind.
(And En) The place where leaking abstraction, data races and security vulnerabilities all meet
(And En) What’s New in Kotlin 2.4
(And En) Kotlin Performance Tracing on Android: From Coroutines to Reality
(And En) Flow with Exposed: Life Finds a Way
(And En) Koin + Kotlin Compiler = ♥️
(And En) 5 Experimental Kotlin Features You Don't Want to Miss
(And En) Multiple ViewModel Architecture in Jetpack Compose
(Crs En) Kotlin/Wasm: Finally, the missing piece for a full stack Kotlin webapp!
(Dev Ru) Заказываем кофе с помощью AI
(Dev Ru) От вайбкодера к контекст-инженеру
(Dev Ru) Вся магия Laravel — PHP, архитектура и highload
(Dev En) Python for Engineers & Robotics – Master NumPy, Pandas, and ChatGPT Automation

Прошлогодние видео:

(iOS Ru) Расширяем iOS-разработку с помощью AI
(And Ru) ByteWeaver. Инструментирование байт-кода во имя великого блага
(Crs Ru) Разработка на iOS и KMP, и жизнь на полной скорости
(Crs Ru) Почему вам не нужен Kotlin Multiplatform
(Crs Ru) Создание indoor-карты здания во Flutter
(Dev Ru) 30 вопросов команде и себе — техника и практика формулировка хороших вопросов

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Обработка исключений в Kotlin Coroutines

Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня про обработку ошибок.

Статья: https://habr.com/ru/articles/1070060/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM