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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🔨 Xcode группы и папки
В Xcode 16 значительно переработали подход для работы с группами и папками. Что изменилось? Файлы и папки проекта расположены по-другому в навигаторе проектов, то, как раньше вели себя группы, теперь ведут себя папки.
🟢Раньше файлы и папки были сгруппированы, а в Xcode 16 можно только перетаскивать файлы в папки или из них, но я нельзя перемещать их на одном уровне
🟢При добавлении нового файла в Xcode 16 он помещается в корень проекта, а не после выбранного файла
🟢Изменение структуры папок в Finder позволяет Xcode 16 получать доступ к файлам.
Apple, наконец, решила, что папки - это правильный путь: они используются по умолчанию для новых проектов в Xcode.
Если вам это не нравится или вы хотите обновить старый проект, вы всегда можете поменять его местами. Щелкните правой кнопкой мыши папку проекта в навигаторе и выберите "Convert to Group" или "Convert to Folder".
Лично я давно сам выбрал подход с папками, а вы?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍5
Swift Testing. Использование трейтов для аннотации тестов
Отличный пример использования Swift Testing трейтов в повседневной работе. примеры использования из статьи:
🟢Отключение "флакающего" теста из кода с комментарием. Такой подход максимально явный для системы контроля версии
🟢Условное отключение теста, в зависимости от энвайромента. В статье есть пример с запуском только на физическом устройстве, но можно применить и для запуска в определенных тестовых сценариях или планах тестирования, например только для нагрузочного тестирования.
🟢Отключение теста с линковкой к задаче в рамках которой этот тест будет исправлен. Сильно лучше чем комментарий формата TODO: Fix
🟢Отключение теста из-за известного бага с линковкой на issue. Детальная документация по поддерживаемым трекерам
🟢Ограничение по времени прогона теста. Для отсутствие регрессии приложения зачастую требуется не только верифицировать бизнес логику но и отсутвтие деградации перформанса кода
🟢Плохо написаные тесты могут аффектить энвайромент и влиять друг на друга при параллельном запуске. Для таких кейсов есть костыль @Suite(.serialized)
🟢Swift Testing опенсорсный, так что можно подключить исходники, форкнуть или даже внести изменения. Например автоматически переоткрывать баг если тест упал
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
Jailbreak по ссылке: удаленное исполнение кода на iOS
Первые попытки программировать под iOS я предпринимал в 2011 году, но с первого захода ничего не понял без знания ООП. А изучив ООП на примере параллельно C++ и Objective-C у меня были большие вопросы к... C++. К чему вся эта история? К тому что именно покупка iPad и простота Jeilbraik тех времен влюбила меня в изящность приложений на планшетах. Именно про то как в те времена был устроен Jeilbreak я с удовольствием и прочитал. Как удавалось установить стороннее приложение через посещение сайта?
🟢Через уязвимости WebKit в iOS.
🟢Уязвимость позволяет удаленно выполнить код на устройстве жертвы.
🟢Уязвимости Trident позволили осуществить первый удаленный джейлбрейк.
🟢Затрагивает JavaScriptCore, движок времени выполнения для JavaScript-кода в WebKit.
🟢Позволяет создать произвольный примитив для чтения и записи в памяти любого процесса в приложении Safari.
🟢Была исправлена только в iOS 9.3.5, но код все еще доступен в открытом доступе в архиве WebKit на GitHub.
🟢Уязвимость может использоваться для повреждения памяти Safari и запуска вредоносного кода.
🟢Эксплойт для iOS выглядел следующим образом: создает нехватку памяти, чтобы вызвать сборку мусора а после создает произвольный примитив для чтения и записи, который может повредить память.

Через этот же эксплойт позже был взломан Nintendo Switch
Please open Telegram to view this post
VIEW IN TELEGRAM
😺️ Swift Regex

Кто-то любит сам писать сам регулярки? Я нет, несмотря на все плюшки Swift 5.7 для работы с регулярными выражениями, для меня противной осталась формирование регулярки по ТЗ. Для облегчения этой нашел опенсорсный онлайн редактор регулярных выражений:
🟢Позволяет быстро тестировать и дебажить регулярки
🟢Отличный пример использования Swift на вебе
🟢Vapor в качестве HTTP сервера
🟢Нативный рендеринг Swift регулярок и DSL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103
🐥 Новые пропоузалы 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