Как в Duolingo удалили 10,000 строк кода с помощью Reaper
Недавно мы изучили количество строк кода в каждом выпуске приложения, начиная с Duolingo 4.0 в 2014 году. Наша кодовая база сейчас почти в 20 раз больше, чем десять лет назад! Хотя большая кодовая база не является чем-то плохим по своей сути, есть определенные преимущества в ее сокращении.
Статья: https://apptractor.ru/info/articles/kak-v-duolingo-udalili-10-000-strok-koda-s-pomoschyu-reaper.html
Платформа: iOS
Недавно мы изучили количество строк кода в каждом выпуске приложения, начиная с Duolingo 4.0 в 2014 году. Наша кодовая база сейчас почти в 20 раз больше, чем десять лет назад! Хотя большая кодовая база не является чем-то плохим по своей сути, есть определенные преимущества в ее сокращении.
Статья: https://apptractor.ru/info/articles/kak-v-duolingo-udalili-10-000-strok-koda-s-pomoschyu-reaper.html
Платформа: iOS
Стартовые профили: быстрое решение для болезненно медленных стартов приложений
Стартовый профиль - это часть Baseline профиля, направленная на улучшение запуска приложений. Профиль главным образом организует и приоритизирует код в DEX-файлах, чтобы обеспечить более эффективную компиляцию и выполнение кода, необходимого для запуска приложения. Такая реорганизация сокращает время, необходимое для компиляции и интерпретации необходимых путей кода, что приводит к более быстрому запуску приложения.
Статья: https://proandroiddev.com/startup-profiles-the-quick-fix-for-painfully-slow-app-startups-2f1c9c0a8fd9
Платформа: Android
Поставьте 👍, если хотите эту статью на русском.
Стартовый профиль - это часть Baseline профиля, направленная на улучшение запуска приложений. Профиль главным образом организует и приоритизирует код в DEX-файлах, чтобы обеспечить более эффективную компиляцию и выполнение кода, необходимого для запуска приложения. Такая реорганизация сокращает время, необходимое для компиляции и интерпретации необходимых путей кода, что приводит к более быстрому запуску приложения.
Статья: https://proandroiddev.com/startup-profiles-the-quick-fix-for-painfully-slow-app-startups-2f1c9c0a8fd9
Платформа: Android
Поставьте 👍, если хотите эту статью на русском.
👍4
Библиотека Texty создана на основе базового текста Jetpack Compose. Это высококонфигурируемая библиотека Compose Multiplatform, которая позволяет отображать текст в различных стилях и обладает разными полезными функциями, вроде скроллинга или постепенного раскрытия. Независимо от того, создаете ли вы Android, iOS, настольное или веб-приложение, она предоставляет единый API для создания динамичных и визуально привлекательных текстовых меток.
Texty на GitHub: https://github.com/ArjunJadeja/Texty
Платформа: Android/кроссплатформа
⭐️: 38
Texty на GitHub: https://github.com/ArjunJadeja/Texty
Платформа: Android/кроссплатформа
⭐️: 38
Forwarded from Mobile Development by AppTractor
Приглашаем на Mobile PeerLab #2 — камерную встречу для мобильных разработчиков
10 октября в Москве во второй раз пройдет PeerLab от экспертов Райдтеха Яндекс Go. Специалисты разберут кейсы, которые предложат участники: поговорят о DI-архитектуре, легаси и скорости сборки, сравнят KMP и Flutter, объяснят, чем отличаются техлиды от фичалидов, и поделятся советами о тестировании фичей.
После разбора кейсов гостей ждет afterparty, feature dev консультация и активности в реальной качалке — будем тренировать прогерские мышцы!
Реальные кейсы и ответы экспертов Яндекса на ваши вопросы о мобильной разработке — регистрируйтесь и зовите коллег!
Количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки
10 октября в Москве во второй раз пройдет PeerLab от экспертов Райдтеха Яндекс Go. Специалисты разберут кейсы, которые предложат участники: поговорят о DI-архитектуре, легаси и скорости сборки, сравнят KMP и Flutter, объяснят, чем отличаются техлиды от фичалидов, и поделятся советами о тестировании фичей.
После разбора кейсов гостей ждет afterparty, feature dev консультация и активности в реальной качалке — будем тренировать прогерские мышцы!
Реальные кейсы и ответы экспертов Яндекса на ваши вопросы о мобильной разработке — регистрируйтесь и зовите коллег!
Количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки
Быстрый доступ к VPN в iOS с помощью App Intents
Меня зовут Антон Долганов, я iOS-разработчик в компании Контур. Я работаю над инфраструктурными модулями и параллельно поддерживаю наше приложение Контур.Коннект, которое используется для подключения к внутреннему VPN и даёт доступ к корпоративным сервисам.
Недавно мы выпустили обновление Коннекта, добавив поддержку Быстрых команд (Shortcuts). Теперь можно включать и отключать VPN, даже не заходя в приложение. В этой статье я расскажу, как я это реализовал и почему это полезно.
Статья: https://habr.com/ru/companies/skbkontur/articles/846366/
Платформа: iOS
Меня зовут Антон Долганов, я iOS-разработчик в компании Контур. Я работаю над инфраструктурными модулями и параллельно поддерживаю наше приложение Контур.Коннект, которое используется для подключения к внутреннему VPN и даёт доступ к корпоративным сервисам.
Недавно мы выпустили обновление Коннекта, добавив поддержку Быстрых команд (Shortcuts). Теперь можно включать и отключать VPN, даже не заходя в приложение. В этой статье я расскажу, как я это реализовал и почему это полезно.
Статья: https://habr.com/ru/companies/skbkontur/articles/846366/
Платформа: iOS
Как устроен сборщик метрик Android-проекта
Меня зовут Даниил, я Android-разработчик в команде VK ID SDK в VK. Наша команда создала легковесный SDK для авторизации через приложения экосистемы VK. Он состоит из кнопки One Tap для входа в один клик, кнопки входа в другую учётную запись и виджета для авторизации через Mail или Одноклассники.
Работая над продуктом, мы поняли, что необходимо оценивать его техническое качество: считать размер SDK, тестового покрытия, скорость сборки и многое другое. Нам был нужен сборщик метрик качества кода.
Я расскажу, как мы писали плагин для сбора метрик и с какими проблемами столкнулись. Вы узнаете, как устроен наш сборщик изнутри, и даже сможете потестить его в своём проекте.
Статья: https://habr.com/ru/companies/vk/articles/847416/
Платформа: Android
Меня зовут Даниил, я Android-разработчик в команде VK ID SDK в VK. Наша команда создала легковесный SDK для авторизации через приложения экосистемы VK. Он состоит из кнопки One Tap для входа в один клик, кнопки входа в другую учётную запись и виджета для авторизации через Mail или Одноклассники.
Работая над продуктом, мы поняли, что необходимо оценивать его техническое качество: считать размер SDK, тестового покрытия, скорость сборки и многое другое. Нам был нужен сборщик метрик качества кода.
Я расскажу, как мы писали плагин для сбора метрик и с какими проблемами столкнулись. Вы узнаете, как устроен наш сборщик изнутри, и даже сможете потестить его в своём проекте.
Статья: https://habr.com/ru/companies/vk/articles/847416/
Платформа: Android
👍2
3 совета для улучшения читабельности кода
В этой статье вы узнаете 3 простых совета, которые помогут сделать вашу кодовую базу более качественной и читабельной:
• Используйте ранние возвраты
• Избегайте отрицаний в условных выражениях
• Создавайте значения и переменные как можно позже
Статья: https://apptractor.ru/info/articles/3-soveta-dlya-uluchsheniya-chitabelnosti-koda.html
Платформа: программирование
В этой статье вы узнаете 3 простых совета, которые помогут сделать вашу кодовую базу более качественной и читабельной:
• Используйте ранние возвраты
• Избегайте отрицаний в условных выражениях
• Создавайте значения и переменные как можно позже
Статья: https://apptractor.ru/info/articles/3-soveta-dlya-uluchsheniya-chitabelnosti-koda.html
Платформа: программирование
Почему ваша задача выполняется в главном потоке?
Задача (Task) - это единица асинхронной работы в Swift Concurrency. Создание задачи - это самый простой способ внедрить асинхронный контекст в ваш код:
Используя Task, мы можем вызывать await и получать данные асинхронно, даже если сама функция setupView() не помечена как async.
Поскольку мы инициализируем их с помощью замыкания, стандартное* поведение при создании Task не сразу становится очевидным: они будут выполняться в том же потоке, в котором были созданы.
Давайте рассмотрим, как это повлияет на наш код.
Статья: https://apptractor.ru/info/articles/pochemu-vasha-zadacha-vypolnyaetsya-v-glavnom-potoke.html
Платформа: iOS
Задача (Task) - это единица асинхронной работы в Swift Concurrency. Создание задачи - это самый простой способ внедрить асинхронный контекст в ваш код:
func setupView() {
Task {
self.data = await fetchData()
}
}Используя Task, мы можем вызывать await и получать данные асинхронно, даже если сама функция setupView() не помечена как async.
Поскольку мы инициализируем их с помощью замыкания, стандартное* поведение при создании Task не сразу становится очевидным: они будут выполняться в том же потоке, в котором были созданы.
Давайте рассмотрим, как это повлияет на наш код.
Статья: https://apptractor.ru/info/articles/pochemu-vasha-zadacha-vypolnyaetsya-v-glavnom-potoke.html
Платформа: iOS
Каждое приложение в App Store должно содержать такие важные ссылки, как политика конфиденциальности и, если применимо, условия использования (для покупок в приложениях), чтобы соответствовать требованиям Apple. Многие приложения решают эту задачу, добавляя в настройках раздел «Ссылки», в котором содержатся дополнительные полезные ссылки, такие как рейтинги приложений, часто задаваемые вопросы и варианты поддержки.
Именно здесь на помощь приходит LinksKit: он предлагает простое, готовое к использованию решение для работы со всеми этими распространенными ссылками, которое сэкономит вам кучу времени. Будь то юридические, справочные или рекламные ссылки, LinksKit справится с этой задачей. А для macOS он даже поддерживает добавление этих ссылок прямо в меню «Справка».
LinksKit на GitHub: https://github.com/FlineDev/LinksKit
Платформа: iOS
⭐️: 16
Именно здесь на помощь приходит LinksKit: он предлагает простое, готовое к использованию решение для работы со всеми этими распространенными ссылками, которое сэкономит вам кучу времени. Будь то юридические, справочные или рекламные ссылки, LinksKit справится с этой задачей. А для macOS он даже поддерживает добавление этих ссылок прямо в меню «Справка».
LinksKit на GitHub: https://github.com/FlineDev/LinksKit
Платформа: iOS
⭐️: 16
Как реализовать спойлер-эффект как в Telegram на Swift?
Спойлеры стали неотъемлемой частью общения в мессенджерах и социальных сетях. Они позволяют скрывать часть информации до тех пор, пока пользователь не захочет ее увидеть. В Telegram спойлер-эффект сопровождается красивой анимацией рассыпающихся точек. В этой статье мы рассмотрим, как реализовать подобный спойлер-эффект в iOS-приложении на Swift, используяCAEmitterLayer и UITextView .
Статья: https://habr.com/ru/articles/847236/
Платформа: iOS
Спойлеры стали неотъемлемой частью общения в мессенджерах и социальных сетях. Они позволяют скрывать часть информации до тех пор, пока пользователь не захочет ее увидеть. В Telegram спойлер-эффект сопровождается красивой анимацией рассыпающихся точек. В этой статье мы рассмотрим, как реализовать подобный спойлер-эффект в iOS-приложении на Swift, используя
Статья: https://habr.com/ru/articles/847236/
Платформа: iOS
Новый подход к безопасному управлению состояниями в Kotlin-приложениях
Вот уже несколько лет я занимаюсь разработкой высокопроизводительных, полностью асинхронных, реактивных, мультиплатформенных приложений. За это время я успел наткнуться на несколько довольно тонких и трудно отлаживаемых проблем с управлением состояниями. В этой статье я хотел бы поделиться с вами своим опытом, который поможет вам сэкономить множество часов и нервных клеток, и предложить новый подход к управлению состояниями, который лично я никогда раньше не встречал и который навсегда избавит вас от этих проблем.
Статья: https://habr.com/ru/companies/otus/articles/847888/
Платформа: Android
Вот уже несколько лет я занимаюсь разработкой высокопроизводительных, полностью асинхронных, реактивных, мультиплатформенных приложений. За это время я успел наткнуться на несколько довольно тонких и трудно отлаживаемых проблем с управлением состояниями. В этой статье я хотел бы поделиться с вами своим опытом, который поможет вам сэкономить множество часов и нервных клеток, и предложить новый подход к управлению состояниями, который лично я никогда раньше не встречал и который навсегда избавит вас от этих проблем.
Статья: https://habr.com/ru/companies/otus/articles/847888/
Платформа: Android
❤1
Видео и подкасты за неделю @AppFiles
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
#ios #android #mobile #video
•
(iOS Ru) Как мы запекали 3D-пиццу•
(iOS Ru) Есть ли ORM круче SwiftData•
(iOS Ru) Макросы спустя полгода: не все так гладко•
(iOS Ru) DriverKit: гоняем данные по проводу без мам, пап и MFi•
(iOS En) Recreate Apple's Stopwatch: Mastering Millisecond Precision in SwiftUI•
(iOS En) Видео SwiftCraft 2024•
(iOS En) Alternative App Icons in Xcode 16•
(iOS En) New in Xcode16: the macro @Previewable•
(iOS En) SwiftUI - Support Prior iOS Versions - Backward Compatibility•
(iOS En) Embedded Swift and 16x16 LED Matrix Animation Overview•
(iOS En) Preview Updates in Xcode 16•
(iOS En) Auto Scrolling Infinite Carousel - iOS 18•
(And En) Integrating the Gemini API in Android•
(And En) How to Navigate From ViewModels With a Custom Navigator•
(And En) Android Application with Microsoft Identity Platform•
(And En) Applying the Factory Method and Abstract Factory Patterns in Kotlin•
(Crs En) Multiplayer drawing with Flutter and Serverpod. Full tutorial.•
(Dev Ru) Уволить нельзя терпеть•
(Dev Ru) Lua – идеальный встраиваемый язык•
(Dev En) The reality of the developer job market with ex-Googler YK Sugi#ios #android #mobile #video
KLogX - это библиотека логирования Kotlin, разработанная для обеспечения гибкого и эффективного способа протоколирования сообщений в вашем приложении. Она поддерживает различные уровни регистрации (INFO, WARN, ERROR и т.п.) и цели (INTERNAL, EXTERNAL, REMOTE), а также позволяет регистрировать пользовательские функции для обработки сообщений лога на основе фильтра.
KLogX на GitHub: https://github.com/mohsenoid/KLogX
Платформа: Android
⭐️: 8
KLogX на GitHub: https://github.com/mohsenoid/KLogX
Платформа: Android
⭐️: 8
Создание уведомлений на языке Kotlin
Недавно мне нужно было добавить в мое мобильное приложение уведомление, которое писало бы определенный текст в 9 утра. Я потратила некоторое время на чтение документации и разговор с чатом, чтоб понять как и что делать, и я думаю таким же начинающим программистам будет интересно или полезно почитать мои заметки и разбор кода.
Статья: https://habr.com/ru/articles/847020/
Платформа: Android
Недавно мне нужно было добавить в мое мобильное приложение уведомление, которое писало бы определенный текст в 9 утра. Я потратила некоторое время на чтение документации и разговор с чатом, чтоб понять как и что делать, и я думаю таким же начинающим программистам будет интересно или полезно почитать мои заметки и разбор кода.
Статья: https://habr.com/ru/articles/847020/
Платформа: Android
Как Discord сократил Websocket трафик на 40%
В Discord мы постоянно думаем о том, как улучшить наши сервисы и повысить производительность. Ведь чем быстрее работает наше приложение, тем быстрее вы сможете вернуться к своим друзьям и разговорам!
В течение последних шести месяцев мы работали над снижением трафика в каналах связи, используемых нашими клиентами, особенно на iOS и Android, надеясь, что уменьшение передаваемых данных приведет к более быстрому отклику.
Статья: https://apptractor.ru/info/articles/kak-discord-sokratil-websocket-trafik-na-40.html
Платформа: разработка
В Discord мы постоянно думаем о том, как улучшить наши сервисы и повысить производительность. Ведь чем быстрее работает наше приложение, тем быстрее вы сможете вернуться к своим друзьям и разговорам!
В течение последних шести месяцев мы работали над снижением трафика в каналах связи, используемых нашими клиентами, особенно на iOS и Android, надеясь, что уменьшение передаваемых данных приведет к более быстрому отклику.
Статья: https://apptractor.ru/info/articles/kak-discord-sokratil-websocket-trafik-na-40.html
Платформа: разработка
This media is not supported in your browser
VIEW IN TELEGRAM
Swipe Cell SwiftUI - это простое swipe-to-reveal представление. Оно поддерживает iOS/iPadOS 14 или более поздние версии. Цель - заменить стандартный модификатор SwiftUI List .onDelete(perform: ...), поскольку его функциональность ограничена только удалением и работает только со строками списка. Кроме того, строки в iOS 14 LazyVStack по умолчанию не поддерживают пролистывание для раскрытия кнопок. Swipe Cell SwiftUI позволяет добавлять несколько кнопок меню с левой и правой стороны, а также поддерживает функцию смахивания (например, для удаления).
Swipe Cell SwiftUI на GitHub: https://github.com/DominikButz/SwipeCellSUI
Платформа: iOS
⭐️: 61
Swipe Cell SwiftUI на GitHub: https://github.com/DominikButz/SwipeCellSUI
Платформа: iOS
⭐️: 61
Восстановление базы для миллионов пользователей
Это история о приложении для обмена сообщениями, которым пользуются миллиарды пользователей.
Приложение придерживается чрезвычайно строгой модели конфиденциальности. Приложение никогда не хранит данные пользователя на серверах. Все сообщения end-to-end шифруются.
Многие пользователи этого приложения, особенно на Android, регулярно удаляли и переустанавливали его. Чтобы предотвратить потерю сообщений, их резервное копирование осуществляется на SD-карту пользователя. В модели безопасности Android SD-карта является общедоступным местом хранения данных, доступным всем приложениям. Поэтому, чтобы сохранить конфиденциальность сообщений, резервные копии зашифровались.
И вдруг неожиданно поступил всплеск жалоб от пользователей на то, что приложение не смогло восстановить их сообщения. Хотя у нас были некоторые внутренние показатели, подтверждающие это, не было возможности отладить ошибку без доступа к некоторым образцам для воспроизведения ситуации.
Статья: https://apptractor.ru/info/articles/vosstanovlenie-bazy-dlya-millionov-polzovateley.html
Платформа: разработка
Это история о приложении для обмена сообщениями, которым пользуются миллиарды пользователей.
Приложение придерживается чрезвычайно строгой модели конфиденциальности. Приложение никогда не хранит данные пользователя на серверах. Все сообщения end-to-end шифруются.
Многие пользователи этого приложения, особенно на Android, регулярно удаляли и переустанавливали его. Чтобы предотвратить потерю сообщений, их резервное копирование осуществляется на SD-карту пользователя. В модели безопасности Android SD-карта является общедоступным местом хранения данных, доступным всем приложениям. Поэтому, чтобы сохранить конфиденциальность сообщений, резервные копии зашифровались.
И вдруг неожиданно поступил всплеск жалоб от пользователей на то, что приложение не смогло восстановить их сообщения. Хотя у нас были некоторые внутренние показатели, подтверждающие это, не было возможности отладить ошибку без доступа к некоторым образцам для воспроизведения ситуации.
Статья: https://apptractor.ru/info/articles/vosstanovlenie-bazy-dlya-millionov-polzovateley.html
Платформа: разработка
Как перехватывают зашифрованный HTTS-трафик на мобильном устройстве
Реверс-инжиниринг VPN-сервиса Onavo Protect под Android позволил определить методы, которые можно использовать для перехвата зашифрованного HTTPS-трафика на мобильном устройстве. Если вкратце, злоумышленник должен поставить на телефон собственное приложение и сертификат УЦ (удостоверяющего центра).
Например, в РФ вступил в действие закон, который требует с 2025 года обязательной предустановки на все смартфоны конкретных приложений. Теоретически, при наличии уязвимостей это может угрожать безопасности многих пользователей.
Статья: https://habr.com/ru/companies/globalsign/articles/848632/
Платформа: Android
Реверс-инжиниринг VPN-сервиса Onavo Protect под Android позволил определить методы, которые можно использовать для перехвата зашифрованного HTTPS-трафика на мобильном устройстве. Если вкратце, злоумышленник должен поставить на телефон собственное приложение и сертификат УЦ (удостоверяющего центра).
Например, в РФ вступил в действие закон, который требует с 2025 года обязательной предустановки на все смартфоны конкретных приложений. Теоретически, при наличии уязвимостей это может угрожать безопасности многих пользователей.
Статья: https://habr.com/ru/companies/globalsign/articles/848632/
Платформа: Android
Реализация Shared With You в SwiftUI
Эта функция была введена в iOS 16, но лишь немногие приложения используют ее в своих интересах. Как вы скоро увидите, ее очень легко реализовать, поэтому если в вашем приложении есть контент, которым можно поделиться, я настоятельно рекомендую добавить эту функцию в ваше приложение.
Статья: https://apptractor.ru/info/articles/shared-with-you.html
Платформа: iOS
Эта функция была введена в iOS 16, но лишь немногие приложения используют ее в своих интересах. Как вы скоро увидите, ее очень легко реализовать, поэтому если в вашем приложении есть контент, которым можно поделиться, я настоятельно рекомендую добавить эту функцию в ваше приложение.
Статья: https://apptractor.ru/info/articles/shared-with-you.html
Платформа: iOS
Виртуализация iOS на Apple Silicon
В этой статье я рассказываю о том, как мне удалось добиться виртуализации iOS на компьютерах Apple Mac, попутно исследуя многие внутренние компоненты.
Статья: https://nickb.website/blog/virtualizing-ios-on-apple-silicon
Платформа: iOS
В этой статье я рассказываю о том, как мне удалось добиться виртуализации iOS на компьютерах Apple Mac, попутно исследуя многие внутренние компоненты.
Статья: https://nickb.website/blog/virtualizing-ios-on-apple-silicon
Платформа: iOS
🤔1
Transcribro - это приватная клавиатура и сервис распознавания речи для Android-устройств. Он использует whisper.cpp для запуска семейства моделей OpenAI Whisper и Silero VAD для распознавания голосовой активности.
В приложении есть клавиатура голосового ввода, позволяющая набирать текст с помощью речи. Оно также может использоваться другими приложениями либо явно, либо при установке в качестве выбранного пользователем приложения для преобразования речи в текст.
Transcribro на GitHub: https://github.com/soupslurpr/Transcribro
Платформа: Android
⭐️: 370
В приложении есть клавиатура голосового ввода, позволяющая набирать текст с помощью речи. Оно также может использоваться другими приложениями либо явно, либо при установке в качестве выбранного пользователем приложения для преобразования речи в текст.
Transcribro на GitHub: https://github.com/soupslurpr/Transcribro
Платформа: Android
⭐️: 370