Я написал свой VPN-клиент для Android. Зачем, если их сотни, и что скрывается под капотом?
Каждый раз, нажимая кнопку «Connect» в очередном VPN-приложении, я ловил себя на мысли: а что там, под капотом? Как эта магия на самом деле работает на уровне Android? Вокруг сотни готовых решений, но простое пользовательское любопытство переросло в профессиональное: мне захотелось не просто использовать, а понять. Понять, какие подводные камни скрывает VpnService, как реализовать весь цикл от авторизации до поднятия защищённого туннеля, и можно ли сделать это, не утонув в устаревших технологиях.
Важный момент: Эта статья и сам проект — это мой личный "бортовой журнал". Я не претендую на создание самого безопасного или анонимного решения. Это скорее история о пути, граблях и открытиях, которая, надеюсь, будет полезна тем, кто тоже решит заглянуть под капот VPN-технологий на Android.
Статья: https://habr.com/ru/articles/926150/
Платформа: Android
Каждый раз, нажимая кнопку «Connect» в очередном VPN-приложении, я ловил себя на мысли: а что там, под капотом? Как эта магия на самом деле работает на уровне Android? Вокруг сотни готовых решений, но простое пользовательское любопытство переросло в профессиональное: мне захотелось не просто использовать, а понять. Понять, какие подводные камни скрывает VpnService, как реализовать весь цикл от авторизации до поднятия защищённого туннеля, и можно ли сделать это, не утонув в устаревших технологиях.
Важный момент: Эта статья и сам проект — это мой личный "бортовой журнал". Я не претендую на создание самого безопасного или анонимного решения. Это скорее история о пути, граблях и открытиях, которая, надеюсь, будет полезна тем, кто тоже решит заглянуть под капот VPN-технологий на Android.
Статья: https://habr.com/ru/articles/926150/
Платформа: Android
❤1
Как обнаружить обрезку Text в SwiftUI?
Статья: https://apptractor.ru/info/articles/kak-obnaruzhit-obrezku-text-v-swiftui.html
Платформа: iOS
Text активно используется в SwiftUI. По сравнению с аналогами в UIKit/AppKit, Text не требует настройки и работает «из коробки», но это также означает, что разработчики теряют контроль над ним. В этой статье я продемонстрирую на примере из реальной жизни, как решить, казалось бы, «невозможные» задачи с помощью подхода SwiftUI: найти и использовать первое представление в заданном наборе, где текст не обрезан.Статья: https://apptractor.ru/info/articles/kak-obnaruzhit-obrezku-text-v-swiftui.html
Платформа: iOS
👍1
Традиционные методы управления данными и состояниями часто приводят к запутанным зависимостям, избыточному шаблонному коду и специфическим проблемам при синхронизации состояния SwiftUI или управлении состоянием UIKit. Это может затруднить согласованное и эффективное управление состоянием приложения Swift во всём приложении.
Swift State Graph - это мощная реактивная библиотека Swift, предлагающая современный графовый подход к реактивному программированию Swift. Она разработана для решения этих сложных задач, предоставляя чёткий и декларативный подход к управлению потоками данных вашего приложения.
С помощью Swift State Graph вы можете:
• Достичь предельно ясной декларативной логики состояния благодаря автоматическому отслеживанию зависимостей Swift.
• Легко управлять состоянием приложения и получать динамическую информацию с помощью мощных вычисляемых свойств Swift.
• Оптимизировать разработку на платформах Apple с помощью унифицированных стратегий управления состояниями SwiftUI и UIKit.
Swift State Graph на GitHub: https://github.com/VergeGroup/swift-state-graph
Платформа: iOS
⭐️: 21
Swift State Graph - это мощная реактивная библиотека Swift, предлагающая современный графовый подход к реактивному программированию Swift. Она разработана для решения этих сложных задач, предоставляя чёткий и декларативный подход к управлению потоками данных вашего приложения.
С помощью Swift State Graph вы можете:
• Достичь предельно ясной декларативной логики состояния благодаря автоматическому отслеживанию зависимостей Swift.
• Легко управлять состоянием приложения и получать динамическую информацию с помощью мощных вычисляемых свойств Swift.
• Оптимизировать разработку на платформах Apple с помощью унифицированных стратегий управления состояниями SwiftUI и UIKit.
Swift State Graph на GitHub: https://github.com/VergeGroup/swift-state-graph
Платформа: iOS
⭐️: 21
👍2
•
(iOS Ru) Рынок разработки в СНГ, iOS, Переезд в UK•
(iOS Ru) Перерисовки в SwiftUI•
(iOS En) Apple-Style OnBoarding Page With Animations Using SwiftUI•
(iOS En) How to solve SwiftUI performance issues (according to Airbnb iOS engineers)•
(iOS En) Liquid Glass update•
(iOS En) Mastering Swift Sets : A Practical Guide•
(And Ru) Мок-собеседование Android-разработчика: middle и выше (+ все собеседования)•
(And En) Back it up, bring it back: No data left behind - Android Developers Backstage•
(And En) Google Play PolicyBytes - July 2025 policy updates•
(And En) Now in Android: 119 – Android 16, testing, desktop experiences, AndroidX, and more•
(And En) Create advanced automations using the Home APIs on Android•
(And En) Stateful vs. Stateless Composables In Jetpack Compose? - Everything You Need to Know•
(And En) Introduction to Spring Boot for Android Developers In 15min•
(And En) Kotlin 2.2 Livestream With the Language Evolution Team•
(And En) Model Context Protocol in Kotlin•
(And En) Dissecting Kotlin: Surveying the Latest Stable and Experimental•
(And En) Taming Asynchronous Beasts: Debugging and Performance Tuning in a Coroutine World•
(And En) Creative UIs with Compose•
(Crs En) Kotlin and Compose Multiplatform Patterns for iOS Interop•
(Dev Ru) Как сделать любую задачу интересной•
(Dev Ru) АI за пределами кодинга — ChatGPT, Gemini, Anthropic, AI для бизнеса•
(Dev En) VGG From Scratch – Deep Learning Theory & PyTorch Implementation (Full Course)•
(Mrk Ru) Как заработать на ASO? Запуск с нуля iOS-приложения INVOICERПрошлогодние видео:
•
(iOS Ru) Что нового в Swift 6?•
(And Ru) Как обойти множественное наследование в Kotlin и Java. Агрегация и композиция•
(Dev Ru) System Design-интервью для практиков•
(Dev Ru) Локальная разработка в АвитоPlease open Telegram to view this post
VIEW IN TELEGRAM
👍1
Duit: как создать эффективный BDUI фреймворк, не привлекая внимания санитаров
Open source-инструмент не гарантирует тебе, что ты сможешь решать с его помощью свои задачи. Очень часто сталкиваешься с неприятными ограничениями, какими-то компромиссами, которые тебе вообще не подходят. И поэтому я считаю, что надо развивать более широкое применение этой технологии.
И лейтмотив — альтернатива важна. Потому что мало фреймворков, которые решают задачу BDUI, а под Flutter — так вообще. Потому что конкуренция двигатель прогресса: когда фреймворков много, рубиться с ними интереснее. Потому что хочется пользоваться нормальными инструментами — качественными, отлаженными, документированными. Альтернатива важна, потому что она дает больше возможностей нам, как инженерам.
Статья: https://habr.com/ru/companies/friflex/articles/926690/
Платформа: кроссплатформа
Open source-инструмент не гарантирует тебе, что ты сможешь решать с его помощью свои задачи. Очень часто сталкиваешься с неприятными ограничениями, какими-то компромиссами, которые тебе вообще не подходят. И поэтому я считаю, что надо развивать более широкое применение этой технологии.
И лейтмотив — альтернатива важна. Потому что мало фреймворков, которые решают задачу BDUI, а под Flutter — так вообще. Потому что конкуренция двигатель прогресса: когда фреймворков много, рубиться с ними интереснее. Потому что хочется пользоваться нормальными инструментами — качественными, отлаженными, документированными. Альтернатива важна, потому что она дает больше возможностей нам, как инженерам.
Статья: https://habr.com/ru/companies/friflex/articles/926690/
Платформа: кроссплатформа
❤1
Автоматизация тестирования мобильного приложения КриптоАРМ Mobile на Android
В этой статье мы проведем обзор современных инструментов и подходов для тестирования мобильных приложений на примере приложения КриптоАРМ Mobile под Android. Подробно расскажем о настройке окружения для создания тестов, а также разработаем Docker-контейнер, который обеспечит удобный запуск тестов. Кроме того, мы рассмотрим процесс автоматизации тестирования и его интеграцию в CI/CD, что позволит упростить и ускорить процесс разработки и тестирования приложений.
Статья: https://habr.com/ru/articles/926508/
Платформа: Android
В этой статье мы проведем обзор современных инструментов и подходов для тестирования мобильных приложений на примере приложения КриптоАРМ Mobile под Android. Подробно расскажем о настройке окружения для создания тестов, а также разработаем Docker-контейнер, который обеспечит удобный запуск тестов. Кроме того, мы рассмотрим процесс автоматизации тестирования и его интеграцию в CI/CD, что позволит упростить и ускорить процесс разработки и тестирования приложений.
Статья: https://habr.com/ru/articles/926508/
Платформа: Android
👍2
Swift concurrency. Executors, Actors и их связь с потоками
В данной части из серии статей мы погрузимся чуть глубже в недра Swift Concurrency. Как определяется поток, на котором будет выполняться Task? Почему в рамках одной Task поток может меняться? Что такое Executor и на какие типы он делится? За что отвечает TaskExecutor, а за что SerialExecutor? Как определить текущий Executor по коду? Как использовать свой самописный Executor? В этой статье ответим на эти (и многие другие) вопросы.
Статья: https://habr.com/ru/articles/887240/
Платформа: iOS
В данной части из серии статей мы погрузимся чуть глубже в недра Swift Concurrency. Как определяется поток, на котором будет выполняться Task? Почему в рамках одной Task поток может меняться? Что такое Executor и на какие типы он делится? За что отвечает TaskExecutor, а за что SerialExecutor? Как определить текущий Executor по коду? Как использовать свой самописный Executor? В этой статье ответим на эти (и многие другие) вопросы.
Статья: https://habr.com/ru/articles/887240/
Платформа: iOS
👍2
Как мы использовали макросы для улучшения MVVM- архитектуры
С ростом команды и кодовой базы появилось много однотипного кода (boilerplate), особенно в слоях DataSource в MVVM. Для автоматизации и единообразия в Duolingo используют новый Swift‑функционал — макросы, которые в момент компиляции анализируют AST и генерируют повторяемые методы, например для обновления значений в KeyValueDataSource. Это позволило убрать ручной код, уменьшить баги и ускорить разработку/
Макросы сократили количество ручного и тестируемого кода (около 4300 строк сгенерировано автоматически), снизили риск ошибок и обеспечили централизованное обновление логики. Но появились неудобства: сгенерированный код менее понятен и плохо индексируется, а чистые сборки стали дольше на ~10–20 секунд. Чтобы минимизировать это, подключили пакет макросов как заранее скомпилированный бинарник и хранят кэшированную сборку в S3, что делает сборки максимально быстрыми и при этом сохраняет гибкость развития.
Статья: https://blog.duolingo.com/ios-mvvm-swift-macros/
Платформа: iOS
Поставьте 👍, если хотите эту статью на русском!
С ростом команды и кодовой базы появилось много однотипного кода (boilerplate), особенно в слоях DataSource в MVVM. Для автоматизации и единообразия в Duolingo используют новый Swift‑функционал — макросы, которые в момент компиляции анализируют AST и генерируют повторяемые методы, например для обновления значений в KeyValueDataSource. Это позволило убрать ручной код, уменьшить баги и ускорить разработку/
Макросы сократили количество ручного и тестируемого кода (около 4300 строк сгенерировано автоматически), снизили риск ошибок и обеспечили централизованное обновление логики. Но появились неудобства: сгенерированный код менее понятен и плохо индексируется, а чистые сборки стали дольше на ~10–20 секунд. Чтобы минимизировать это, подключили пакет макросов как заранее скомпилированный бинарник и хранят кэшированную сборку в S3, что делает сборки максимально быстрыми и при этом сохраняет гибкость развития.
Статья: https://blog.duolingo.com/ios-mvvm-swift-macros/
Платформа: iOS
Поставьте 👍, если хотите эту статью на русском!
👍5
Мои любимые UI утилиты Jetpack Compose — без которых я не могу жить
Jetpack Compose — это мечта, ставшая реальностью после многих лет борьбы с XML. Но даже в мечтах бывают повторяющиеся моменты, верно? Бесконечные
Статья: https://medium.com/@maliksaif070/my-favorite-jetpack-compose-ui-utilities-that-i-cant-live-without-e7fb44e24d74
Платформа: Android
Поставьте 👍, если хотите эту статью на русском!
Jetpack Compose — это мечта, ставшая реальностью после многих лет борьбы с XML. Но даже в мечтах бывают повторяющиеся моменты, верно? Бесконечные
Spacer, шаблонный код для простого Divider, вложенность, необходимая только для центрирования чего-либо на экране… список можно продолжать. Это UI-эквивалент смерти от тысячи порезов бумагой. Устав от повторения, автор статьи решил дать отпор. Он начал превращать эти распространённые UI сниппеты в небольшие, многоразовые компонуемые объекты. Результат? Более чистый код, более быстрая разработка и макет, который гораздо легче читать с первого взгляда. Он делится своей личной коллекцией этих незаменимых помощников. Если вы цените читабельный, поддерживаемый и элегантный код UI, думаю, вы захотите позаимствовать несколько из них для себя.Статья: https://medium.com/@maliksaif070/my-favorite-jetpack-compose-ui-utilities-that-i-cant-live-without-e7fb44e24d74
Платформа: Android
Поставьте 👍, если хотите эту статью на русском!
👍4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
LazyTimetable - высокопроизводительная таблица для расписания с отложенной загрузкой для Jetpack Compose для Android. Идеально подходит для создания расписаний фестивалей, конференций и любых многоколоночных макетов с временными рамками.
Фичи:
• Высокая производительность: ленивая загрузка с ограничением для области просмотра для плавной прокрутки даже при больших наборах данны
• Позиционирование по времени: элементы позиционируются на основе длительности в секундах с автоматическим расчётом макета
• Двунаправленная прокрутка: плавная горизонтальная и вертикальная прокрутка
• Широкие возможности настройки: настройка цветов, интервалов и внешнего вида контента
• Типобезопасный DSL: чистый, декларативный API для определения структуры расписания
LazyTimetable на GitHub: https://github.com/MoyuruAizawa/LazyTimetable
Платформа: Android
⭐️: 38
Фичи:
• Высокая производительность: ленивая загрузка с ограничением для области просмотра для плавной прокрутки даже при больших наборах данны
• Позиционирование по времени: элементы позиционируются на основе длительности в секундах с автоматическим расчётом макета
• Двунаправленная прокрутка: плавная горизонтальная и вертикальная прокрутка
• Широкие возможности настройки: настройка цветов, интервалов и внешнего вида контента
• Типобезопасный DSL: чистый, декларативный API для определения структуры расписания
LazyTimetable на GitHub: https://github.com/MoyuruAizawa/LazyTimetable
Платформа: Android
⭐️: 38
👍2
Функциональный стиль: объясняю как другу
«Функциональное программирование», «Immutable значения», «Pure функции».
Тоже слышал эти умные слова?
И ты такой: «Что? Можно просто for написать?»
Спокойно. Сейчас все разложим по полочкам. Даже если ты пишешь var a = 1 и гордишься этим - ты свой. Погнали.
Статья: https://habr.com/ru/articles/926900/
Платформа: iOS
«Функциональное программирование», «Immutable значения», «Pure функции».
Тоже слышал эти умные слова?
И ты такой: «Что? Можно просто for написать?»
Спокойно. Сейчас все разложим по полочкам. Даже если ты пишешь var a = 1 и гордишься этим - ты свой. Погнали.
Статья: https://habr.com/ru/articles/926900/
Платформа: iOS
👍2
Развитие программ раннего доступа Android: Canary канал
Чтобы лучше поддерживать разработчиков и предоставлять более ранний и постоянный доступ к функциям, находящимся в разработке, Google объявляет о существенном обновлении программы предварительных версий. В будущем платформа Android будет иметь Canary канал релизов, который заменит предыдущую программу developer preview для разработчиков. Этот Canary канал будет функционировать параллельно с существующей программой бета-тестирования.
Это изменение призвано предоставить более упорядоченную и постоянную возможность опробовать новые возможности платформы и отправлять отзывы в течение всего года, а не только в первые месяцы нового цикла выпуска.
Новость: https://apptractor.ru/info/news/razvitie-programm-rannego-dostupa-android-canary-kanal.html
Платформа: Android
Чтобы лучше поддерживать разработчиков и предоставлять более ранний и постоянный доступ к функциям, находящимся в разработке, Google объявляет о существенном обновлении программы предварительных версий. В будущем платформа Android будет иметь Canary канал релизов, который заменит предыдущую программу developer preview для разработчиков. Этот Canary канал будет функционировать параллельно с существующей программой бета-тестирования.
Это изменение призвано предоставить более упорядоченную и постоянную возможность опробовать новые возможности платформы и отправлять отзывы в течение всего года, а не только в первые месяцы нового цикла выпуска.
Новость: https://apptractor.ru/info/news/razvitie-programm-rannego-dostupa-android-canary-kanal.html
Платформа: Android
👍2
Как [iOS] разработчику сделать хорошее резюме (которое действительно привлечет внимание ведущих компаний)
Возможно, вы отличный iOS-разработчик. Вы создавали приложения, исправляли сбои, работали над фичами и оптимизировали экраны. Но все равно… никто не звонит.
Я прошел через это. Я отправил более 30 откликов и получил, может быть, один ответ — отказ.
А сейчас? Я получаю приглашения на собеседования от FANG команд, ведущих транснациональных корпораций и некоторых довольно классных компаний-разработчиков продуктов.
Я прошел собеседования в Walmart, Amazon и даже попал в базы талантов компаний, которые раньше казались мне недостижимыми.
И нет, я не создал приложение на миллиард долларов.
Но я создал резюме, которое обращается как к людям, так и к машинам.
Статья: https://apptractor.ru/info/articles/prepare-a-strong-resume.html
Платформа: карьера
Возможно, вы отличный iOS-разработчик. Вы создавали приложения, исправляли сбои, работали над фичами и оптимизировали экраны. Но все равно… никто не звонит.
Я прошел через это. Я отправил более 30 откликов и получил, может быть, один ответ — отказ.
А сейчас? Я получаю приглашения на собеседования от FANG команд, ведущих транснациональных корпораций и некоторых довольно классных компаний-разработчиков продуктов.
Я прошел собеседования в Walmart, Amazon и даже попал в базы талантов компаний, которые раньше казались мне недостижимыми.
И нет, я не создал приложение на миллиард долларов.
Но я создал резюме, которое обращается как к людям, так и к машинам.
Статья: https://apptractor.ru/info/articles/prepare-a-strong-resume.html
Платформа: карьера
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
DynamicBottomSheet - гибко настраиваемый
DynamicBottomSheet на GitHub: https://github.com/Savva-Shuliatev/DynamicBottomSheet
Платформа: iOS
⭐️: 16
UIView для iOS-приложений, созданный на Swift. Этот пакет Swift предоставляет легко интегрируемое выдвигающееся снизу представление с поддержкой динамического выбора высоты, анимацией, настройками и позволяет разработчикам легко создавать адаптивные и интерактивные пользовательские интерфейсы.DynamicBottomSheet на GitHub: https://github.com/Savva-Shuliatev/DynamicBottomSheet
Платформа: iOS
⭐️: 16
🔥5
ИИ замедляет работу разработчиков - мы может объяснить почему
Когда мы пишем программное обеспечение, реальным продуктом является наша ментальная модель созданной нами программы. Именно эта модель позволила нам создать программное обеспечение, и в будущем она позволит нам понимать систему, диагностировать проблемы в ней и эффективно работать с ней. Если вы согласны с этой теорией, как и я, то она объясняет такие вещи, как то, почему все ненавидят устаревший код, почему небольшие команды могут превосходить по производительности более крупные, почему аутсорсинг обычно заканчивается плохо и т.д.
Мы знаем, что программисты, участвовавшие в исследовании Metr, — это люди с чрезвычайно хорошо развитыми ментальными моделями проектов, над которыми они работают. И мы также знаем, что LLM, которые они использовали, не имели реального доступа к этим ментальным моделям. Разработчики могли предоставить части этой ментальной модели своим инструментам искусственного интеллекта, но это медленный и неэффективный процесс, который никогда не сможет полностью отразить теорию программы, существующую в их умах. Передав свою работу по разработке программного обеспечения LLM, они ограничили свою уникальную способность эффективно работать с кодовой базой.
Статья: https://apptractor.ru/info/articles/ii-zamedlyaet-rabotu-razrabotchikov-my-mozhet-obyasnit-pochemu.html
Платформа: искусственный интеллект
Когда мы пишем программное обеспечение, реальным продуктом является наша ментальная модель созданной нами программы. Именно эта модель позволила нам создать программное обеспечение, и в будущем она позволит нам понимать систему, диагностировать проблемы в ней и эффективно работать с ней. Если вы согласны с этой теорией, как и я, то она объясняет такие вещи, как то, почему все ненавидят устаревший код, почему небольшие команды могут превосходить по производительности более крупные, почему аутсорсинг обычно заканчивается плохо и т.д.
Мы знаем, что программисты, участвовавшие в исследовании Metr, — это люди с чрезвычайно хорошо развитыми ментальными моделями проектов, над которыми они работают. И мы также знаем, что LLM, которые они использовали, не имели реального доступа к этим ментальным моделям. Разработчики могли предоставить части этой ментальной модели своим инструментам искусственного интеллекта, но это медленный и неэффективный процесс, который никогда не сможет полностью отразить теорию программы, существующую в их умах. Передав свою работу по разработке программного обеспечения LLM, они ограничили свою уникальную способность эффективно работать с кодовой базой.
Статья: https://apptractor.ru/info/articles/ii-zamedlyaet-rabotu-razrabotchikov-my-mozhet-obyasnit-pochemu.html
Платформа: искусственный интеллект
👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Создание красивой кнопки с прогрессом в Jetpack Compose
Мы собираемся создать многоразовый компонент
Статья: https://apptractor.ru/info/articles/sozdanie-krasivoy-knopki-s-progressom-v-jetpack-compose.html
Платформа: Android
Мы собираемся создать многоразовый компонент
ProgressButton. Эта кнопка будет иметь анимацию прогресса, которая заполняет кнопку слева направо. Ключевой особенностью этого компонента является его способность обрезать анимацию прогресса по форме кнопки, обеспечивая гладкий и плавный вид, независимо от того, используете ли вы закругленные углы или круглую форму.Статья: https://apptractor.ru/info/articles/sozdanie-krasivoy-knopki-s-progressom-v-jetpack-compose.html
Платформа: Android
❤3
MBCompass — это простое, но многофункциональное приложение-компас для Android, созданное с помощью Jetpack Compose. Оно использует магнитометр и акселерометр устройства для предоставления обновлений о геомагнитном поле в режиме реального времени. Разработанное с учетом Android Lifecycle, в целом это современный и эффективный компас.
Большинство приложений-компасов либо слишком просты, либо перегружены рекламой. MBCompass был создан, чтобы исправить эту ситуацию: он легковесный, точный и не содержит рекламы.
MBCompass на GitHub: https://github.com/MubarakNative/MBCompass
Платформа: Android
⭐️: 105
Большинство приложений-компасов либо слишком просты, либо перегружены рекламой. MBCompass был создан, чтобы исправить эту ситуацию: он легковесный, точный и не содержит рекламы.
MBCompass на GitHub: https://github.com/MubarakNative/MBCompass
Платформа: Android
⭐️: 105
10 ловушек Swift, которые вы не заметите, пока не станет слишком поздно
Вот 10 ловушек Swift, которые кажутся безобидными — пока не настигнут в
1. Сильные циклы ссылок в замыканиях
2. Принудительное развертывание Optional
3. Неявно разворачиваемые Optional (String!)
4. Не помеченные как final классы
5. Отсутствие weak у делегатов
6. Бездумное использование DispatchQueue.main.async
7. Путаница между типами значений и ссылок
8. Неправильное использование Codable
9. Неправильное использование @Published в SwiftUI/Combine
10. Путаница между Any и AnyObject
Статья: https://apptractor.ru/info/articles/10-lovushek-swift-kotorye-vy-ne-zametite-poka-ne-stanet-slishkom-pozdno.html
Платформа: iOS
Вот 10 ловушек Swift, которые кажутся безобидными — пока не настигнут в
1. Сильные циклы ссылок в замыканиях
2. Принудительное развертывание Optional
3. Неявно разворачиваемые Optional (String!)
4. Не помеченные как final классы
5. Отсутствие weak у делегатов
6. Бездумное использование DispatchQueue.main.async
7. Путаница между типами значений и ссылок
8. Неправильное использование Codable
9. Неправильное использование @Published в SwiftUI/Combine
10. Путаница между Any и AnyObject
Статья: https://apptractor.ru/info/articles/10-lovushek-swift-kotorye-vy-ne-zametite-poka-ne-stanet-slishkom-pozdno.html
Платформа: iOS
🥴1
6 малоизвестных приемов в Jetpack Compose, которые мгновенно улучшат ваш интерфейс
Эти 6 малоизвестных, но мощных шаблонов Jetpack Compose могут мгновенно улучшить внешний вид и пользовательский интерфейс вашего приложения.
Статья: https://medium.com/@maliksaif070/6-lesser-known-jetpack-compose-tricks-that-instantly-improve-your-ui-79d14943a7cb
Платформа: Android
Эти 6 малоизвестных, но мощных шаблонов Jetpack Compose могут мгновенно улучшить внешний вид и пользовательский интерфейс вашего приложения.
Статья: https://medium.com/@maliksaif070/6-lesser-known-jetpack-compose-tricks-that-instantly-improve-your-ui-79d14943a7cb
Платформа: Android
🔥1
Современные блокировки в Swift: мьютекс и фреймворк Synchronization
Swift предлагает несколько решений для блокировки доступа к изменяемому контенту и предотвращения так называемого состояния гонки. Блокировки, такие как NSLock, DispatchSemaphore или последовательная DispatchQueue, являются популярным выбором для многих. В некоторых статьях сравнивается их производительность и указывается, какая из них работает лучше всего, но я хотел бы представить вам современный вариант блокировки Swift, представленный в SE-433 Synchronous Mutual Exclusion Lock.
В этой статье я не буду рассказывать, какой блокировщик работает лучше всего, и не буду сравнивать их с этим новым вариантом. Каждый блокировщик может иметь свой профиль производительности и свои особенности. В этой статье мы рассмотрим стандартизированную версию так называемого мьютекс блокировщика.
Статья: https://apptractor.ru/info/articles/sovremennye-blokirovki-v-swift-myuteks-i-freymvork-synchronization.html
Платформа: iOS
Swift предлагает несколько решений для блокировки доступа к изменяемому контенту и предотвращения так называемого состояния гонки. Блокировки, такие как NSLock, DispatchSemaphore или последовательная DispatchQueue, являются популярным выбором для многих. В некоторых статьях сравнивается их производительность и указывается, какая из них работает лучше всего, но я хотел бы представить вам современный вариант блокировки Swift, представленный в SE-433 Synchronous Mutual Exclusion Lock.
В этой статье я не буду рассказывать, какой блокировщик работает лучше всего, и не буду сравнивать их с этим новым вариантом. Каждый блокировщик может иметь свой профиль производительности и свои особенности. В этой статье мы рассмотрим стандартизированную версию так называемого мьютекс блокировщика.
Статья: https://apptractor.ru/info/articles/sovremennye-blokirovki-v-swift-myuteks-i-freymvork-synchronization.html
Платформа: iOS
Numerix — это пакет Swift с открытым исходным кодом, предоставляющий структуры Complex, Vector, Matrix и ShapedArray для задач линейной алгебры и других численных вычислений на устройствах Apple. Он использует фреймворк Accelerate для высокопроизводительных и энергоэффективных вычислений.
Numerix на GitHub: https://github.com/wigging/numerix
Платформа: iOS
⭐️: 31
Numerix на GitHub: https://github.com/wigging/numerix
Платформа: iOS
⭐️: 31