AppFiles - Mobile Development
2K subscribers
2.56K photos
33 videos
8 files
3.44K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Pixel не дал позвонить 911: разбор ошибки в Android и Microsoft Teams

Что если вам срочно нужно позвонить в экстренную службу, но ваш Pixel просто… зависает? Как ошибки в Android и Microsoft Teams привели к такой ситуации, разбирается в этой статье.

Перевод статьи: https://apptractor.ru/911
Платформа: Android
👋: 520
This media is not supported in your browser
VIEW IN TELEGRAM
Linenoise-Swift - библиотека Swift, реализующая автозамену, автодополнение и историю для ввода строк.

Библиотека на GitHub: https://github.com/andybest/linenoise-swift
Платформа: Swift
⭐️: 98
Стэнфордский университет открыл курс “Введение в робототехнику”

Цель CS223A — познакомить вас с основами моделирования, проектирования, планирования и управления роботизированными системами. По сути, материал, рассматриваемый в этом курсе, представляет собой краткий обзор необходимых знаний из геометрии, кинематики, статики, динамики и управления.

Платформа: роботы
Отступы Edge Insets для UIButton

Вы управляете тремя отступами - imageEdgeInsets, titleEdgeInsets и contentEdgeInsets. Чаще всего ваша задача сводится к выставлению симметрично-противоположных значений.

Статья: https://sparrowcode.by/edge-insets-uibuttonr
Платформа: iOS
AndroidAdManager - библиотека для работы с Admob, Mopup, Facebook-Bidding и Audience Networks. Упрощает и улучшает работу с баннерами и Interstitial рекламой.

Проект на GitHub: https://github.com/hashimTahir/AndroidAdManager
Платформа: Android
⭐️: 7
Оценка эффективности страниц в iOS в Airbnb

В Airbnb создали рейтинг Page Performance Score для предоставления инженерам и специалистам по обработке данных множества ориентированных на пользователя показателей производительности, чтобы лучше понимать и улучшать продукты. В этой статье разработчики подробнее описывают то, как определяются эти метрики и используются в iOS.

Перевод статьи: https://apptractor.ru/bnbios
Платформа: iOS
👋: 153
This media is not supported in your browser
VIEW IN TELEGRAM
Ускоряем панораму машины в приложении Авто.ру

В приложении Авто.ру есть такая фича — панорамы автомобилей. Она позволяет любому сделать 3D-фото своей машины, показать её во всей красе. Как это работает и как нашим коллегам из ML удалось уместить в смартфон то, что раньше требовало целого ангара, напичканного дорогостоящим оборудованием, уже рассказывал на Хабре. Но отснять панораму — лишь полдела. Затем её предстоит воспроизвести, причём сделать это одинаково хорошо и на топовом флагмане, и на бюджетном смартфоне.

Статья: https://apptractor.ru/yapan
Платформа: Android
⬆️: 27
Даже не знаю, зачем это может пригодиться не в играх, но вещь забавная. SwiftUIJoystick - джойстик для приложения на SwiftUI. Можно менять внешний вид поля и самой метки, координаты.

Библиотека на GitHub: https://github.com/michael94ellis/SwiftUIJoystick
Платформа: iOS
⭐️: 9
Глубокое погружение в эксплоит NSO для iMessage: удаленное выполнение кода

Google распотрошил экслоит израильской NSO и это замечательная конструкция.

Люди посылают друг другу смешные анимированные гифки. iMessage хочет, чтобы они крутились вечно. Для этого в заголовке GIF нужно поправить флажок, и чтобы не портить файл iMessage делает его копию. Казалось бы, что могло пойти не так?

По ошибке вместо копирования вызывается рендеринг картинок. А он уже на расширения файлов не смотрит. И NSO под видом гифки подсовывает PDF. А внутри PDF-ки картинка JBIG2 - это такой доисторический формат графики для ксероксов. Чтобы файлы получались маленькими, то он режет картинку на кусочки, и если куски, например буква "а" достаточно похожи между собой, то он использует один глиф для всего, как типографскую литеру.

Из-за этого случались многие беды. Кодек мог к примеру подумать что цифра 6 достаточно похожа на цифру 8, и заменить ее везде на картинках, чтобы сэконосить место. Потому в формат добавили маски - разницу между "похожим" глифом и тем, что нужно воспроизвести. И эти исправления накладываются на глиф с помощью операций AND, OR, XOR и XNOR. То есть эта штука тьюринг-полная. Любое мыслимое вычисление можно провести с помощью этих операций.

Дальше NSO использовали целочисленное переполнение, чтобы выйти за границы буфера и эта часть напоминает бутылку и кораблик. В результате они получили два основных примитива чтение и запись в произвольные места памяти. Если бы они хотели взломать одну конкретную версию софта, то этого бы хватило, но они захотели все и сразу. Для этого нужно знать, что и куда записывать.

И из доисторического графического формата они собрали полноценный виртуальный микрокомпьютер из 70 000 вентилей (те самые маски).

Нужно еще раз все перечислить, чтобы оценить проделанную NSO работу. Вам приходит гифка, которая на самом деле пдфка, и ее по ошибке, не копируют, а пытаются прочитать, в ней доисторическая картинка в формате ксероксов, которая в результате целочисленного переполнения может писать в память, и внутри этой "картинки" семьдесят тысяч блоков логических операций, которые эмулируют небольшой компьютер, который уже находит то место в памяти, которое нужно пропатчить, чтобы убежать из песочницы.

NSO продавали эту изящную вещицу негодяям и убийцам, но то как она сделана!..

По материалам @ruheight
Google выпустил альфу Jetpack Glance, версию Compose для виджетов.

Jetpack Glance позволяет разработчикам приложений создавать виджеты с такими же декларативными API на основе Kotlin, что и Jetpack Compose. Эта первая альфа-сборка включает начальный набор компонентов Glance Composables (Box, Row, Column, Text, Button, LazyColumn, Image, Spacer), несколько предопределенных действий (actionStartActivity, actionRunCallback и т.д.) и возможность взаимодействия с существующими RemoteView.

На GitHub есть пример кода, а сам Glance совместим с последней стабильной сборкой Android Studio.

Платформа: Android
Geminio - плагин для Android Studio для генерации кода из freemarker-ных шаблонов. В Android Studio 4.1 отключили поддержку кастомных Freemarker-ных шаблонов. Раньше их можно было создать, положить в определённую папку внутри Android Studio, и студия самостоятельно подтягивала их в качестве 'Other'-шаблонов. Начиная с Android Studio 4.1, добавление шаблонов возможно только из IDEA-плагинов. Если вы хотите добавлять/обновлять шаблоны независимо от плагинов, то для этого и нужен Geminio.

Проект на GitHub: https://github.com/hhru/android-multimodule-plugin/tree/master/plugins/hh-geminio
Видео: https://apptractor.ru/info/media/shablonizatsiya-koda-s-geminio.html
Платформа: Android
⭐️: 80
Эволюция языков программирования: использование Swift, SwiftUI и Obj-C в iOS 15

iOS 15 была выпущена несколько месяцев назад, в сентябре 2021 года. В этой статье анализируются встроенные приложения, входящие в “комплект” iOS 15. Сколько двоичных файлов в iOS 15? Какие языки программирования используются для разработки этих приложений? Сколько приложений написано на Swift? Использует ли Apple SwiftUI для некоторых встроенных приложений? Ответы в этой статье.

Статья: https://apptractor.ru/ios15swft
Платформа: iOS
This media is not supported in your browser
VIEW IN TELEGRAM
SVGView - парсер SVG для SwiftUI. Фреймворк может анализировать файлы SVG и представлять их содержимое в SwiftUI. Он предоставляет вам возможность не только показывать файлы SVG, но и добавлять к ним интерактивность, обрабатывать ввод пользователя и использовать SwiftUI для придания им движения.

Библиотека на GitHub: https://github.com/exyte/SVGView
Платформа: iOS
⭐️: 67
Почему мы отказались от модульного тестирования классов и перешли на поведенческий подход

Я не говорю, что вы должны выбрать только один тип теста для своей системы, а просто то, что тип тестов, которые фокусируются на отдельных классах по отдельности, имеет несколько проблем, которые заставили нас полностью отказаться от них. В этой статье я расскажу о наших аргументах в пользу этого выбора, а также о нашем альтернативном подходе, основанном на следующих основных проблемах с тестированием на уровне классов.

• Тесты классов делают изменения болезненными
• Тесты классов не проверяют фактическое поведение
• Тесты классов сложно понять

Перевод статьи: https://apptractor.ru/bhvrltst
Платформа: тестирование
👋: 407
Этапы работы Jetpack Compose

Как и большинство UI-фреймворков, Compose рендерит кадр в несколько различных этапов. В системе Android View есть 3 этапа: Measure, Layout и Drawing. Compose очень похож, но имеет важный дополнительный этап Composition в начале.

Статья: https://apptractor.ru/cmpstn
Платформа: Android
⬆️: 11
AvatarView - библиотека для работы с изображениями профилей или аватаров в Android-приложениях. Поддерживает загрузку нескольких изображений профиля, границы, индикаторы, плейсхолдеры или просто отображение инициалов.

Библиотека на GitHub: https://github.com/getStream/avatarview-android
Платформа: Android
⭐️: 92
Оценка эффективности страниц в Airbnb на Android

Собственная оценка эффективности страницы (Page Performance Score, PPS) Airbnb предназначена для отражения сложных и комплексных реалий эффективности работы приложений путем сбора множества ориентированных на пользователя показателей эффективности и объединения их в единую оценку от 0 до 100. В этом посте мы подробно рассмотрим, как мы определяем и реализуем эти метрики на Android.

Перевод статьи: https://apptractor.ru/bnbdrpf
Платформа: Android
👋: 86
SupportDocs - библиотека для создания и показа справочных материалов в iOS-приложении. Работает все на основе GitHub - вы пишете там документацию с разметкой, GitHub Pages превращает ее в страницы, GitHub Action генерит JSON, SupportDocs скачивает и показывает пользователям.

Библиотека на GitHub: https://github.com/psalzAppDev/TwoSlideOverSupport
Платформа: iOS
⭐️: 1
Вертел я ваши UIView

В этой статье разбирают все основные возможности работы с базовым классом CALayer. Теперь можно смело приступать к анимациям и создавать крутые интерфейсы.

Статья: https://apptractor.ru/vrtuivw
Платформа: iOS
⬆️: 11
This media is not supported in your browser
VIEW IN TELEGRAM
Compose Ratingbar - настраиваемая форма с оценками на Jetpack Compose.

Библиотека на GitHub: https://github.com/a914-gowtham/compose-ratingbar
Платформа: Android
⭐️: 38