Recall - это приложение-календарь, предназначенное для записи ежедневных событий, чтобы иметь возможность просматривать тенденции в продуктивности, достижении целей и управлении временем. Оно построено на базе Swift и SwiftUI, а на бэкенде использует MongoDB и Realm DeviceSync.
Recall на GitHub: https://github.com/Brian-Masse/Recall
Платформа: iOS
⭐️: 7
Recall на GitHub: https://github.com/Brian-Masse/Recall
Платформа: iOS
⭐️: 7
This media is not supported in your browser
VIEW IN TELEGRAM
Как синтаксический сахар Kotlin может сломать вам логику работы приложения
Kotlin предоставил много возможностей и позволил убрать написание однотипного кода, но это стало тем что разработчики стали забывать, что не весь синтаксический сахар позволит реализовать задуманное. В Java же сложность написания чего-то заставляла нас делать выбор осознанным. Не используйте бездумно всё, что вам предлагает язык программирования и IDE, реализуйте логику работы объектов вашей программы соотвественно их поведению!
Статья: https://habr.com/ru/articles/875460/
Платформа: Android
Kotlin предоставил много возможностей и позволил убрать написание однотипного кода, но это стало тем что разработчики стали забывать, что не весь синтаксический сахар позволит реализовать задуманное. В Java же сложность написания чего-то заставляла нас делать выбор осознанным. Не используйте бездумно всё, что вам предлагает язык программирования и IDE, реализуйте логику работы объектов вашей программы соотвественно их поведению!
Статья: https://habr.com/ru/articles/875460/
Платформа: Android
Темы в современных iOS-приложениях с UITraitCollection
Совсем недавно (с iOS 17) Apple представила довольно удобный способ обработки смены тем в приложениях для iOS. Раньше это было довольно мучительно. Но с появлением
Эта статья представляет собой законченное описание того, как добавить тематическое оформление в реальное приложение.
Статья: https://apptractor.ru/info/articles/temy-v-sovremennyh-ios-prilozheniyah-s-uitraitcollection.html
Платформа: iOS
Совсем недавно (с iOS 17) Apple представила довольно удобный способ обработки смены тем в приложениях для iOS. Раньше это было довольно мучительно. Но с появлением
UITraitAppearance все стало проще.Эта статья представляет собой законченное описание того, как добавить тематическое оформление в реальное приложение.
Статья: https://apptractor.ru/info/articles/temy-v-sovremennyh-ios-prilozheniyah-s-uitraitcollection.html
Платформа: iOS
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Отлаживаем неотлаживаемое
В статье Брайс Боствик делится своим опытом обхода различных защитных механизмов в iOS-приложении. Это приложение блокировало подключение отладчика, завершало работу при попытке инъекции кода и даже приводило к перезагрузке устройства при запуске на взломанном (jailbroken) iPhone.
Брайс подробно описывает, как приложение использует функцию
Кроме того, автор обнаружил, что приложение содержит функцию, которая вызывает бесконечный цикл создания снимков экрана с помощью метода
Брайс также рассматривает проблему инъекции кода, когда приложение завершается при попытке добавить новый код. Он объясняет, что это может быть связано с отсутствием корректной группы приложений (App Group) после повторной подписи приложения. В качестве решения он предлагает использовать метод swizzling для замены вызова
В целом, статья предоставляет ценные инсайты и практические методы обхода сложных защитных механизмов в iOS-приложениях. Эти знания могут быть полезны разработчикам, сталкивающимся с подобными проблемами при отладке и модификации приложений.
Статья: https://bryce.co/undebuggable/
Платформа: iOS
В статье Брайс Боствик делится своим опытом обхода различных защитных механизмов в iOS-приложении. Это приложение блокировало подключение отладчика, завершало работу при попытке инъекции кода и даже приводило к перезагрузке устройства при запуске на взломанном (jailbroken) iPhone.
Брайс подробно описывает, как приложение использует функцию
ptrace с параметром PT_DENY_ATTACH для предотвращения присоединения отладчика. Он предлагает несколько методов обхода этой защиты, включая установку точки останова перед вызовом ptrace и использование команды thread return в lldb для пропуска выполнения этой функции.Кроме того, автор обнаружил, что приложение содержит функцию, которая вызывает бесконечный цикл создания снимков экрана с помощью метода
snapshotViewAfterScreenUpdates, что приводит к перезагрузке устройства. Это служит дополнительной мерой защиты от отладки и модификации приложения.Брайс также рассматривает проблему инъекции кода, когда приложение завершается при попытке добавить новый код. Он объясняет, что это может быть связано с отсутствием корректной группы приложений (App Group) после повторной подписи приложения. В качестве решения он предлагает использовать метод swizzling для замены вызова
containerURLForSecurityApplicationGroupIdentifier на возвращение временного каталога, что позволяет обойти эту защиту.В целом, статья предоставляет ценные инсайты и практические методы обхода сложных защитных механизмов в iOS-приложениях. Эти знания могут быть полезны разработчикам, сталкивающимся с подобными проблемами при отладке и модификации приложений.
Статья: https://bryce.co/undebuggable/
Платформа: iOS
🔥1
CuteMusic - это простой, легкий и открытый музыкальный плеер для Android, написанный на Jetpack Compose & Media3. Фичи: воспроизводите любую песню из любого места, просто поделившись аудиофайлом с приложением, не скачивая его, удобный поиск по всей вашей музыке/альбомам/артистам, очень быстрый, никаких лишних разрешений, поддержка Material 3/You & Monet,
красивый ландшафтный UI, редактор тегов.
CuteMusic на GitHub: https://github.com/sosauce/CuteMusic
Платформа: Android
⭐️: 295
красивый ландшафтный UI, редактор тегов.
CuteMusic на GitHub: https://github.com/sosauce/CuteMusic
Платформа: Android
⭐️: 295
Вызов защищенного API из iOS-приложения на Swift
Пошаговое руководство по использованию OAuth 2.0 при доступе к защищенным API из iOS‑приложения на Swift с Auth0.
Статья: https://habr.com/ru/companies/otus/articles/875968/
Платформа: iOS
Пошаговое руководство по использованию OAuth 2.0 при доступе к защищенным API из iOS‑приложения на Swift с Auth0.
Статья: https://habr.com/ru/companies/otus/articles/875968/
Платформа: iOS
Интеграция Docker в Android разработку
Если говорить о Docker в контексте Android-разработки, то чаще всего кейсы его использования встречаются в тестировании и развертывании приложений.
Docker позволяет создать изолированную среду, в которой можно запустить приложение вместе со всеми его зависимостями, что очень ценится в тестировании. Ключевым фактором является то, что внесенные изменения, никак не влияют на другие контейнеры или систему. Конвейеризация же только ускоряет эти и другие процессы.
Звучит непросто? Но на самом же деле, в этом нет ничего сложного. Чтобы в этом убедиться, напишем небольшой Pipeline для Android проекта.
Статья: https://habr.com/ru/articles/875940/
Платформа: Android
Если говорить о Docker в контексте Android-разработки, то чаще всего кейсы его использования встречаются в тестировании и развертывании приложений.
Docker позволяет создать изолированную среду, в которой можно запустить приложение вместе со всеми его зависимостями, что очень ценится в тестировании. Ключевым фактором является то, что внесенные изменения, никак не влияют на другие контейнеры или систему. Конвейеризация же только ускоряет эти и другие процессы.
Звучит непросто? Но на самом же деле, в этом нет ничего сложного. Чтобы в этом убедиться, напишем небольшой Pipeline для Android проекта.
Статья: https://habr.com/ru/articles/875940/
Платформа: Android
Видео и подкасты за неделю на @AppFiles
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
(iOS Ru) Фото-пикер 2.0: как сделать фичу на 150%•
(iOS En) Guiding the Golden Age: Rebuilding Indoor Navigation for Rijksmuseum•
(iOS En) Mastering Color Views in SwiftUI•
(iOS En) Notification Deep Linking | Open Specific View From Push Notifications •
(iOS En) Scalable Continuous Integration for iOS•
(And Ru) Как сделать библиотеку, чтобы ей пользовались•
(And En) InputStreams & OutputStreams In Kotlin•
(And En) Working With Files In Kotlin•
(And En) Compose Performance for Us Humans•
(KMP En) Becoming a KMP Expert•
(KMP En) Multi-language Support in Kotlin/Compose Multiplatform•
(Flt En) Flutter Animations Made Easy•
(Dev Ru) Управление ресурсами в DevOps: от облачных решений до «железных» серверов•
(Dev Ru) Универсальное решение для мобильного автотестирования•
(Dev Ru) Смена профессии в IT — Карьера, Профессиональный рост•
(Dev En) Neetcode 150 Course - All Coding Interview Questions Solved❤1
qBitControl - удаленный клиент для qBittorrent. С его помощью вы можете добавлять торренты через .torrent-файлы или magnet-ссылки, следить за ходом загрузки, управлять торрентами - делать паузу/возобновление, просматривать и управлять торрент-файлами, получать статистику в реальном времени.
qBitControl на GitHub: https://github.com/Michael-128/qBitControl
Платформа: iOS
⭐️: 226
qBitControl на GitHub: https://github.com/Michael-128/qBitControl
Платформа: iOS
⭐️: 226
👍3
Смешивание цветов в SwiftUI
В последней версии SwiftUI компания Apple представила новую функцию - смешивание цветов. Это функция, которая позволяет выполнять различные творческие задачи. В этой статье мы рассмотрим смешивание цветов в SwiftUI и изучим возможности его применения.
Статья: https://apptractor.ru/info/articles/smeshivanie-tsvetov-v-swiftui.html
Платформа: iOS
В последней версии SwiftUI компания Apple представила новую функцию - смешивание цветов. Это функция, которая позволяет выполнять различные творческие задачи. В этой статье мы рассмотрим смешивание цветов в SwiftUI и изучим возможности его применения.
Статья: https://apptractor.ru/info/articles/smeshivanie-tsvetov-v-swiftui.html
Платформа: iOS
Погружение в мир Lint'a в Android-проекте (часть 2)
Продолжим рассматривать различные нюансы статического анализа с помощью Lint. Опираться будем на предыдущую статью. С момента её публикации прошло много времени, за которое вышло несколько значимых обновлений Android Gradle Plugin (а с ним и всех артефактов линтера), а также вторая версия Kotlin с новым компилятором. Вкратце рассмотрим наиболее заметные для нас изменения с небольшими примерами. Кроме того, удалось найти что-то похожее на полноценную документацию по lint (правда, редко обновляющуюся), наиболее интересные моменты оттуда тоже рассмотрим.
Статья: https://habr.com/ru/companies/domclick/articles/870650/ (первая часть)
Платформа: Android
Продолжим рассматривать различные нюансы статического анализа с помощью Lint. Опираться будем на предыдущую статью. С момента её публикации прошло много времени, за которое вышло несколько значимых обновлений Android Gradle Plugin (а с ним и всех артефактов линтера), а также вторая версия Kotlin с новым компилятором. Вкратце рассмотрим наиболее заметные для нас изменения с небольшими примерами. Кроме того, удалось найти что-то похожее на полноценную документацию по lint (правда, редко обновляющуюся), наиболее интересные моменты оттуда тоже рассмотрим.
Статья: https://habr.com/ru/companies/domclick/articles/870650/ (первая часть)
Платформа: Android
❤2
Как Android управляет маленькой памятью: Kswapd и LMK
Будучи мобильной операционной системой, Android приходится иметь дело с ограниченными ресурсами памяти. ОС тщательно следит за использованием памяти и принимает меры по ее освобождению, когда ее становится мало.
В этой статье мы рассмотрим, как Android распределяет память и реагирует на ситуации с нехваткой памяти.
Платформа Android работает на основе принципа, что свободная память - это зря потраченная память. Учитывая это правило, ОС Android всегда старается выделить всю доступную память.
Это очень полезная и удивительная техника. Так как система может хранить в памяти недавно использовавшиеся приложения, и пользователь может быстро переключиться на них без задержек при запуске.
В любом случае, память нужна системе, и Android OS использует ее эффективно. Но что делать, если вся память занята? Как открыть больше приложений?
Статья: https://apptractor.ru/info/articles/kak-android-upravlyaet-malenkoy-pamyatyu-kswapd-i-lmk.html
Платформа: Android
Будучи мобильной операционной системой, Android приходится иметь дело с ограниченными ресурсами памяти. ОС тщательно следит за использованием памяти и принимает меры по ее освобождению, когда ее становится мало.
В этой статье мы рассмотрим, как Android распределяет память и реагирует на ситуации с нехваткой памяти.
Платформа Android работает на основе принципа, что свободная память - это зря потраченная память. Учитывая это правило, ОС Android всегда старается выделить всю доступную память.
Это очень полезная и удивительная техника. Так как система может хранить в памяти недавно использовавшиеся приложения, и пользователь может быстро переключиться на них без задержек при запуске.
В любом случае, память нужна системе, и Android OS использует ее эффективно. Но что делать, если вся память занята? Как открыть больше приложений?
Статья: https://apptractor.ru/info/articles/kak-android-upravlyaet-malenkoy-pamyatyu-kswapd-i-lmk.html
Платформа: Android
❤1
Kompose Country Code Picker - это библиотека Jetpack Compose на основе Material 3, которая предоставляет возможность выбора кода страны в приложениях для Android.
Kompose Country Code Picker на GitHub: https://github.com/joelkanyi/kompose-country-code-picker
Платформа: Android
⭐️: 181
Kompose Country Code Picker на GitHub: https://github.com/joelkanyi/kompose-country-code-picker
Платформа: Android
⭐️: 181
Нюансы разработки PWA для Банка Санкт-Петербург от первого лица
Поддержка PWA в браузерах определенно развивается. Еще два года назад реализовать подобное приложение было бы сложно. Сейчас у нас все получилось. Но работы пришлось проделать много - было множество реквестов, что что-то хорошо работает на iOS, но не работает под Android, и наоборот. Мы же старались решать все эти проблемы так, чтобы код на обеих платформах был одинаковый - не хотели уходить от унификации. В целом это интересный опыт, который для нас еще не закончился.
Статья: https://habr.com/ru/companies/liptsoft/articles/877020/
Платформа: кроссплатформа
Поддержка PWA в браузерах определенно развивается. Еще два года назад реализовать подобное приложение было бы сложно. Сейчас у нас все получилось. Но работы пришлось проделать много - было множество реквестов, что что-то хорошо работает на iOS, но не работает под Android, и наоборот. Мы же старались решать все эти проблемы так, чтобы код на обеих платформах был одинаковый - не хотели уходить от унификации. В целом это интересный опыт, который для нас еще не закончился.
Статья: https://habr.com/ru/companies/liptsoft/articles/877020/
Платформа: кроссплатформа
🤡2
Будущее за адаптивностью: изменения в API ориентации и изменения размеров в Android 16
Начиная с Android 16 постепенно отменяются атрибуты манифеста и API, используемые для ограничения ориентации и изменения размера приложения, что позволит улучшить пользовательский опыт для многих приложений на разных устройствах.
Статья: https://apptractor.ru/info/articles/buduschee-za-adaptivnostyu-izmeneniya-v-api-orientatsii-i-izmeneniya-razmerov-v-android-16.html
Платформа: Android
Начиная с Android 16 постепенно отменяются атрибуты манифеста и API, используемые для ограничения ориентации и изменения размера приложения, что позволит улучшить пользовательский опыт для многих приложений на разных устройствах.
Статья: https://apptractor.ru/info/articles/buduschee-za-adaptivnostyu-izmeneniya-v-api-orientatsii-i-izmeneniya-razmerov-v-android-16.html
Платформа: Android
Меняем изображений у кнопки SwiftUI при нажатии
Как изменить изображение, которое показывает кнопка SwiftUI, во время нажатия пользователем? В этой статьи простой код, который меняет иконку при нажатии.
Статья: https://apptractor.ru/info/articles/menyaem-izobrazheniy-u-knopki-swiftui-pri-nazhatii.html
Платформа: iOS
Как изменить изображение, которое показывает кнопка SwiftUI, во время нажатия пользователем? В этой статьи простой код, который меняет иконку при нажатии.
Статья: https://apptractor.ru/info/articles/menyaem-izobrazheniy-u-knopki-swiftui-pri-nazhatii.html
Платформа: iOS
Удаленная локализация в приложениях Jetpack Compose
В приложениях Android эти статические строки обычно определяются в файле strings.xml и хранятся локально. При необходимости изменений они обновляются в коде и выпускаются в следующей версии приложения.
Можно сделать удаленное хранение строк, однако при этом возникают уникальные проблемы, такие как обеспечение эффективного обновления, поддержание согласованности данных и быстрое отображение обновленного текста для пользователей. В этой статье мы рассмотрим реальное решение по управлению удаленной локализацией в приложениях Jetpack Compose.
Статья: https://apptractor.ru/info/articles/udalennaya-lokalizatsiya-v-prilozheniyah-jetpack-compose.html
Платформа: Android
В приложениях Android эти статические строки обычно определяются в файле strings.xml и хранятся локально. При необходимости изменений они обновляются в коде и выпускаются в следующей версии приложения.
Можно сделать удаленное хранение строк, однако при этом возникают уникальные проблемы, такие как обеспечение эффективного обновления, поддержание согласованности данных и быстрое отображение обновленного текста для пользователей. В этой статье мы рассмотрим реальное решение по управлению удаленной локализацией в приложениях Jetpack Compose.
Статья: https://apptractor.ru/info/articles/udalennaya-lokalizatsiya-v-prilozheniyah-jetpack-compose.html
Платформа: Android
SwiftGPT - библиотека от @ios_appdev для интеграции возможностей ChatGPT в iOS/macOS/Linux проекты.
Особенности:
• Совместимость с официальным OpenAI API: интерфейс основан на стилях OpenAI.
• Поддержка Swift 6 и Swift Concurrency.
• Мультиплатформенность: работает на всех платформах Apple (iOS, macOS, watchOS, tvOS) и даже на Linux.
Основные функции:
• Поддержка Chat Completions (генерация текста)
• В планах: Assistants API, Text-to-Speech, Text Trannoscriptions, Image generation и др.
• Возможность указать URL для запросов (актуально для РФ, когда делаешь свой прокси)
Пример использования:
SwiftGPT на GitHub: https://github.com/DobbyWanKenoby/SwiftGPT
Платформа: iOS
⭐️: 11
Особенности:
• Совместимость с официальным OpenAI API: интерфейс основан на стилях OpenAI.
• Поддержка Swift 6 и Swift Concurrency.
• Мультиплатформенность: работает на всех платформах Apple (iOS, macOS, watchOS, tvOS) и даже на Linux.
Основные функции:
• Поддержка Chat Completions (генерация текста)
• В планах: Assistants API, Text-to-Speech, Text Trannoscriptions, Image generation и др.
• Возможность указать URL для запросов (актуально для РФ, когда делаешь свой прокси)
Пример использования:
import SwiftGPT
// Установка API key
OpenAI.Configuration.apiKey = .apiKey("your-api-key")
Task {
// создание сессии
let chat = OpenAI.Chat()
// запрос
let response = try await chat.completions(prompt: "Как погода сегодня?")
print("Ответ: \(response)")
}
SwiftGPT на GitHub: https://github.com/DobbyWanKenoby/SwiftGPT
Платформа: iOS
⭐️: 11
Корутины Kotlin в продакшене: уроки и подводные камни
Запустив в прод корутины, наша команда столкнулась с многочисленными проблемами, которые не были сразу очевидны из документации. Несмотря на то, что в теории корутины элегантны, их практическая реализация сопряжена с несколькими нюансами, которые могут привести к серьезным проблемам. Вот что мы узнали, пройдя этим трудным путем.
Статья: https://apptractor.ru/info/articles/korutiny-kotlin-v-prodakshene-uroki-i-podvodnye-kamni.html
Платформа: Android
Запустив в прод корутины, наша команда столкнулась с многочисленными проблемами, которые не были сразу очевидны из документации. Несмотря на то, что в теории корутины элегантны, их практическая реализация сопряжена с несколькими нюансами, которые могут привести к серьезным проблемам. Вот что мы узнали, пройдя этим трудным путем.
Статья: https://apptractor.ru/info/articles/korutiny-kotlin-v-prodakshene-uroki-i-podvodnye-kamni.html
Платформа: Android
🤡2
Путь к стабильности: как мы снизили потребление оперативной памяти в iOS-приложении
Чтобы избежать перегрузки системы и крашей приложения, мы решили разработать инструмент для мониторинга памяти. Его задача — отслеживать потребление ресурсов на этапе тестирования и заранее предупреждать разработчиков о потенциальных перегрузках, чтобы проблемный код не попал к пользователям.
Статья: https://habr.com/ru/companies/aliexpress_russia/articles/877058/
Платформа: iOS
Чтобы избежать перегрузки системы и крашей приложения, мы решили разработать инструмент для мониторинга памяти. Его задача — отслеживать потребление ресурсов на этапе тестирования и заранее предупреждать разработчиков о потенциальных перегрузках, чтобы проблемный код не попал к пользователям.
Статья: https://habr.com/ru/companies/aliexpress_russia/articles/877058/
Платформа: iOS
This media is not supported in your browser
VIEW IN TELEGRAM
Why Not Compose! - коллекция анимаций, композиций и пользовательских интерфейсов, сделанных с использованием Jetpack Compose. Можно назвать это поваренной книгой Jetpack Compose, витриной или игровой площадкой.
Фичи: MVVM, Navigation Component, Hilt, поддержка темного режима, Material 3, Gradle Kotlin DSL, CI/CD.
Что есть: счетчики, работа с Lottie, выбор изображения и его обрезка, работа с правами, извлечение данных и пейджинг, крестики нолики, работа с ExoPlayer, глубокие ссылки и многое другое.
Why Not Compose! на GitHub: https://github.com/ImaginativeShohag/Why-Not-Compose
Платформа: Android
⭐️: 586
Фичи: MVVM, Navigation Component, Hilt, поддержка темного режима, Material 3, Gradle Kotlin DSL, CI/CD.
Что есть: счетчики, работа с Lottie, выбор изображения и его обрезка, работа с правами, извлечение данных и пейджинг, крестики нолики, работа с ExoPlayer, глубокие ссылки и многое другое.
Why Not Compose! на GitHub: https://github.com/ImaginativeShohag/Why-Not-Compose
Платформа: Android
⭐️: 586