Простые синтаксические приёмы в Swift
В этой статье - несколько практических приёмов и особенностей Swift, которые помогают писать код проще, короче и понятнее. Здесь не будет абстрактной теории — только реальные примеры, которые можно сразу применять в проектах: от сопоставления с шаблоном и работы с optional до безопасной обработки строк и чисел. Если вы хотите, чтобы ваш Swift-код выглядел аккуратно и «по-свифтовски», эти советы точно пригодятся.
Статья: https://apptractor.ru/info/articles/prostye-sintaksicheskie-priyomy-v-swift.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В этой статье - несколько практических приёмов и особенностей Swift, которые помогают писать код проще, короче и понятнее. Здесь не будет абстрактной теории — только реальные примеры, которые можно сразу применять в проектах: от сопоставления с шаблоном и работы с optional до безопасной обработки строк и чисел. Если вы хотите, чтобы ваш Swift-код выглядел аккуратно и «по-свифтовски», эти советы точно пригодятся.
Статья: https://apptractor.ru/info/articles/prostye-sintaksicheskie-priyomy-v-swift.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
WiFi Mirror - шаринг экрана через Wi-Fi
WiFi Mirror - кроссплатформенные приложения для шаринга экрана в локальных сетях.
WiFi Mirror обеспечивает шаринг экрана в режиме реального времени между устройствами, подключенными к одной локальной сети. Разработанное на Flutter, оно поддерживает платформы Android, iOS, macOS, Windows, Linux и Web с непрерывным peer-to-peer подключением.
WiFi Mirror на GitHub: https://github.com/navneetprajapati26/wifi-mirror
Платформа: кроссплатформа
⭐️: 19
WiFi Mirror - кроссплатформенные приложения для шаринга экрана в локальных сетях.
WiFi Mirror обеспечивает шаринг экрана в режиме реального времени между устройствами, подключенными к одной локальной сети. Разработанное на Flutter, оно поддерживает платформы Android, iOS, macOS, Windows, Linux и Web с непрерывным peer-to-peer подключением.
WiFi Mirror на GitHub: https://github.com/navneetprajapati26/wifi-mirror
Платформа: кроссплатформа
⭐️: 19
👍1
•
(iOS En) SwiftUI Sortable Grid View•
(iOS En) Managing Undo/Redo State in SwiftUI•
(iOS En) I Built a macOS Trannoscription App with Codex 5.2 + Xcode (Real Workflow)•
(iOS En) SwiftUI Pickers Deep Dive•
(And Ru) Пишу свой телеграм клиент на Android по TDD•
(And En) Why you should delete your base classes on Android (BaseActivity, BaseViewModel, etc.)•
(And En) Making Apps Accessible with Kotlin and Compose•
(And En) Refactor Kotlin code from OO to functional - step by step, safely, and pragmatically•
(And En) Unused Return Value Checker in Kotlin 2.3•
(And En) Explicit Backing Fields in Kotlin 2.3 - What You Need to Know•
(And En) Stop using LaunchedEffect for passing an Argument to a ViewModel•
(Crs Ru) Опасный Flutter… Или нет?•
(Crs Ru) Курс Dart и Flutter вместе•
(Crs En) How to Switch the App Language In KMP (Android & iOS)•
(Dev Ru) AntiSOLID•
(Dev Ru) Железо для ИИ — AI, Hardware, GPU, Cerebras•
(Dev En) Relational Database Design – Full CourseПрошлогодние видео:
•
(iOS Ru) Как мы адаптировали проект к Strict Concurrency Checking — Swift 6•
(iOS Ru) Как избежать утечек памяти при использовании Task, Combine, CurrentValueSubject и AsyncStream•
(And Ru) Построение multi-app архитектуры•
(And Ru) Старт карьеры в Android-разработке до 18 лет•
(And Ru) Compose Navigation Codelab: проходим кодлаб от Google•
(Dev Ru) Проектирование и запуск разработкиPlease open Telegram to view this post
VIEW IN TELEGRAM
Как я ускорил холодный старт Android-приложения в 10 раз
Разбор реального кейса оптимизации Android-приложения: как сократить время холодного старта с 17 до 1.7 секунд, улучшив retention с 82% до 98.5%. Конкретные решения: миграция на Splash Screen API, система фоновых задач, реактивная загрузка данных и оптимизация бэкенда.
Статья: https://nek12.dev/blog/ru/how-to-speed-up-android-app-launch-baseline-profiles-startup-optimization-splash-screen
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Разбор реального кейса оптимизации Android-приложения: как сократить время холодного старта с 17 до 1.7 секунд, улучшив retention с 82% до 98.5%. Конкретные решения: миграция на Splash Screen API, система фоновых задач, реактивная загрузка данных и оптимизация бэкенда.
Статья: https://nek12.dev/blog/ru/how-to-speed-up-android-app-launch-baseline-profiles-startup-optimization-splash-screen
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
nek12.dev
Как я ускорил холодный старт Android-приложения в 10 раз | nek12.dev
Разбор реального кейса оптимизации Android-приложения: как сократить время холодного старта с 17 до 1.7 секунд, улучшив retention с 82% до 98.5%. Конкретные решения: миграция на Splash Screen API, система фоновых задач, реактивная загрузка данных и оптимизация…
❤2
FabBar - панель вкладок с Liquid Glass и плавающей кнопкой действия
Во многих приложениях есть основное действие, которое пользователи выполняют часто: создание публикации в социальных сетях, запись приема пищи, создание задачи. Размещение этого действия в нижней части экрана позволяет держать его в зоне большого пальца и постоянно видеть, уменьшая неудобства для наиболее распространенного пользовательского сценария.
В iOS 26 с панелью вкладок разработчики могут объявить вкладку с ролью
• Вы обманываете систему, это на самом деле не вкладка поиска.
• VoiceOver читает ее как вкладку, а не как кнопку.
• Требуется слушатель изменений вкладок и их отмена в SwiftUI, что подвержено состояниям гонки.
• Отсутствует возможность изменения цвета, поэтому это выглядит как вкладка поиска, а не как основное действие.
У разработчиков есть еще один вариант: размещение пользовательской плавающей кнопки действия над панелью вкладок. Обычно она размещается в правой части экрана. Однако в iOS 26 с центрированной панелью вкладок это создает неудобную компоновку. При наличии менее четырех вкладок по обе стороны панели остается пустое пространство, а размещение кнопки FAB на крае создает несбалансированное пустое пространство. При этом нет возможности настроить расположение или размер стандартной панели вкладок, чтобы обойти это.
FabBar предлагает одно решение: полностью пересоздать панель вкладок для полного контроля.
Как это работает
FabBar предоставляет API SwiftUI, но внутри использует UIKit.
Ключевая проблема в точном воссоздании панели вкладок — это эффект «пузырькового» интерактивного стекла при касании. Этот эффект доступен только для панелей вкладок и еще одного компонента: сегментированных элементов управления. FabBar использует
Почему UIKit? FabBar манипулирует внутренней иерархией представлений
Этот подход по своей природе ненадежен и может перестать работать после обновлений ОС.
FabBar на GitHub: https://github.com/ryanashcraft/FabBar
Платформа: iOS
⭐️: 76
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Во многих приложениях есть основное действие, которое пользователи выполняют часто: создание публикации в социальных сетях, запись приема пищи, создание задачи. Размещение этого действия в нижней части экрана позволяет держать его в зоне большого пальца и постоянно видеть, уменьшая неудобства для наиболее распространенного пользовательского сценария.
В iOS 26 с панелью вкладок разработчики могут объявить вкладку с ролью
.search и использовать ее в качестве основного действия, но у этого подхода есть несколько проблем:• Вы обманываете систему, это на самом деле не вкладка поиска.
• VoiceOver читает ее как вкладку, а не как кнопку.
• Требуется слушатель изменений вкладок и их отмена в SwiftUI, что подвержено состояниям гонки.
• Отсутствует возможность изменения цвета, поэтому это выглядит как вкладка поиска, а не как основное действие.
У разработчиков есть еще один вариант: размещение пользовательской плавающей кнопки действия над панелью вкладок. Обычно она размещается в правой части экрана. Однако в iOS 26 с центрированной панелью вкладок это создает неудобную компоновку. При наличии менее четырех вкладок по обе стороны панели остается пустое пространство, а размещение кнопки FAB на крае создает несбалансированное пустое пространство. При этом нет возможности настроить расположение или размер стандартной панели вкладок, чтобы обойти это.
FabBar предлагает одно решение: полностью пересоздать панель вкладок для полного контроля.
Как это работает
FabBar предоставляет API SwiftUI, но внутри использует UIKit.
Ключевая проблема в точном воссоздании панели вкладок — это эффект «пузырькового» интерактивного стекла при касании. Этот эффект доступен только для панелей вкладок и еще одного компонента: сегментированных элементов управления. FabBar использует
UISegmentedControl в качестве основы, скрывая стандартные метки и накладывая пользовательские представления элементов вкладок.Почему UIKit? FabBar манипулирует внутренней иерархией представлений
UISegmentedControl, чтобы скрыть собственные метки и наложить пользовательские представления. Это невозможно с помощью Picker из SwiftUI. Кроме того, смешивание пользовательских элементов управления UIKit с методом .glassEffect() из SwiftUI вызывает проблемы с частотой кадров во время сенсорного взаимодействия.Этот подход по своей природе ненадежен и может перестать работать после обновлений ОС.
FabBar на GitHub: https://github.com/ryanashcraft/FabBar
Платформа: iOS
⭐️: 76
Please open Telegram to view this post
VIEW IN TELEGRAM
Видео droidcon London 2025
В этом плейлисте более 70 видео с конференции droidcon London, которая прошла в прошлом году в конце октября.
Видео: https://www.youtube.com/playlist?list=PL9Pfzam3fFde4NtK6Nkca3zsK7Pg2Juqy
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В этом плейлисте более 70 видео с конференции droidcon London, которая прошла в прошлом году в конце октября.
Видео: https://www.youtube.com/playlist?list=PL9Pfzam3fFde4NtK6Nkca3zsK7Pg2Juqy
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Развитие Android-разработки в 2026 году
Несколько лет назад решение было простым. Вы изучали Android, создавали приложения для телефонов, выпускали новые функции, исправляли ошибки и постепенно осваивались в этой роли. Сегодня же этот выбор сопровождается сомнениями. Люди спрашивают, актуальна ли еще нативная Android-разработка, заменят ли ее Flutter или React Native, и стоит ли вообще углубленно изучать Android.
Замешательство исходит не только от новичков. Даже опытные Android-разработчики тихонько задаются вопросом о своем пути, поскольку экосистема продолжает расширяться за пределы телефонов. Складные устройства меняют размер экрана прямо во время работы. Планшеты возвращаются. Приложения Android работают на автомобилях, телевизорах и настольных компьютерах. В то же время компании продолжают стремиться к более быстрой разработке с меньшим количеством разработчиков и общими кодовыми базами.
Android не стал внезапно сложнее. Ожидания стали.
Статья: https://apptractor.ru/info/articles/plan-razvitiya-android-razrabotki-na-2026-god.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Несколько лет назад решение было простым. Вы изучали Android, создавали приложения для телефонов, выпускали новые функции, исправляли ошибки и постепенно осваивались в этой роли. Сегодня же этот выбор сопровождается сомнениями. Люди спрашивают, актуальна ли еще нативная Android-разработка, заменят ли ее Flutter или React Native, и стоит ли вообще углубленно изучать Android.
Замешательство исходит не только от новичков. Даже опытные Android-разработчики тихонько задаются вопросом о своем пути, поскольку экосистема продолжает расширяться за пределы телефонов. Складные устройства меняют размер экрана прямо во время работы. Планшеты возвращаются. Приложения Android работают на автомобилях, телевизорах и настольных компьютерах. В то же время компании продолжают стремиться к более быстрой разработке с меньшим количеством разработчиков и общими кодовыми базами.
Android не стал внезапно сложнее. Ожидания стали.
Статья: https://apptractor.ru/info/articles/plan-razvitiya-android-razrabotki-na-2026-god.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Перевод iOS-приложения с платной модели на freemium
Платные приложения, за которые надо заплатить авансом, могут быть сложными для продвижения в App Store. Страница вашего продукта может получать много просмотров, но если эти просмотры не приводят к загрузкам, что-то нужно менять. Именно в такой ситуации я оказался с Maxine: приличный трафик, почти никаких продаж.
Статья: https://apptractor.ru/info/articles/perevod-ios-prilozheniya-s-platnoy-modeli-na-freemium.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Платные приложения, за которые надо заплатить авансом, могут быть сложными для продвижения в App Store. Страница вашего продукта может получать много просмотров, но если эти просмотры не приводят к загрузкам, что-то нужно менять. Именно в такой ситуации я оказался с Maxine: приличный трафик, почти никаких продаж.
Статья: https://apptractor.ru/info/articles/perevod-ios-prilozheniya-s-platnoy-modeli-na-freemium.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Пишем игру-головоломку под macOS на SwiftUI [StarDust Collector]
В прошлой статье я поделился опытом, как писал с помощью ИИ кастомный TO-DO-лист под macOS. Опыт оказался противоречивым, но приложение всё-таки получилось и даже работало.
Поэтому я решил добавить немного фана и реализовать мечту любого программиста — написать собственную игру. Так как у меня уже появилось небольшое понимание экосистемы десктоп-приложений под macOS и SwiftUI, я решил использовать именно её.
Статья: https://habr.com/ru/articles/991402/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В прошлой статье я поделился опытом, как писал с помощью ИИ кастомный TO-DO-лист под macOS. Опыт оказался противоречивым, но приложение всё-таки получилось и даже работало.
Поэтому я решил добавить немного фана и реализовать мечту любого программиста — написать собственную игру. Так как у меня уже появилось небольшое понимание экосистемы десктоп-приложений под macOS и SwiftUI, я решил использовать именно её.
Статья: https://habr.com/ru/articles/991402/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin и Arrow: функциональное программирование с Either, Validated и эффектами
Сегодня расскажем про библиотеку Arrow в Kotlin. Arrow привносит в Kotlin крутые штуки из функционального программирования: типы вроде
Статья: https://habr.com/ru/companies/otus/articles/989658/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Сегодня расскажем про библиотеку Arrow в Kotlin. Arrow привносит в Kotlin крутые штуки из функционального программирования: типы вроде
Either и Validated для работы с ошибками, эффекты для безопасной работы с внешним миром, ну и много всего. Звучит мощно, но когда за это действительно стоит браться?Статья: https://habr.com/ru/companies/otus/articles/989658/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👎4🔥1
Kvaesitso - лаунчер для Android
Kvaesitso — это ориентированный на поиск бесплатный лаунчер для Android с открытым исходным кодом. Главная особенность — глобальный поиск, который позволяет искать не только приложения, контакты и события календаря на устройстве, но и в веб-сервисах, таких как Википедия. Кроме того, он включает в себя ряд полезных инструментов, например, калькулятор и конвертер единиц измерения. Ищете документ или информацию? Просто выполните поиск, и Kvæsitso покажет вам самый быстрый путь к ней.
Внутри Jetpack Compose и Accompanist для UI, Koin для DI, Coil для изображений, корутины для асинхронных операций, KotlinX serialization для сериализации, Room для данных, Datastore для данных пользователей, Ktor для запросов и еще несколько библиотек AndroidX.
Kvaesitso на GitHub: https://github.com/MM2-0/Kvaesitso
Платформа: Android
⭐️: 4.2K
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kvaesitso — это ориентированный на поиск бесплатный лаунчер для Android с открытым исходным кодом. Главная особенность — глобальный поиск, который позволяет искать не только приложения, контакты и события календаря на устройстве, но и в веб-сервисах, таких как Википедия. Кроме того, он включает в себя ряд полезных инструментов, например, калькулятор и конвертер единиц измерения. Ищете документ или информацию? Просто выполните поиск, и Kvæsitso покажет вам самый быстрый путь к ней.
Внутри Jetpack Compose и Accompanist для UI, Koin для DI, Coil для изображений, корутины для асинхронных операций, KotlinX serialization для сериализации, Room для данных, Datastore для данных пользователей, Ktor для запросов и еще несколько библиотек AndroidX.
Kvaesitso на GitHub: https://github.com/MM2-0/Kvaesitso
Платформа: Android
⭐️: 4.2K
Please open Telegram to view this post
VIEW IN TELEGRAM
Coordinator в iOS: как я перестал бояться кнопки «Назад» и полюбил навигацию
Эта статья - логическое продолжение нашего погружения в архитектуру. Если в первой части мы навели порядок внутри «черного ящика» под названием ViewModel, то здесь мы выйдем за его пределы. Вы узнаете, как выпилить логику переходов из ViewControllers и ViewModels, почему вызов
Статья: https://habr.com/ru/articles/991812/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Эта статья - логическое продолжение нашего погружения в архитектуру. Если в первой части мы навели порядок внутри «черного ящика» под названием ViewModel, то здесь мы выйдем за его пределы. Вы узнаете, как выпилить логику переходов из ViewControllers и ViewModels, почему вызов
navigationController?.pushViewController() прямо в экшене кнопки - это архитектурный тупик, и как построить систему навигации, которая не превратит ваш проект в спагетти при добавлении десятого экрана. Мы разберем концепцию Child Coordinators, решим проблему утечек памяти (спойлер: системная кнопка "Назад" - ваш враг) и обсудим, выжил ли этот паттерн в эпоху SwiftUI.Статья: https://habr.com/ru/articles/991812/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Модульность как архитектурный выбор
Модульность — мощный инструмент для распутывания сложных систем и создания условий для устойчивой разработки приложений. При правильном проектировании она снижает трение при перебазировании, уменьшает риск непредвиденных побочных эффектов, сокращает циклы обратной связи и делает повседневную разработку более предсказуемой. Она также может открыть двери для совместного использования хорошо изолированных модулей в нескольких приложениях, превращая внутренний код в долгосрочные активы, а не в специфичный для проекта багаж.
Статья: https://apptractor.ru/info/articles/modulnost-kak-arhitekturnyy-vybor.html
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Модульность — мощный инструмент для распутывания сложных систем и создания условий для устойчивой разработки приложений. При правильном проектировании она снижает трение при перебазировании, уменьшает риск непредвиденных побочных эффектов, сокращает циклы обратной связи и делает повседневную разработку более предсказуемой. Она также может открыть двери для совместного использования хорошо изолированных модулей в нескольких приложениях, превращая внутренний код в долгосрочные активы, а не в специфичный для проекта багаж.
Статья: https://apptractor.ru/info/articles/modulnost-kak-arhitekturnyy-vybor.html
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Осваиваем переходы между общими элементами в Compose
В современных Android-приложениях навигация — это больше, чем просто переход с экрана А на экран Б. Речь идёт о непрерывности. Переходы между общими элементами помогают пользователям сохранять контекст: то, на что вы нажали, — это то же самое, что вы сейчас видите, только в более подробном виде. При правильной реализации они устраняют трение и делают пользовательский интерфейс спокойным и продуманным.
В этой статье я расскажу, как реализовать без сторонних библиотек переходы между общими элементами с помощью Jetpack Navigation и Compose, и, что более важно, как заставить их работать в реальном приложении.
Статья: https://apptractor.ru/info/articles/osvaivaem-perehody-mezhdu-obschimi-elementami-v-compose.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В современных Android-приложениях навигация — это больше, чем просто переход с экрана А на экран Б. Речь идёт о непрерывности. Переходы между общими элементами помогают пользователям сохранять контекст: то, на что вы нажали, — это то же самое, что вы сейчас видите, только в более подробном виде. При правильной реализации они устраняют трение и делают пользовательский интерфейс спокойным и продуманным.
В этой статье я расскажу, как реализовать без сторонних библиотек переходы между общими элементами с помощью Jetpack Navigation и Compose, и, что более важно, как заставить их работать в реальном приложении.
Статья: https://apptractor.ru/info/articles/osvaivaem-perehody-mezhdu-obschimi-elementami-v-compose.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Destinations - управление потоком навигации
Destinations — это библиотека Swift для UIKit и SwiftUI, разработанная для полного разделения пользовательского интерфейса и управления потоком навигации. Она основана на философии, которая подчеркивает четкое разделение задач, то есть каждый значимый View или UIViewController в приложении не должен знать о других, и то, что пользовательский интерфейс и функциональность должны легко заменяться по мере изменения потребностей. Destinations позволяет вашим пользовательским интерфейсам снова сосредоточиться на пользователе.
• Обеспечивает четкое разделение задач между вашими интерфейсами, источниками данных и другой логикой приложения.
• Позволяет легко заменять пользовательский интерфейс и источники данных для A/B-тестирования или предоставления тестовых моков.
• Сокращает время разработки — предоставляет встроенные реализации для многих типов представления системы, уменьшает объем кода по мере изменения функциональных потоков.
• Обеспечивает удобную возможность глубокой привязки.
• Предоставляет возможность отображать и тестировать разделы ваших приложений изолированно.
• Гибкая и расширяемая система на основе протоколов, соответствующая потребностям вашего проекта, включая пользовательский интерфейс.
• Аналогичный API как для UIKit, так и для SwiftUI, и достаточно универсальный, чтобы обеспечить поддержку других платформ. Поддерживает приложения на основе UIKit и SwiftUI, а также гибридные приложения с контентом SwiftUI, размещенным в контроллерах UIKit.
Destinations на GitHub: https://github.com/poetmountain/Destinations
Платформа: iOS
⭐️: 18
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Destinations — это библиотека Swift для UIKit и SwiftUI, разработанная для полного разделения пользовательского интерфейса и управления потоком навигации. Она основана на философии, которая подчеркивает четкое разделение задач, то есть каждый значимый View или UIViewController в приложении не должен знать о других, и то, что пользовательский интерфейс и функциональность должны легко заменяться по мере изменения потребностей. Destinations позволяет вашим пользовательским интерфейсам снова сосредоточиться на пользователе.
• Обеспечивает четкое разделение задач между вашими интерфейсами, источниками данных и другой логикой приложения.
• Позволяет легко заменять пользовательский интерфейс и источники данных для A/B-тестирования или предоставления тестовых моков.
• Сокращает время разработки — предоставляет встроенные реализации для многих типов представления системы, уменьшает объем кода по мере изменения функциональных потоков.
• Обеспечивает удобную возможность глубокой привязки.
• Предоставляет возможность отображать и тестировать разделы ваших приложений изолированно.
• Гибкая и расширяемая система на основе протоколов, соответствующая потребностям вашего проекта, включая пользовательский интерфейс.
• Аналогичный API как для UIKit, так и для SwiftUI, и достаточно универсальный, чтобы обеспечить поддержку других платформ. Поддерживает приложения на основе UIKit и SwiftUI, а также гибридные приложения с контентом SwiftUI, размещенным в контроллерах UIKit.
Destinations на GitHub: https://github.com/poetmountain/Destinations
Платформа: iOS
⭐️: 18
Please open Telegram to view this post
VIEW IN TELEGRAM
Как не сломать Android-приложение при защите от реверса
Защита мобильного приложения от реверс‑инжиниринга и взлома — обязательный этап, который стоит учитывать при разработке релизной сборки. Протекторы используют обфускацию (запутывание), шифрование и другие техники, чтобы затруднить статический анализ и защитить код от модификаций злоумышленниками. Но у многих разработчиков присутствует страх сломать приложение применением таких техник.
Чтобы развеять опасения разработчиков и повысить их уверенность в качестве защищённой сборки, мы покажем принципы работы с протектором. Нельзя же включать все техники по умолчанию в надежде, что функциональность не пострадает.
Далее мы разберем, какие участки Android‑приложения можно защитить одной кнопкой, что требует настройки, а что трогать нельзя.
Статья: https://habr.com/ru/companies/pt/articles/990092/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Защита мобильного приложения от реверс‑инжиниринга и взлома — обязательный этап, который стоит учитывать при разработке релизной сборки. Протекторы используют обфускацию (запутывание), шифрование и другие техники, чтобы затруднить статический анализ и защитить код от модификаций злоумышленниками. Но у многих разработчиков присутствует страх сломать приложение применением таких техник.
Чтобы развеять опасения разработчиков и повысить их уверенность в качестве защищённой сборки, мы покажем принципы работы с протектором. Нельзя же включать все техники по умолчанию в надежде, что функциональность не пострадает.
Далее мы разберем, какие участки Android‑приложения можно защитить одной кнопкой, что требует настройки, а что трогать нельзя.
Статья: https://habr.com/ru/companies/pt/articles/990092/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Про то, как я Storage Access Framework укрощал, да файлы в хранилище приручал
В начале было приложение. И было это приложение для цифровой подписи. Работало оно просто: подписываешь документы на смартфоне, не думая о каких-либо дополнительных токенах. Все упаковано в телефон — и сертификаты, и библиотеки. Процесс знакомый: авторизовался, загрузил файл, подписал.
Но вот однажды пользователи стали жаловаться, что не могут найти ранее подписанные документы. Бывало, пользователь подписал файл, долго к нему не возвращался, а спустя время уже не смог его отыскать. Переустановил приложение или авторизовался с другого устройства, и все файлы как в воду канули.
Меня зовут Георгий Левченко, я Android-разработчик в ПСБ. Начал я искать источник бед пользовательских. Оказалось, виной всему было то, что все файлы хранились в кэш-директории приложения. Понял я: чтобы файлы не пропадали, им нужен менеджмент для файлов. Отыскался у Android для таких целей готовый инструмент — Storage Access Framework (SAF), он служит для доступа к файлам через стандартный интерфейс без управления разрешениями вручную. Поведаю под катом, как я решал с его помощью эту задачу.
Статья: https://habr.com/ru/companies/psb/articles/991676/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В начале было приложение. И было это приложение для цифровой подписи. Работало оно просто: подписываешь документы на смартфоне, не думая о каких-либо дополнительных токенах. Все упаковано в телефон — и сертификаты, и библиотеки. Процесс знакомый: авторизовался, загрузил файл, подписал.
Но вот однажды пользователи стали жаловаться, что не могут найти ранее подписанные документы. Бывало, пользователь подписал файл, долго к нему не возвращался, а спустя время уже не смог его отыскать. Переустановил приложение или авторизовался с другого устройства, и все файлы как в воду канули.
Меня зовут Георгий Левченко, я Android-разработчик в ПСБ. Начал я искать источник бед пользовательских. Оказалось, виной всему было то, что все файлы хранились в кэш-директории приложения. Понял я: чтобы файлы не пропадали, им нужен менеджмент для файлов. Отыскался у Android для таких целей готовый инструмент — Storage Access Framework (SAF), он служит для доступа к файлам через стандартный интерфейс без управления разрешениями вручную. Поведаю под катом, как я решал с его помощью эту задачу.
Статья: https://habr.com/ru/companies/psb/articles/991676/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему Senior iOS-разработчики всё ещё проваливаются на System Design интервью
Вы когда-нибудь задумывались, почему программист с 8–10+ годами опыта уверенно пишет сложный код в Xcode, но за белой доской в интервью у него словно отключается «второе полушарие»? Опытный iOS-разработчик отлично знает Swift и архитектуру MVVM/Clean, но интервью по System Design проверяет не просто знания фреймворков. Это совсем другой навык — умение строить масштабирующиеся системы, аргументировать архитектурные решения и чётко объяснять свои мысли под давлением.
Многие сеньоры считают, что годы практики в продакшене должны автоматически сделать их экспертами по системному дизайну — но интервью проверяет способность быстро мыслить в новых условиях, объяснять решения и учитывать компромиссы. И если этого не тренировать специально — результат может разочаровать.
Статья: https://blog.stackademic.com/groww-ios-interview-why-senior-developers-still-fail-system-design-da24e34e4382
Платформа: iOS/System Design
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вы когда-нибудь задумывались, почему программист с 8–10+ годами опыта уверенно пишет сложный код в Xcode, но за белой доской в интервью у него словно отключается «второе полушарие»? Опытный iOS-разработчик отлично знает Swift и архитектуру MVVM/Clean, но интервью по System Design проверяет не просто знания фреймворков. Это совсем другой навык — умение строить масштабирующиеся системы, аргументировать архитектурные решения и чётко объяснять свои мысли под давлением.
Многие сеньоры считают, что годы практики в продакшене должны автоматически сделать их экспертами по системному дизайну — но интервью проверяет способность быстро мыслить в новых условиях, объяснять решения и учитывать компромиссы. И если этого не тренировать специально — результат может разочаровать.
Статья: https://blog.stackademic.com/groww-ios-interview-why-senior-developers-still-fail-system-design-da24e34e4382
Платформа: iOS/System Design
Please open Telegram to view this post
VIEW IN TELEGRAM
Ошибка, которую я не мог воспроизвести — пока не перестал тестировать на своём телефоне
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Обратное маскирование в SwiftUI с использованием режимов наложения
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Skelter Project - готовый шаблон проекта на Flutter
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79