iOS Broadcast
3.4K subscribers
1.73K photos
86 videos
989 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🐥 Новые пропоузалы SE-0447 и SE-0446

Интероп с C++ открыл новое измерение сложности в Swift, как заметил создатель языка, Chris Lattner в своем интервью, свифт стал слишком сложным. Я слежу за тем как развивается язык и тем, какие конструкции туда добавляются и эти 2 предложения точно не делают язык проще. В чем суть:
🟢SE-0447 вводит абстрацию доступа к непрерывной памяти - Span<T>
🟢Непрерывная память применяется в таких типах, как Array, UnsafeBufferPointer, Foundation.Data и т.д.
🟢Это нужно для создания более безопасных и производительных версий существующих API
🟢SE-0446 вводит новое ограничение ~Escapable для того чтобы реализовать SE-0447
🟢~Escapable будет использоваться для типов, которые могут быть скопированы локально, но не могут быть назначены или переданы вне текущего контекста

Выглядит круто и логично, но у меня вопросы:
🔴В каких случаях мы упираемся в произодительность доступа к непрерывной памяти?
🔴Зачем тащить язык в область C++ и Rust?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
AVAudioEffectNode: звуковые эффекты, написанные на Swift
Очень редко приходится работать с AVFoundation и каждый раз как в первый 😅 . Оказывается, на WWDC 2019 Apple представила AVAudioSourceNode и AVAudioSinkNode. Так как это часть AVAudioEngine и работает с железом, то API там не очень дружелюбное, но очень гибкое. В статье разбирается пример как создавать звуковые эффекты в более приятной манере:
🟢Создается AVAudioNode, который можно подключить к движку, используя AVAudioUnit
🟢Подклассы, такие как AVAudioUnitEffect, используются для создания пользовательских аудиоэффектов
🟢Для определения описания аудиокомпонента используется AudioComponentDescription
🟢В AVAudioEffectNode определяется удобный инициализатор для передачи блока рендеринга.
🟢Объединение источника (SourceNode), приемника (SinkNode) и эффекта (EffectNode) создает надежный и гибкий API для обработки и генерации звука

😺️ Полный проект
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Использование макроса #expect в фреймворке Swift Testing

Короткая но полезная статья про простоту миграции на новый фреймворк тестирования, а именно по переходу на новый #expect. Самое приятное что на примере показывается возможность миграции через замнe по-шаблоны, я ранньше писал о использовании такого подхода при миграции с RxSwift на Combine
🟢Макрос #expect заменяет XCAssertEqual и XCAssertTrue
🟢Альтернативный макрос #require не проходит проверку на ранней стадии
🟢Новый макрос #expect содержит больше деталей и позволяет выполнять тест без дальнейшей отладки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
3 новые фишки Xcode 16

🟢Создание файлов: можно создавать пустой файл, без указания расширения или просто выделить кусок кода, скопировать и вставить в навигатор проекта

🟢Каталог ресурсов: позволяет показать все использования каждого ресурса в проекте

🟢Режим отладки: можно смотреть весь стек вызова внутри одного таба
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍5
▶️ Создаем расширение для Safari

У каждого iOS разработчика был момент, когда при создании нового проекта - листаешь что еще можно создать кроме Command Line Tool и iOS Application. Для браузера можно написать расширение с использованием всех нативных технологий, тут и Swift и SwiftUI и Swift Testing, главный минус только в работе HTML DOM. Вводное демо по созданию и публикации такого расширения показывали еще на WWDC22, но актуальность не потеряло. Если заинтересуетесь, более подробная инструкция есть у Apple:
🟢Добавление файлов скриптов для изменения содержимого веб-страницы
🟢Настройка значений списка свойств в приложении для работы с расширением Safari
🟢Создание и запуск приложения для тестирования расширения

Я лично еще раз убедился в том, что у меня в браузере не будет никаких расширений, слишком много у них доступа
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
▶️ Зачем нужны Mergeable Libraries

На мой взгляд, не достаточно замеченное сообществом нововведение, которое может значительно повлиять на наши приложения. На WWDC 2023 Apple анонсировала «объединяемые библиотеки»: динамические библиотеки с достаточным количеством метаданных, которые можно статически связать с приложениями.
Это перевернуло игру, теперь есть не только 2 плохих решений, но и компромиссное, хоть и не идеальное. В чем суть была проблема выбора статической или динамической линковки? Статическая линковка означает, что библиотека будет объединена с приложением при компиляции, а динамическая загружает библиотеку при запуске:
Статическая линковка позволяет проводить более глубокую оптимизацию как по размеру (удаляя не используемый приложением код библиотеки) так и по скорости (за счет понимания контекста использования вызовов)
Статическая линковка замедляет процесс сборки и при использовании одной зависимости в нескольких таргетах приводит к дублированию кода и увеличению фактического размера финального приложения
➡️По-этому большинство приложений подключает библиотеки, линкуя их динамически, теряя все преимущества статической линковки

И тут появляются Mergeable Libraries, это действительно новый формат, позволяющий динамически подключаться к ним или «объединять» их с приложениями, что по сути является статическим связыванием. Единственный оставшийся компромисс заключается в том, что библиотека остается динамической

Настоятельно рекомендую всем ознакомиться со статьей по миграции проекта на Mergable Libraries, это может значительно улучшить приложения без значительных усилий со стороны разработки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🐥 Создание анимации печати Swift
Очень интересная реализация анимации печати текста. Логика, лежащая в основе анимации:
🟢Начинаем с пустой строки и постепенно раскрываем каждый символ
🟢Используем AttributedString для управления видимостью символов
🟢Рекурсивная функция с задержкой создает эффект набора текста
🟢Использование AttributeString вместо добавления каждого символа по одному помогает избежать проблем с версткой
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9👌5