iOS Broadcast
3.31K subscribers
1.68K photos
82 videos
967 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Swift concurrency. Executors, Actors и их связь с потокам
Полезная статья из серии Swift Concurrency, где автор разбирается в недрах:
🟢Как определяется поток, на котором будет выполняться Task?
🟢Почему в рамках одной Task поток может меняться?
🟢Что такое Executor и на какие типы он делится?
🟢За что отвечает TaskExecutor, а за что SerialExecutor?
🟢Как определить текущий Executor по коду?
🟢Как использовать свой самописный Executor?

🟣Компоненты Swift Concurrency
🟢Task и child task — базовые единицы для асинхронных функций.
🟢Job — часть таски между точками прерываний.
🟢Executor — распределяет Job по потокам.
🟢Cooperative thread pool — пул потоков, равный количеству ядер устройства.

Типы Executor'ов
🟢Global concurrent executor — дефолтный планировщик, распределяет Job'ы конкуррентно.
🟢Serial executors — каждый actor имеет свой, выполняет джобы последовательно.
🟢Main Actor executor — выполняет джобы на main thread.

🟡Понимание механизма работы swift concurrency помогает контролировать и прогнозировать использование инструментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍2
⤵️ Подходы к навигации в SwiftUI
Автор рассматривает все основные подходы к навигации (часть статьи еще дополняется). SwiftUI сначала был представлен с NavigationView, потом его замененили на NavigationStack стек в iOS 16. Все это время часть разработчиков строила навигаюцию вообще на базе UIKit. В статье рассматриваются подходы:
🟢Базовая навигация по списку
🟢Динамическая/программируемая маршрутизация
🟢Вложенные перечисления для организации сложных сценариев
🟢Глобальная маршрутизация в SwiftUI
🟢Реализация навигационного "хука" с использованием Environment
🟢Удаление навигационной зависимости
🟢Навигация по вкладкам
🟢Структура приложения
🟢NavigationStack и PatientNavigationStack
🟢Использование Environment Values
🟢Управление "модалками"

Добавляйте в 🔖 чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🈸 State of in-app subscriptions 2025
Подписочные системы монетизации почти полностью заменили классическую покупку контента. Если для нас как пользователей это не лучшая новость, то как разработчикам требуется понимать как это использовать:
🟢Рынок покупок в приложениях приближается к $170 млрд к 2025 году.
🟢Высокие цены ≠ низкая конверсия Во всех планах топ-цены по квартилю дают самый высокий LTV, при этом конверсия остается стабильной.
🟢Искусственный интеллект облегчает создание и запуск приложений, но сложнее превратить их в стабильный доход.
🟢Weekly-подписки доминируют За год они выросли на +10 % и уже дают ≈50 % всех новых покупок в App Store. Обошли месячные и годовые в каждом регионе.
🟢Триалы кардинально повышают LTV Бесплатный пробный период увеличивает LTV на 55-64 % в зависимости от страны. Наибольший эффект — у weekly-подписок.
🟢Маленькие рынки → большая выручка Сингапур, Катар, Багамы — в топе по LTV. По Adapty Pricing Index, готовность платить различается в 2-3 раза. Локальное ценообразование — must-have.
🟢Адаптивный индекс ценообразования помогает определить тенденции и оптимизировать цены.
🟢Еженедельные подписки приносят наибольший доход в большинстве регионов.
🟢Ценообразование и упаковка являются ключевыми факторами увеличения доходов от подписки на приложения.
🟢Адаптивное ценообразование позволяет корректировать цены с уверенностью и определять доход.
🟢LTV и рентабельность определяют долгосрочный доход от подписки на приложения.
🟢Эксперименты — лучший ускоритель роста Приложения, которые провели 50+ A/B-тестов пейволлов, растут в 100× быстрее. Начинать лучше с триалов и структуры планов.
Полный отчет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🐥 Переход на Swift Testing
Swift Testing предлагает новые возможности для юнит и функционального тестирования. Переход с XCTest на Swift Testing может быть сложным. Официальный гайд Apple не охватывает все практические аспекты.

Поиск и выполнение тестов:
🔵XCTest использует XCTestCase с функциями среды выполнения Objective-C.
🔵Swift Testing использует макросы для генерации описания тестов.
🔵XCTest выполняет тесты последовательно, Swift-тестирование — параллельно.

Проблемы:
🔴Ассерты не работают вне контекста Task
🔴Проблемы с общим изменяемым состоянием
🔴Наследуемые тестовые сценарии не наследуют тесты

Рекомендации по миграции:
🟢Если количество тестов небольшое, использовать быстрое параметризованное тестирование
🟢В противном случае комбинировать XCTests и Swift Testing в один целевой объект
🟢Дождаться поддержки тестового наследования в Swift-тестировании

Преимущества и недостатки миграции:
🟢Возможность переосмыслить дизайн тестов и использовать современные Swift парадигмы
🟢Отсутствие API для тестирования пользовательского интерфейса и производительности
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🐥 Swift и C++
Когда-то давно, на старте карьеры, я попал на проект с Objective-C++. Не просто ручной подсчет ссылок а полноценное управление аллокацией памяти. С менее понятным кодом с тех пор я не сталкивался. И вот, он вернулся, интероп с C++:
🔘Новая система взаимодействия позволяет использовать библиотеки C++ в Swift.
🔘Совместимость C++ и Swift упрощает создание кроссплатформенных инструментов.
🔘Логика C++ может быть повторно использована на различных платформах.
🔘Поддержка взаимодействия Swift с C++ сокращает дублирование кода и ускоряет разработку.
🔘Это упрощает создание кроссплатформенных инструментов с интерфейсом Swift
🔘Логика, написанная на C++, может быть повторно использована на различных платформах

Не думаю что кто-то в здравом уме будем писать логику на C++, но вот использовать готовые опенсорсные C++ движки или повышать производительность в местах ботлнеков может быть полезно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🐥 Создание Swift макросов
Решение для повторяющихся шаблонов - макросы.

Макрос @ThemedButton
🟢Макрос генерирует кнопку с оформлением темы приложения.
🟢Пример использования: @ThemedButton("Коснись меня")

Расширенный макрос @GreetingText
🟢Макрос анализирует строку и создает пользовательское сообщение.
🟢Пример использования: @GreetingText("Отжимающийся воин").

Плюсы использования:
🟢Макросы ускоряют время компиляции и незначительно улучшают использование памяти.
🟢Выгоды наиболее заметны при масштабировании до большого количества компонентов.

Минусы использования макросов
🔴Трассировки стека становятся нечитаемыми.
🔴Сообщения об ошибках указывают на расширение, а не на файл.
🔴Макросы могут нарушать работу инструментов рефакторинга.

Заключительные мысли
🔘Макросы Swift мощные и декларативные, но требуют тщательного тестирования.
🔘Макросы подходят для статичных задач и упрощают написание кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔21
🔨 Uncertain⟨T⟩
Mattt (NSHipster) редко но метко закидывает интересные концепции. В этот раз поднимается вопрос неопределенности в программировании. Идея состоит в том чтобы внедрить неопределенность в систему типов.

Uncertain<T>: новый подход
🔵Исследователи предложили кодировать неопределенность в системе типов.
🔵Uncertain<T> позволяет моделировать неопределенность с помощью вероятностных распределений.
🔵Uncertain<T> делает код более умным и точным.

Метод Монте-Карло
🔵Метод Монте-Карло позволяет анализировать вероятности через симуляции.
🔵Пример с игровым автоматом показывает, как можно использовать этот метод.

Заключение
🔵В реальном мире нет ничего определенного, кроме самой неопределенности.
🔵Более совершенные инструменты помогут лучше справляться с неопределенностью.
🔵Цель не в устранении неопределенности, а в признании её существования
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8