Даже не знаю, зачем это может пригодиться не в играх, но вещь забавная. SwiftUIJoystick - джойстик для приложения на SwiftUI. Можно менять внешний вид поля и самой метки, координаты.
Библиотека на GitHub: https://github.com/michael94ellis/SwiftUIJoystick
Платформа: iOS
⭐️: 9
Библиотека на GitHub: https://github.com/michael94ellis/SwiftUIJoystick
Платформа: iOS
⭐️: 9
GitHub
GitHub - michael94ellis/SwiftUIJoystick: An Open Source Joystick library for SwiftUI, Swift, iOS apps
An Open Source Joystick library for SwiftUI, Swift, iOS apps - michael94ellis/SwiftUIJoystick
Глубокое погружение в эксплоит NSO для iMessage: удаленное выполнение кода
Google распотрошил экслоит израильской NSO и это замечательная конструкция.
Люди посылают друг другу смешные анимированные гифки. iMessage хочет, чтобы они крутились вечно. Для этого в заголовке GIF нужно поправить флажок, и чтобы не портить файл iMessage делает его копию. Казалось бы, что могло пойти не так?
По ошибке вместо копирования вызывается рендеринг картинок. А он уже на расширения файлов не смотрит. И NSO под видом гифки подсовывает PDF. А внутри PDF-ки картинка JBIG2 - это такой доисторический формат графики для ксероксов. Чтобы файлы получались маленькими, то он режет картинку на кусочки, и если куски, например буква "а" достаточно похожи между собой, то он использует один глиф для всего, как типографскую литеру.
Из-за этого случались многие беды. Кодек мог к примеру подумать что цифра 6 достаточно похожа на цифру 8, и заменить ее везде на картинках, чтобы сэконосить место. Потому в формат добавили маски - разницу между "похожим" глифом и тем, что нужно воспроизвести. И эти исправления накладываются на глиф с помощью операций AND, OR, XOR и XNOR. То есть эта штука тьюринг-полная. Любое мыслимое вычисление можно провести с помощью этих операций.
Дальше NSO использовали целочисленное переполнение, чтобы выйти за границы буфера и эта часть напоминает бутылку и кораблик. В результате они получили два основных примитива чтение и запись в произвольные места памяти. Если бы они хотели взломать одну конкретную версию софта, то этого бы хватило, но они захотели все и сразу. Для этого нужно знать, что и куда записывать.
И из доисторического графического формата они собрали полноценный виртуальный микрокомпьютер из 70 000 вентилей (те самые маски).
Нужно еще раз все перечислить, чтобы оценить проделанную NSO работу. Вам приходит гифка, которая на самом деле пдфка, и ее по ошибке, не копируют, а пытаются прочитать, в ней доисторическая картинка в формате ксероксов, которая в результате целочисленного переполнения может писать в память, и внутри этой "картинки" семьдесят тысяч блоков логических операций, которые эмулируют небольшой компьютер, который уже находит то место в памяти, которое нужно пропатчить, чтобы убежать из песочницы.
NSO продавали эту изящную вещицу негодяям и убийцам, но то как она сделана!..
По материалам @ruheight
Google распотрошил экслоит израильской NSO и это замечательная конструкция.
Люди посылают друг другу смешные анимированные гифки. iMessage хочет, чтобы они крутились вечно. Для этого в заголовке GIF нужно поправить флажок, и чтобы не портить файл iMessage делает его копию. Казалось бы, что могло пойти не так?
По ошибке вместо копирования вызывается рендеринг картинок. А он уже на расширения файлов не смотрит. И NSO под видом гифки подсовывает PDF. А внутри PDF-ки картинка JBIG2 - это такой доисторический формат графики для ксероксов. Чтобы файлы получались маленькими, то он режет картинку на кусочки, и если куски, например буква "а" достаточно похожи между собой, то он использует один глиф для всего, как типографскую литеру.
Из-за этого случались многие беды. Кодек мог к примеру подумать что цифра 6 достаточно похожа на цифру 8, и заменить ее везде на картинках, чтобы сэконосить место. Потому в формат добавили маски - разницу между "похожим" глифом и тем, что нужно воспроизвести. И эти исправления накладываются на глиф с помощью операций AND, OR, XOR и XNOR. То есть эта штука тьюринг-полная. Любое мыслимое вычисление можно провести с помощью этих операций.
Дальше NSO использовали целочисленное переполнение, чтобы выйти за границы буфера и эта часть напоминает бутылку и кораблик. В результате они получили два основных примитива чтение и запись в произвольные места памяти. Если бы они хотели взломать одну конкретную версию софта, то этого бы хватило, но они захотели все и сразу. Для этого нужно знать, что и куда записывать.
И из доисторического графического формата они собрали полноценный виртуальный микрокомпьютер из 70 000 вентилей (те самые маски).
Нужно еще раз все перечислить, чтобы оценить проделанную NSO работу. Вам приходит гифка, которая на самом деле пдфка, и ее по ошибке, не копируют, а пытаются прочитать, в ней доисторическая картинка в формате ксероксов, которая в результате целочисленного переполнения может писать в память, и внутри этой "картинки" семьдесят тысяч блоков логических операций, которые эмулируют небольшой компьютер, который уже находит то место в памяти, которое нужно пропатчить, чтобы убежать из песочницы.
NSO продавали эту изящную вещицу негодяям и убийцам, но то как она сделана!..
По материалам @ruheight
Blogspot
A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution
Posted by Ian Beer & Samuel Groß of Google Project Zero We want to thank Citizen Lab for sharing a sample of the FORCEDENTRY exploit w...
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
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
Проект на 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
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
Библиотека на GitHub: https://github.com/exyte/SVGView
Платформа: iOS
⭐️: 67
Почему мы отказались от модульного тестирования классов и перешли на поведенческий подход
Я не говорю, что вы должны выбрать только один тип теста для своей системы, а просто то, что тип тестов, которые фокусируются на отдельных классах по отдельности, имеет несколько проблем, которые заставили нас полностью отказаться от них. В этой статье я расскажу о наших аргументах в пользу этого выбора, а также о нашем альтернативном подходе, основанном на следующих основных проблемах с тестированием на уровне классов.
• Тесты классов делают изменения болезненными
• Тесты классов не проверяют фактическое поведение
• Тесты классов сложно понять
Перевод статьи: https://apptractor.ru/bhvrltst
Платформа: тестирование
👋: 407
Я не говорю, что вы должны выбрать только один тип теста для своей системы, а просто то, что тип тестов, которые фокусируются на отдельных классах по отдельности, имеет несколько проблем, которые заставили нас полностью отказаться от них. В этой статье я расскажу о наших аргументах в пользу этого выбора, а также о нашем альтернативном подходе, основанном на следующих основных проблемах с тестированием на уровне классов.
• Тесты классов делают изменения болезненными
• Тесты классов не проверяют фактическое поведение
• Тесты классов сложно понять
Перевод статьи: https://apptractor.ru/bhvrltst
Платформа: тестирование
👋: 407
Этапы работы Jetpack Compose
Как и большинство UI-фреймворков, Compose рендерит кадр в несколько различных этапов. В системе Android View есть 3 этапа: Measure, Layout и Drawing. Compose очень похож, но имеет важный дополнительный этап Composition в начале.
Статья: https://apptractor.ru/cmpstn
Платформа: Android
⬆️: 11
Как и большинство 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
Библиотека на 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
Собственная оценка эффективности страницы (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
Библиотека на GitHub: https://github.com/psalzAppDev/TwoSlideOverSupport
Платформа: iOS
⭐️: 1
Вертел я ваши UIView
В этой статье разбирают все основные возможности работы с базовым классом CALayer. Теперь можно смело приступать к анимациям и создавать крутые интерфейсы.
Статья: https://apptractor.ru/vrtuivw
Платформа: iOS
⬆️: 11
В этой статье разбирают все основные возможности работы с базовым классом 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
Библиотека на GitHub: https://github.com/a914-gowtham/compose-ratingbar
Платформа: Android
⭐️: 38
TimelineView - настраиваемая и простая в использовании библиотека для показа временной шкалы в Android-приложении. Может использоваться как автономный View или как декоратор RecyclerView.
Библиотека на GitHub: https://github.com/lriccardo/TimelineView
Платформа: Android
⭐️: 33
Библиотека на GitHub: https://github.com/lriccardo/TimelineView
Платформа: Android
⭐️: 33
Как создать собственный анимированный Tab Bar для iOS-приложения
Каждый UI-дизайнер любит красивые и анимированные панели вкладок. С другой стороны, это кошмар для разработчика, который должен реализовать этот дизайн. Конечно, будет проще использовать нативный таб бар Apple и сосредоточиться на более интересных вещах, таких как реализация бизнес-логики. Но что, если нам нужно создать настраиваемую панель вкладок? С чего начать?
Статья: https://apptractor.ru/tbbrios
Платформа: iOS
👋: 29
Каждый UI-дизайнер любит красивые и анимированные панели вкладок. С другой стороны, это кошмар для разработчика, который должен реализовать этот дизайн. Конечно, будет проще использовать нативный таб бар Apple и сосредоточиться на более интересных вещах, таких как реализация бизнес-логики. Но что, если нам нужно создать настраиваемую панель вкладок? С чего начать?
Статья: https://apptractor.ru/tbbrios
Платформа: iOS
👋: 29
Масштабируем Jetpack Compose Navigation
В одном из моих личных проектов я решил использовать Jetpack Compose в качестве основной технологии. Это означало, что моё приложение будет иметь одну Activity, а вся навигация будет выполняться с помощью Compose. Когда я начал планировать проект, библиотеки Compose Navigation ещё не было, как не было и способа внедрить ViewModel в Composable без использования компонентов Activity, Fragment или View.
Но примерно за полгода до публикации этой статьи появилась библиотека Jetpack Compose Navigation, и Dagger-Hilt стал поддерживать Compose. Сегодня я расскажу о моём пути: поделюсь видением проблемы масштабируемости навигации на примерах Google и предложу её возможное решение.
Статья: https://apptractor.ru/cmpsnv
Платформа: Android
⬆️: 16
В одном из моих личных проектов я решил использовать Jetpack Compose в качестве основной технологии. Это означало, что моё приложение будет иметь одну Activity, а вся навигация будет выполняться с помощью Compose. Когда я начал планировать проект, библиотеки Compose Navigation ещё не было, как не было и способа внедрить ViewModel в Composable без использования компонентов Activity, Fragment или View.
Но примерно за полгода до публикации этой статьи появилась библиотека Jetpack Compose Navigation, и Dagger-Hilt стал поддерживать Compose. Сегодня я расскажу о моём пути: поделюсь видением проблемы масштабируемости навигации на примерах Google и предложу её возможное решение.
Статья: https://apptractor.ru/cmpsnv
Платформа: Android
⬆️: 16
Вы когда-нибудь хотели писать асинхронный код также просто, как синхронный? AwaitKit - это мощная Swift-библиотека, вдохновленная спецификацией Async/Await в ES8 (ECMAScript 2017), которая реализует мощный способ последовательного написания асинхронного кода. Внутри она использует PromiseKit для создания и управления промисами.
Библиотека на GitHub: https://github.com/tomCompsoft/AwaitKit
Платформа: iOS
⭐️: 0
Библиотека на GitHub: https://github.com/tomCompsoft/AwaitKit
Платформа: iOS
⭐️: 0
JetBrains Fleet: переоцененный редактор или новое слово в IDE?
JetBrains анонсировала новый гибрид текстового редактора и IDE под названием JetBrains Fleet, и похоже, что весь Интернет сошел с ума из-за этого объявления. Эндрю Зуо написал статью о том, каким он видит новый редактор кода и сказал в ней, что во Fleet нет ничего нового. Статья собрала 1.4К апвоутов, однако в ней же ему быстро напихали комментариев и сказали, что он мыслит слишком узко. И это при том, что сам редактор никто еще не видел.
Статья: https://apptractor.ru/jbflt
Платформа: среда разработки
👋: 1.4К
JetBrains анонсировала новый гибрид текстового редактора и IDE под названием JetBrains Fleet, и похоже, что весь Интернет сошел с ума из-за этого объявления. Эндрю Зуо написал статью о том, каким он видит новый редактор кода и сказал в ней, что во Fleet нет ничего нового. Статья собрала 1.4К апвоутов, однако в ней же ему быстро напихали комментариев и сказали, что он мыслит слишком узко. И это при том, что сам редактор никто еще не видел.
Статья: https://apptractor.ru/jbflt
Платформа: среда разработки
👋: 1.4К
Neon - простая аркадная игра на Jetpack Compose, Kotlin и корутинах.
Проект на GitHub: https://github.com/mariodujic/Neon
Платформа: Android
⭐️: 16
Проект на GitHub: https://github.com/mariodujic/Neon
Платформа: Android
⭐️: 16
Ответ на интервью, который стоил мне работы в 314+ тысяч долларов
Ни одна компания не повторяет вопросы на собеседовании достаточно часто. Важно понимать, по какой схеме они действуют. С этими оговорками давайте проанализируем, что на самом деле разрушило одну из самых прибыльных возможностей трудоустройства, с которой мне приходилось сталкиваться.
Статья: https://apptractor.ru/intrans
Платформа: собеседование
👋: 457
Ни одна компания не повторяет вопросы на собеседовании достаточно часто. Важно понимать, по какой схеме они действуют. С этими оговорками давайте проанализируем, что на самом деле разрушило одну из самых прибыльных возможностей трудоустройства, с которой мне приходилось сталкиваться.
Статья: https://apptractor.ru/intrans
Платформа: собеседование
👋: 457