Foil - легковесная обертка свойств для UserDefaults, "сделанная по уму". Упрощает работу с локальным хранилищем и упрощает наблюдение за переменными.
Foil на GitHub: https://github.com/jessesquires/Foil
Платформа: iOS
⭐️: 425
Foil на GitHub: https://github.com/jessesquires/Foil
Платформа: iOS
⭐️: 425
Утечки памяти в мобильных приложениях: руководство для QA-инженеров
Меня зовут Ира и я руковожу отделом тестирования мобильной платформы: наш отдел занимается разработкой инструментов для автоматизации тестирования мобильных приложений Ozon и тестированием внутренних библиотек, которые используются в наших приложениях. Около года назад мы пытались понять, почему у одной из команд джоба с автотестами отваливается по тайм-ауту. К слову, это был проект мобильного приложения для продавцов, и на нем у нас для автоматизации тестирования используются нативные фреймворки: Kaspresso + Kotlin для Android и XCTest + Swift для iOS.
Статья: https://habr.com/ru/companies/ozontech/articles/815041/
Платформа: тестирование
Меня зовут Ира и я руковожу отделом тестирования мобильной платформы: наш отдел занимается разработкой инструментов для автоматизации тестирования мобильных приложений Ozon и тестированием внутренних библиотек, которые используются в наших приложениях. Около года назад мы пытались понять, почему у одной из команд джоба с автотестами отваливается по тайм-ауту. К слову, это был проект мобильного приложения для продавцов, и на нем у нас для автоматизации тестирования используются нативные фреймворки: Kaspresso + Kotlin для Android и XCTest + Swift для iOS.
Статья: https://habr.com/ru/companies/ozontech/articles/815041/
Платформа: тестирование
Победители Global Gamers Challenge
В течение 103 дней команды придумывали, создавали, искали отзывы и дорабатывали свои проекты. В результате получились захватывающие игры, которые побуждают нас глубже задуматься о том, как мы можем жить более устойчиво. Вот Топ-10 игр победители в алфавитном порядке - с исходниками.
Статья: https://apptractor.ru/info/github/pobediteli-global-gamers-challenge.html
Платформа: Flutter
В течение 103 дней команды придумывали, создавали, искали отзывы и дорабатывали свои проекты. В результате получились захватывающие игры, которые побуждают нас глубже задуматься о том, как мы можем жить более устойчиво. Вот Топ-10 игр победители в алфавитном порядке - с исходниками.
Статья: https://apptractor.ru/info/github/pobediteli-global-gamers-challenge.html
Платформа: Flutter
Ketch - это простая, мощная, настраиваемая библиотека загрузчика файлов для Android, полностью построенная на Kotlin. Она упрощает процесс загрузки файлов в Android-приложениях, используя возможности WorkManager. Ketch гарантирует загрузку независимо от состояния приложения.
Ketch на GitHub: https://github.com/khushpanchal/Ketch
Платформа: Android
⭐️: 167
Ketch на GitHub: https://github.com/khushpanchal/Ketch
Платформа: Android
⭐️: 167
Геймдев, про который мы забыли: как работали 2D-игры на кнопочных телефонах нулевых
А вы помните, какими были мобильные игры в 2000-х годах? Помните, как разработчики умудрялись уместить целые миры в устройство с небольшим дисплеем, аппаратной клавиатурой, весьма слабым железом и парой сотен килобайт памяти? Но задумывались ли вы, как в своё время работали эти сами игры «под капотом»? В сегодняшней статье-ретроспективе предлагаю вспомнить мобильный геймдев нулевых и узнать, как же работали 2D Java-игры, какие API были доступны и что из себя представлял средний телефон тех лет.
Статья: https://habr.com/ru/companies/timeweb/articles/814975/
Платформа: разработка
А вы помните, какими были мобильные игры в 2000-х годах? Помните, как разработчики умудрялись уместить целые миры в устройство с небольшим дисплеем, аппаратной клавиатурой, весьма слабым железом и парой сотен килобайт памяти? Но задумывались ли вы, как в своё время работали эти сами игры «под капотом»? В сегодняшней статье-ретроспективе предлагаю вспомнить мобильный геймдев нулевых и узнать, как же работали 2D Java-игры, какие API были доступны и что из себя представлял средний телефон тех лет.
Статья: https://habr.com/ru/companies/timeweb/articles/814975/
Платформа: разработка
SwiftUI на iOS 14: преодолевая баги и улучшая перформанс в 3 раза
Меня зовут Никита, я iOS-разработчик в команде Яндекс Диска. В этой статье я расскажу про наш опыт разработки на SwiftUI с минимальным деплоймент таргетом iOS 14. Да-да, и с ним можно жить — знаю, что многие уже перешли на iOS 15 или 16, но те, кто ещё поддерживают 14 версию, могут почитать про наш кейс и облегчить себе жизнь. В статье я собрал топ-6 багов, с которыми можно столкнуться, а еще поделился, что помогает улучшить перформанс SwiftUI и ускорить ваши view в 3 раза.
Статья: https://habr.com/ru/companies/yandex360/articles/814047/
Платформа: iOS
Меня зовут Никита, я iOS-разработчик в команде Яндекс Диска. В этой статье я расскажу про наш опыт разработки на SwiftUI с минимальным деплоймент таргетом iOS 14. Да-да, и с ним можно жить — знаю, что многие уже перешли на iOS 15 или 16, но те, кто ещё поддерживают 14 версию, могут почитать про наш кейс и облегчить себе жизнь. В статье я собрал топ-6 багов, с которыми можно столкнуться, а еще поделился, что помогает улучшить перформанс SwiftUI и ускорить ваши view в 3 раза.
Статья: https://habr.com/ru/companies/yandex360/articles/814047/
Платформа: iOS
🔥1
Unidoc - это масштабируемый движок документации для языка Swift. Unidoc можно рассматривать как многоцелевой аналог компилятора DocC от Apple. Он предназначен для ведения долгоживущих централизованных индексов документации, которые хранят, связывают и предоставляют несколько версий документации для многих пакетов Swift одновременно.
Swift Unidoc на GitHub: https://github.com/tayloraswift/swift-unidoc
Платформа: iOS
⭐️: 40
Swift Unidoc на GitHub: https://github.com/tayloraswift/swift-unidoc
Платформа: iOS
⭐️: 40
❤1
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Посоветуйте в комментариях интересные каналы по мобильной или не очень разработке? 🌐 @AppFiles
#ios #android #mobile #video
•
(iOS Ru) Объединяем Combine и Swift Concurrency•
(iOS Ru) TOP 10 горячих клавиш для Xcodу•
(iOS Ru) Swift Plugins: ускоряем сборку проекта•
(iOS En) SwiftUI TabView Offset Reader - Scrollable Tabs•
(iOS En) Meet mergeable libraries•
(iOS En) Fix failures faster with Xcode test reports•
(iOS En) Dive deeper into SwiftData•
(iOS En) CocoaHeadsNL Meetup: Adidas Apps Architecture/Managing our large iOS App•
(iOS En) 3 Advanced Tips to Code Like a Pro in Swift (from an ex-Apple engineer 🍎)•
(iOS En) Hacker Text Effect - SwiftUI•
(iOS En) Build your next website in Swift•
(And Ru) Обсуждаем Google I/O 2024•
(And Ru) Взлом и защита Android-приложений•
(And Ru) Моментальный запуск: как VK Клипы работают с плейбэком видео на Android•
(And En) Sustaining best performance with Android adaptability technology•
(And En) Advanced graphics features in mobile games with Vulkan•
(And En) 3 things to improve your Android App experience: Edge to Edge, Predictive Back, and Glance•
(And En) Make it faster - Android Developers Backstage•
(And En) How to Use the Google's New Screenshot Testing Framework for Compose•
(And En) KotlinConf'24 - Keynote•
(Crs En) How to Setup a Room DB for Kotlin Multiplatform Compose•
(Dev Ru) Как собеседовать мобильных инженеров? Системный дизайн спешит на помощь! (+ другие собеседования)•
(Dev Ru) Проводим и проходим Mobile System Design-интервью•
(Dev Ru) Стоит ли сегодня идти в айти?•
(Dev Ru) Как сделать приложение на базе ChatGPTПосоветуйте в комментариях интересные каналы по мобильной или не очень разработке? 🌐 @AppFiles
#ios #android #mobile #video
AppTractor
Объединяем Combine и Swift Concurrency
Александр рассмотрел типичную задачу, с которой сталкивается практически каждый мобильный разработчик.
Compose Guard - плагин Gradle для обнаружения регрессий в Jetpack Compose. Определяет такие ситуации:
• Добавлены новые перезапускаемые, но не пропускаемые
• Добавлены новые нестабильные классы (срабатывают, только если используются в качестве параметра
• Добавлены новые
• Добавлены новые нестабильные параметры к
Compose Guard на GitHub: https://github.com/j-roskopf/ComposeGuard
Платформа: Android
⭐️: 33
• Добавлены новые перезапускаемые, но не пропускаемые
@Composables• Добавлены новые нестабильные классы (срабатывают, только если используются в качестве параметра
@Composable)• Добавлены новые
@dynamic свойства• Добавлены новые нестабильные параметры к
@ComposableCompose Guard на GitHub: https://github.com/j-roskopf/ComposeGuard
Платформа: Android
⭐️: 33
👍2🔥2
Как писать игры на Swift для Playdate
Playdate это портативная консоль с черно-белым экраном и ручкой для кручения. Недавно для нее стало можно разрабатывать на Swift, я попробовал и рассказал на встрече iOS-гильдии в Додо Инжиниринге про 4 дня экспериментов.
Видео: https://apptractor.ru/info/media/kak-pisat-igry-na-swift-dlya-playdate.html
Платформа: iOS
Playdate это портативная консоль с черно-белым экраном и ручкой для кручения. Недавно для нее стало можно разрабатывать на Swift, я попробовал и рассказал на встрече iOS-гильдии в Додо Инжиниринге про 4 дня экспериментов.
Видео: https://apptractor.ru/info/media/kak-pisat-igry-na-swift-dlya-playdate.html
Платформа: iOS
👍2
Пишем plugin для Jetbrains IDE: отображение файлов вне проекта в Project Tool
Меня зовут Михаил, я Android-разработчик в компании Циан. Этой статьёй я открываю для себя цикл статей по внутренней кухне разработки плагинов для Jetbrains IDE: IDEA, Android Studio (AS) и пр. На дворе 2024 год, официальная документация не так богата информацией, как хотелось бы. Но есть исходники, которые смело можно дербанить. В этом цикле статей я буду описывать свой опыт поиска нужной мне информации и её разбор.
Статья: https://habr.com/ru/companies/cian/articles/816149/
Платформа: Android
Меня зовут Михаил, я Android-разработчик в компании Циан. Этой статьёй я открываю для себя цикл статей по внутренней кухне разработки плагинов для Jetbrains IDE: IDEA, Android Studio (AS) и пр. На дворе 2024 год, официальная документация не так богата информацией, как хотелось бы. Но есть исходники, которые смело можно дербанить. В этом цикле статей я буду описывать свой опыт поиска нужной мне информации и её разбор.
Статья: https://habr.com/ru/companies/cian/articles/816149/
Платформа: Android
Путь Android-приложения к поддержке темной темы: пример Tokopedia
В этой статье будет рассказано и объяснено, как команда Tokopedia реализовала в своем Android-приложении поддержку темного режима.
• Что нужно для начала
Базовое понимание темного режима
Вспомогательная библиотека цветов
Принудительно перевести приложение в светлый режим
• Как с минимальными усилиями преобразовать сотни модулей в темный режим?
• Скрипт автоматизации
• Как это работает
• Другие инструменты
• Лучшие практики
• Результат
Статья: https://apptractor.ru/info/articles/put-android-prilozheniya-k-podderzhke-temnoy-temy-primer-tokopedia.html
Платформа: Android
В этой статье будет рассказано и объяснено, как команда Tokopedia реализовала в своем Android-приложении поддержку темного режима.
• Что нужно для начала
Базовое понимание темного режима
Вспомогательная библиотека цветов
Принудительно перевести приложение в светлый режим
• Как с минимальными усилиями преобразовать сотни модулей в темный режим?
• Скрипт автоматизации
• Как это работает
• Другие инструменты
• Лучшие практики
• Результат
Статья: https://apptractor.ru/info/articles/put-android-prilozheniya-k-podderzhke-temnoy-temy-primer-tokopedia.html
Платформа: Android
DeskPad - виртуальный монитор для шаринга экрана.
Некоторые рабочие процессы требуют совместного использования всего экрана (обычно это связано с переключением между несколькими приложениями), но если у докладчика дисплей намного больше, чем у зрителей, может быть трудно увидеть, что происходит.
DeskPad создает виртуальный дисплей, который зеркально отображается в окне приложения, чтобы вы могли создать выделенную рабочую область, которую легко пошарить.
DeskPad ведет себя как любой другой дисплей. Запуск приложения эквивалентен подключению монитора, поэтому macOS позаботится о правильном расположении окон в соответствии с их предыдущей конфигурацией.
Вы можете изменить разрешение дисплея в системных настройках, и окно приложения подстроится соответствующим образом.
DeskPad на GitHub: https://github.com/Stengo/DeskPad
Платформа: Swift/macOS
⭐️: 793
Некоторые рабочие процессы требуют совместного использования всего экрана (обычно это связано с переключением между несколькими приложениями), но если у докладчика дисплей намного больше, чем у зрителей, может быть трудно увидеть, что происходит.
DeskPad создает виртуальный дисплей, который зеркально отображается в окне приложения, чтобы вы могли создать выделенную рабочую область, которую легко пошарить.
DeskPad ведет себя как любой другой дисплей. Запуск приложения эквивалентен подключению монитора, поэтому macOS позаботится о правильном расположении окон в соответствии с их предыдущей конфигурацией.
Вы можете изменить разрешение дисплея в системных настройках, и окно приложения подстроится соответствующим образом.
DeskPad на GitHub: https://github.com/Stengo/DeskPad
Платформа: Swift/macOS
⭐️: 793
Почему я продолжаю ставить на Flutter
Мобильные разработчики часто беспокоятся, что Google может внезапно отказаться от Flutter, как и от многих других продуктов в печально известном списке “Убитых Google«. Это справедливое опасение, но я всегда считал его маловероятным, как в 2017 году, когда я впервые вскочил на поезд Flutter, так и сейчас, в 2024 году.
В этой статье я расскажу о причинах, по которым я считаю, что Flutter останется, в надежде предоставить полезный ресурс для разработчиков, столкнувшихся с этим вопросом.
Статья: https://apptractor.ru/info/articles/pochemu-ya-prodolzhayu-stavit-na-flutter.html
Платформа: Flutter
Мобильные разработчики часто беспокоятся, что Google может внезапно отказаться от Flutter, как и от многих других продуктов в печально известном списке “Убитых Google«. Это справедливое опасение, но я всегда считал его маловероятным, как в 2017 году, когда я впервые вскочил на поезд Flutter, так и сейчас, в 2024 году.
В этой статье я расскажу о причинах, по которым я считаю, что Flutter останется, в надежде предоставить полезный ресурс для разработчиков, столкнувшихся с этим вопросом.
Статья: https://apptractor.ru/info/articles/pochemu-ya-prodolzhayu-stavit-na-flutter.html
Платформа: Flutter
💩9🔥2
Библиотека Blueprint предоставляет возможность визуализировать размеры Composable в пользовательском интерфейсе с помощью простого определения на основе DSL. Работает и с превью в Android Studio.
Blueprint на GitHub: https://github.com/popovanton0/Blueprint
Платформа: Android
⭐️: 127
Blueprint на GitHub: https://github.com/popovanton0/Blueprint
Платформа: Android
⭐️: 127
This media is not supported in your browser
VIEW IN TELEGRAM
Стэнфордский курс CS193P “Разработка iOS приложений в SwiftUI” Весна 2023: русскоязычный конспект с адаптацией к iOS 17
В иллюстрированных русскоязычных конспектах этого курса сделаны пометки, касающиеся изменений в iOS 17, а также восполнены некоторые фрагменты Лекций, где есть звук, но пропадает изображение, когда профессор демонстрирует что-то «в живую». Для большинства Лекций представлена версия с использование макроса @Observable вместо протокола ObservableObject, в ряде случаев это потребовало нетривиальных решений.
Статья: https://habr.com/ru/articles/816995/
Платформа: iOS
В иллюстрированных русскоязычных конспектах этого курса сделаны пометки, касающиеся изменений в iOS 17, а также восполнены некоторые фрагменты Лекций, где есть звук, но пропадает изображение, когда профессор демонстрирует что-то «в живую». Для большинства Лекций представлена версия с использование макроса @Observable вместо протокола ObservableObject, в ряде случаев это потребовало нетривиальных решений.
Статья: https://habr.com/ru/articles/816995/
Платформа: iOS
Как создать Android-приложение чат-бота с генеративным ИИ Google
Одно из ключевых преимуществ этих базовых моделей — способность с минимальным обучением адаптироваться к конкретным вариантам применения, в которых для эффективной адаптации результатов требуется лишь небольшое количество примеров данных. Это делает генеративный ИИ универсальным и мощным инструментом для создания контента.
Поэтому в Gemini имеется множество способов совершенствования того или иного продукта. Создадим приложение чат-бота с ИИ для Android, использовав SDK-пакеты чата Compose от Stream и генеративного ИИ Google для Android.
Статья: https://link.medium.com/RSJi0aFnYJb
Платформа: Android
Одно из ключевых преимуществ этих базовых моделей — способность с минимальным обучением адаптироваться к конкретным вариантам применения, в которых для эффективной адаптации результатов требуется лишь небольшое количество примеров данных. Это делает генеративный ИИ универсальным и мощным инструментом для создания контента.
Поэтому в Gemini имеется множество способов совершенствования того или иного продукта. Создадим приложение чат-бота с ИИ для Android, использовав SDK-пакеты чата Compose от Stream и генеративного ИИ Google для Android.
Статья: https://link.medium.com/RSJi0aFnYJb
Платформа: Android
Работает — не трогай: как Snapchat переписал свое приложение для Android
Переписывание приложения может иметь положительные результаты, но это сложный процесс. Чтобы разработать нашу стратегию, перед началом работы мы тщательно исследовали производительность нашего приложения. После того, как мы начали, потребовалось огромное количество координации и поддержки, чтобы сохранить проект в нужном русле, и мы с самого начала использовали и тестировали наше новое приложение, чтобы поддерживать высокое качество. В этом посте мы расскажем о некоторых процессах принятия решений и уроках, извлеченных из нашего опыта.
Статья: https://apptractor.ru/info/articles/snapchat-rewrite.html
Платформа: Android
Переписывание приложения может иметь положительные результаты, но это сложный процесс. Чтобы разработать нашу стратегию, перед началом работы мы тщательно исследовали производительность нашего приложения. После того, как мы начали, потребовалось огромное количество координации и поддержки, чтобы сохранить проект в нужном русле, и мы с самого начала использовали и тестировали наше новое приложение, чтобы поддерживать высокое качество. В этом посте мы расскажем о некоторых процессах принятия решений и уроках, извлеченных из нашего опыта.
Статья: https://apptractor.ru/info/articles/snapchat-rewrite.html
Платформа: Android
👍1
Sword - это библиотека для инъекции зависимостей во время компиляции для Swift, вдохновленная Dagger.
Когда вы объявляете зависимости и указываете, как их удовлетворить, используя Swift Macros, Sword автоматически генерирует код инъекции зависимостей во время компиляции. Sword просматривает ваш код и проверяет графы зависимостей, гарантируя, что все зависимости объекта могут быть удовлетворены, что исключает ошибки в рантайме.
Sword на GitHub: https://github.com/rockname/sword
Платформа: iOS
⭐️: 19
Когда вы объявляете зависимости и указываете, как их удовлетворить, используя Swift Macros, Sword автоматически генерирует код инъекции зависимостей во время компиляции. Sword просматривает ваш код и проверяет графы зависимостей, гарантируя, что все зависимости объекта могут быть удовлетворены, что исключает ошибки в рантайме.
Sword на GitHub: https://github.com/rockname/sword
Платформа: iOS
⭐️: 19