Инструментальные цепочки Gradle редко бывают хорошей идеей
Вас никто не осудит за то, что вы считаете, что цепочки инструментов Java - это лучший способ управления компиляцией. Однако они редко бывают хорошей идеей. Давайте разберемся, почему.
Статья: https://apptractor.ru/info/articles/instrumentalnye-tsepochki-gradle-redko-byvayut-horoshey-ideey.html
Платформа: Android
  Вас никто не осудит за то, что вы считаете, что цепочки инструментов Java - это лучший способ управления компиляцией. Однако они редко бывают хорошей идеей. Давайте разберемся, почему.
Статья: https://apptractor.ru/info/articles/instrumentalnye-tsepochki-gradle-redko-byvayut-horoshey-ideey.html
Платформа: Android
Adwaita for Swift - это фреймворк для создания пользовательских интерфейсов для GNOME с API, похожим на SwiftUI. Основная цель Adwaita - предоставить iOS-разработчикам простой в использовании интерфейс для создания GNOME-приложений. Бэкэнд должен оставаться как можно более простым, не ограничивая при этом возможности Libadwaita и GTK.
Adwaita на GitHub: https://github.com/AparokshaUI/adwaita-swift
Платформа: iOS/кроссплатформа
⭐️: 295
  Adwaita на GitHub: https://github.com/AparokshaUI/adwaita-swift
Платформа: iOS/кроссплатформа
⭐️: 295
Better Open With заменяет диалог "Открыть файл с помощью" в Android. Приложение визуально отображает все действия по умолчанию для открытия ссылок, изображений, PDF и многих других типов файлов, перечисляя все возможные приложения, которые вы обычно видите. В отличие от стандартного диалога, всплывающее окно показывается в течение нескольких секунд (по умолчанию 5, но это можно настроить). В окне предлагается выбрать приложение, после выбора оно автоматически будет открывать данный тип файлов. В отличии от других подобных приложений, в этом вы просто ждете запуска приложения по умолчанию (без необходимости нажимать) или выбираете другое. 
Better Open With на GitHub: https://github.com/Giorgi/BetterOpenWith
Платформа: Android
⭐️: 23
  Better Open With на GitHub: https://github.com/Giorgi/BetterOpenWith
Платформа: Android
⭐️: 23
К чему с годами приводит работа с Dependency Injection и Service Locator
Глубину осознания той или иной библиотеки можно проверить, написав её самостоятельно. Возможно, новорожденное решение будет ограниченным и лишённым всякой аудитории, но оно будет навеки принадлежать её автору и подтверждать реальное понимание работы технологии.
Так произошло и со мной. Решил написать полноценный функционал для работы с зависимостями и, так как я Android-разработчик, адаптировать для работы в моей привычной среде и для моих таких же привычных задач.
А делюсь я написанным творением с наивной мыслью, что это сделает кого-то лучше в техническом плане.
Статья: https://habr.com/ru/companies/alfa/articles/802587/
Платформа: Android
  Глубину осознания той или иной библиотеки можно проверить, написав её самостоятельно. Возможно, новорожденное решение будет ограниченным и лишённым всякой аудитории, но оно будет навеки принадлежать её автору и подтверждать реальное понимание работы технологии.
Так произошло и со мной. Решил написать полноценный функционал для работы с зависимостями и, так как я Android-разработчик, адаптировать для работы в моей привычной среде и для моих таких же привычных задач.
А делюсь я написанным творением с наивной мыслью, что это сделает кого-то лучше в техническом плане.
Статья: https://habr.com/ru/companies/alfa/articles/802587/
Платформа: Android
SQLite.swift - типобезопасный слой чистого Swift поверх SQLite3. Библиотека обеспечивает проверку синтаксиса выражений и намерений SQL-операторов во время компиляции, предоставляя массу полезных простых в использовании функций для работы с базой данных. 
SQLite.swift на GitHub: https://github.com/stephencelis/SQLite.swift
Платформа: iOS
⭐️: 9.4K
  SQLite.swift на GitHub: https://github.com/stephencelis/SQLite.swift
Платформа: iOS
⭐️: 9.4K
Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?
Моддинг-сцена с разработкой и портированием кастомных прошивок для Android-устройств существует вот уже более 10 лет. В основном, энтузиасты пытаются проапгрейдить свои устройства путем портирования более свежих версий Android, чем предлагает производитель девайса. Чего уж говорить, если Galaxy S III, которому уже 12 лет стукнуло, получил неофициальный апгрейд до Android 14. Порой мне в голову приходят различные, весьма странные моддерские мысли: например, почему бы не портировать на старенький смартфон… ещё более старую версию Android, дабы посмотреть «что будет». Казалось бы «портировал и портировал», но в процессе работы я столкнулся с множеством интересных нюансов и особенностей работы Android, о которых хотел бы рассказать и вам.
Статья: https://habr.com/ru/companies/timeweb/articles/802591/
Платформа: Android
Моддинг-сцена с разработкой и портированием кастомных прошивок для Android-устройств существует вот уже более 10 лет. В основном, энтузиасты пытаются проапгрейдить свои устройства путем портирования более свежих версий Android, чем предлагает производитель девайса. Чего уж говорить, если Galaxy S III, которому уже 12 лет стукнуло, получил неофициальный апгрейд до Android 14. Порой мне в голову приходят различные, весьма странные моддерские мысли: например, почему бы не портировать на старенький смартфон… ещё более старую версию Android, дабы посмотреть «что будет». Казалось бы «портировал и портировал», но в процессе работы я столкнулся с множеством интересных нюансов и особенностей работы Android, о которых хотел бы рассказать и вам.
Статья: https://habr.com/ru/companies/timeweb/articles/802591/
Платформа: Android
❤1
  SimpMusic - открытый музыкальный клиент YouTube Music для Android со многими функциями. Из интересного есть кеширование для оффлайн-проигрывания, отсутствие рекламы, слова песен из Musixmatch, Spotify и транскрипции YouTube с переводом, предложение песен на основе ИИ,  поддержка Android Auto. 
SimpMusic на GitHub: https://github.com/maxrave-dev/SimpMusic
Платформа: Android
⭐️: 1.1K
  SimpMusic на GitHub: https://github.com/maxrave-dev/SimpMusic
Платформа: Android
⭐️: 1.1K
Производительность - ключевая характеристика для многих приложений и фреймворков. Пакет Benchmark позволяет легко измерять и отслеживать множество различных показателей, влияющих на производительность, таких как загрузка процессора, ARC-трафик, использование памяти, использование ресурсов операционной системы, таких как потоки и системные вызовы, а также полностью пользовательские счетчики метрик.
Benchmark работает как на macOS, так и на Linux и поддерживает несколько ключевых рабочих сценариев:
• Автоматизированная проверка регрессии производительности пул-реквеста путем сравнения показателей с основной веткой
• Автоматизированная проверка пул-реквеста по сравнению с предварительно записанным абсолютным пороговым значением, подходящая, например, для регрессионных тестов
• Ручное сравнение нескольких базовых показателей производительности для итеративной или A/B работы отдельного разработчика
• Экспорт результатов бенчмарка в нескольких форматах для анализа или визуализации
• Запуск профилировщика Instruments на наборе бенчмарков непосредственно из Xcode
Benchmark подходит как для небольших специальных бенчмарков, ориентированных на рантайм, так и для более масштабных бенчмарков, которые заботятся о нескольких расширенных метриках.
Benchmark на GitHub: https://github.com/ordo-one/package-benchmark
Платформа: iOS
⭐️: 214
  Benchmark работает как на macOS, так и на Linux и поддерживает несколько ключевых рабочих сценариев:
• Автоматизированная проверка регрессии производительности пул-реквеста путем сравнения показателей с основной веткой
• Автоматизированная проверка пул-реквеста по сравнению с предварительно записанным абсолютным пороговым значением, подходящая, например, для регрессионных тестов
• Ручное сравнение нескольких базовых показателей производительности для итеративной или A/B работы отдельного разработчика
• Экспорт результатов бенчмарка в нескольких форматах для анализа или визуализации
• Запуск профилировщика Instruments на наборе бенчмарков непосредственно из Xcode
Benchmark подходит как для небольших специальных бенчмарков, ориентированных на рантайм, так и для более масштабных бенчмарков, которые заботятся о нескольких расширенных метриках.
Benchmark на GitHub: https://github.com/ordo-one/package-benchmark
Платформа: iOS
⭐️: 214
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Посоветуйет в комментах интересные каналы по мобильной разработке? 🌐 @AppFiles
  
  •
(iOS En) Stacked Cards Effect using SwiftUI•
(iOS En) Pinch to Zoom - SwiftUI•
(iOS En) Rebuild Spotify in SwiftUI•
(iOS En) Swift has more formatters than you know•
(iOS En) XCTest Tutorial: How to add automated UI tests for Better iOS App Quality•
(iOS En) Horizontal Wheel Picker•
(iOS En) Create Realistic Particle Effects for visionOS•
(And Ru) Что нужно учить в 2024•
(And En) Time for Playtime - Android Developers Backstage•
(And En) How to Implement a Pull-to-Refresh LazyColumn with Material3 in Android•
(And En) If You're Making These 5 Use Case Mistakes, You Haven't Understood Clean Architecture•
(And En) Material You Review•
(Crs Ru) Flutter Dev Podcast #45: Собеседования на позицию Flutter-разработчика•
(Crs En) Display images with Custom Paint using Supabase Storage•
(Crs En) Flutter Responsive UI Design•
(Dev Ru) Пишем рекомендательную систему музыки на Java•
(Dev Ru) Задача из Моего Собеседования в Amazon•
(Dev Ru) Ада Лавлейс и программирование•
(Dev Ru) Осознанный подход к метрикам•
(Dev En) AI Flutter Code Generator with Gemini APIПосоветуйет в комментах интересные каналы по мобильной разработке? 🌐 @AppFiles
YouTube
  
  Stacked Cards Effect using #swiftui for #ios 17 in #xcode 15
  
  Keyguard - это альтернативный клиент для платформы Bitwarden (открытый менеджер паролей), созданный для обеспечения наилучшего пользовательского опыта. Особенности Keyguard - Material You, мощный и быстрый поиск, поиск записи с дублированными паролями, неактивной двух-факторной аутентификацией, незащищенными веб-сайтами и дублированными, неполными или просроченными записями, прекрасная производительность, поддержка автозаполнения, поддержка множественных учетных записей с безопасным входом и двух-факторной аутентификацией, загрузка больших файлов в фоне, красивая светлая и черная темы, поддержка Chrome OS. В дополнение, у Keyguard есть притягивающие глаз анимации и плавность работы, которую вы ожидаете от лучших современных приложений.
Keyguard на GitHub: https://github.com/AChep/keyguard-app
Платформа: Android
⭐️: 529
  Keyguard на GitHub: https://github.com/AChep/keyguard-app
Платформа: Android
⭐️: 529
Privacy Manifest: что нужно о нём знать для внедрения в проект
На работе я столкнулся с задачей внедрения Privacy Manifest в проект. Изучение вопроса началось с прочтения документации Apple, а продолжилось просмотром WWDC-сессии на тему конфиденциальности. После внедрения оказалось, что для корректной работы над задачей нужно изучить больше информации. Поэтому я решил поделиться опытом в формате инструкции. Покажу, как внедрять Privacy Manifest на примере вымышленного проекта, и дам практические советы по внедрению манифеста конфиденциальности.
Статья: https://habr.com/ru/companies/sberbank/articles/803445/
Платформа: iOS
  На работе я столкнулся с задачей внедрения Privacy Manifest в проект. Изучение вопроса началось с прочтения документации Apple, а продолжилось просмотром WWDC-сессии на тему конфиденциальности. После внедрения оказалось, что для корректной работы над задачей нужно изучить больше информации. Поэтому я решил поделиться опытом в формате инструкции. Покажу, как внедрять Privacy Manifest на примере вымышленного проекта, и дам практические советы по внедрению манифеста конфиденциальности.
Статья: https://habr.com/ru/companies/sberbank/articles/803445/
Платформа: iOS
Context receivers — новые extension functions
Поговорим сегодня про context receivers — фиче Kotlin, про которую я узнал давно, но смог найти применение лишь пару месяцев назад. Расскажу о том, что такое context receivers, где их можно использовать, и, конечно же, про «успешный успех» — минус 60% самописного DI в Ozon ID SDK.
Статья: https://habr.com/ru/companies/ozontech/articles/802641/
Платформа: Android
Поговорим сегодня про context receivers — фиче Kotlin, про которую я узнал давно, но смог найти применение лишь пару месяцев назад. Расскажу о том, что такое context receivers, где их можно использовать, и, конечно же, про «успешный успех» — минус 60% самописного DI в Ozon ID SDK.
Статья: https://habr.com/ru/companies/ozontech/articles/802641/
Платформа: Android
🔥2
  Сделайте ваше iOS-приложение меньше с помощью динамических фреймворков
Упаковать динамический фреймворк достаточно просто, однако для того, чтобы правильно дедуплицировать ресурсы и сделать приложение легким, вам придется пройти через множество недокументированных шагов.
Статья: https://apptractor.ru/info/articles/sdelayte-vashe-ios-prilozhenie-menshe-s-pomoschyu-dinamicheskih-freymvorkov.html
Платформа: iOS
  Упаковать динамический фреймворк достаточно просто, однако для того, чтобы правильно дедуплицировать ресурсы и сделать приложение легким, вам придется пройти через множество недокументированных шагов.
Статья: https://apptractor.ru/info/articles/sdelayte-vashe-ios-prilozhenie-menshe-s-pomoschyu-dinamicheskih-freymvorkov.html
Платформа: iOS
Gifu добавляет в UIKit поддержку protocol-based  performance-aware анимированных GIF. Не требует использования встроенного подкласса GIFImageView. Всю тяжелую работу выполняет класс Animator, а протокол GIFAnimatable раскрывает функциональность классам представления, которые соответствуют ему, используя расширения протокола. Animator имеет FrameStore, который хранит в памяти только ограниченное количество кадров, эффективно создавая буфер для анимации, не занимая всю доступную память. Такой подход делает загрузку больших GIF-файлов гораздо более дружественной к ресурсам.
Gifu на GitHub: https://github.com/kaishin/Gifu
Платформа: iOS
⭐️: 3K
  
  Gifu на GitHub: https://github.com/kaishin/Gifu
Платформа: iOS
⭐️: 3K
GitHub
  
  GitHub - kaishin/Gifu: High-performance animated GIF support for iOS in Swift
  High-performance animated GIF support for iOS in Swift - kaishin/Gifu
👍2
  Введение в Trio
Компания Airbnb начала разработку Trio более двух лет назад и использует его в продакшене уже более полутора лет. На нем построена значительная часть работающих экранов в Android-приложении Airbnb, и он позволил нашим инженерам создавать 100% функций в Compose UI.
В этой серии статей мы рассмотрим, как Mavericks можно использовать в современных приложениях на базе Compose. Мы обсудим проблемы архитектуры на базе Compose и то, как Trio пытался их решить
Статья: https://apptractor.ru/info/articles/vvedenie-v-trio.html
Платформа: Android
  Компания Airbnb начала разработку Trio более двух лет назад и использует его в продакшене уже более полутора лет. На нем построена значительная часть работающих экранов в Android-приложении Airbnb, и он позволил нашим инженерам создавать 100% функций в Compose UI.
В этой серии статей мы рассмотрим, как Mavericks можно использовать в современных приложениях на базе Compose. Мы обсудим проблемы архитектуры на базе Compose и то, как Trio пытался их решить
Статья: https://apptractor.ru/info/articles/vvedenie-v-trio.html
Платформа: Android
Compose Rich Editor - текстовый редактор для Jetpack Compose и Compose Multiplatform, полностью настраиваемый и поддерживающие общие функции ввода текста. Основные фичи - мультиплатформенность, простота в использовании (API Compose Rich Editor использует возможности языка Kotlin для простоты и минимального количества шаблонного кода), WYSIWYG.
Compose Rich Editor на GitHub: https://github.com/MohamedRejeb/Compose-Rich-Editor
Платформа: Android
⭐️: 764
  Compose Rich Editor на GitHub: https://github.com/MohamedRejeb/Compose-Rich-Editor
Платформа: Android
⭐️: 764
Один «подводный камень» в Jetpack Compose и как его можно исправить
В этой небольшой статье я расскажу об одном подводном камне, с которым вы вполне можете столкнуться при использовании Jetpack Compose. Я также объясню, как его обойти. Это связано с распространением касаний, макетами и Поверхностью в composable.
Статья: https://apptractor.ru/info/articles/odin-podvodnyy-kamen-v-jetpack-compose-i-kak-ego-mozhno-ispravit.html
Платформа: Android
  В этой небольшой статье я расскажу об одном подводном камне, с которым вы вполне можете столкнуться при использовании Jetpack Compose. Я также объясню, как его обойти. Это связано с распространением касаний, макетами и Поверхностью в composable.
Статья: https://apptractor.ru/info/articles/odin-podvodnyy-kamen-v-jetpack-compose-i-kak-ego-mozhno-ispravit.html
Платформа: Android
Оптимизация приложения для сетевой доступности
Доступность сети — важный аспект для приложений, полагающихся на сетевые возможности. Ваши пользователи не всегда будут иметь хорошее подключение к Интернету, поэтому оптимизация приложения для плохих сетевых условий очень важна.
Мы можем использовать несколько методов для соответствующей оптимизации нашего приложения, но очень важно знать о распространенных ошибках, когда вы это делаете. После написания нескольких сетевых фреймворков и десятков приложений, пришло время поделиться с вами моими лучшими практиками, чтобы предотвратить ошибки, которые я совершил в прошлом.
Статья: https://apptractor.ru/info/articles/optimizatsiya-prilozheniya-dlya-setevoy-dostupnosti.html
Платформа: iOS
  Доступность сети — важный аспект для приложений, полагающихся на сетевые возможности. Ваши пользователи не всегда будут иметь хорошее подключение к Интернету, поэтому оптимизация приложения для плохих сетевых условий очень важна.
Мы можем использовать несколько методов для соответствующей оптимизации нашего приложения, но очень важно знать о распространенных ошибках, когда вы это делаете. После написания нескольких сетевых фреймворков и десятков приложений, пришло время поделиться с вами моими лучшими практиками, чтобы предотвратить ошибки, которые я совершил в прошлом.
Статья: https://apptractor.ru/info/articles/optimizatsiya-prilozheniya-dlya-setevoy-dostupnosti.html
Платформа: iOS
Протокол Identifiable в SwiftUI с примерами
Протокол Identifiable позволяет выполнять итерации по коллекции объектов внутри ForEach в SwiftUI. Хотя этот протокол выглядит простым и имеет всего одно свойство, в нем легко допустить распространенную ошибку, которая может привести к неожиданному поведению вашего представления.
Статья: https://apptractor.ru/info/articles/identifiable.html
Платформа: iOS
  Протокол Identifiable позволяет выполнять итерации по коллекции объектов внутри ForEach в SwiftUI. Хотя этот протокол выглядит простым и имеет всего одно свойство, в нем легко допустить распространенную ошибку, которая может привести к неожиданному поведению вашего представления.
Статья: https://apptractor.ru/info/articles/identifiable.html
Платформа: iOS
isowords - игра для iOS по поиску слов на кубиках. Надо соединять буквы, чтобы составить слова, чем длиннее, тем лучше, а когда буква будет использована в третий раз, кубик исчезнет, открыв новые буквы внутри. isowords - это большое и сложное приложение, построенное полностью на Swift. Логика iOS-клиента построена на Composable Architecture, а пользовательский интерфейс - в основном на SwiftUI с небольшим количеством SceneKit. Сервер также построен на Swift с использованием экспериментальных библиотек.
isowords на GitHub: https://github.com/pointfreeco/isowords
Платформа: iOS
⭐️: 2.5K
  isowords на GitHub: https://github.com/pointfreeco/isowords
Платформа: iOS
⭐️: 2.5K