В 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 трейтов в повседневной работе. примеры использования из статьи:
@Suite(.serialized)
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
Первые попытки программировать под iOS я предпринимал в 2011 году, но с первого захода ничего не понял без знания ООП. А изучив ООП на примере параллельно C++ и Objective-C у меня были большие вопросы к... C++. К чему вся эта история? К тому что именно покупка iPad и простота Jeilbraik тех времен влюбила меня в изящность приложений на планшетах. Именно про то как в те времена был устроен Jeilbreak я с удовольствием и прочитал. Как удавалось установить стороннее приложение через посещение сайта?
Через этот же эксплойт позже был взломан Nintendo Switch
Please open Telegram to view this post
VIEW IN TELEGRAM
Кто-то любит сам писать сам регулярки? Я нет, несмотря на все плюшки
Swift 5.7
для работы с регулярными выражениями, для меня противной осталась формирование регулярки по ТЗ. Для облегчения этой нашел опенсорсный онлайн редактор регулярных выражений:Swift
на вебеHTTP
сервераSwift
регулярок и DSL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Интероп с C++ открыл новое измерение сложности в Swift, как заметил создатель языка, Chris Lattner в своем интервью, свифт стал слишком сложным. Я слежу за тем как развивается язык и тем, какие конструкции туда добавляются и эти 2 предложения точно не делают язык проще. В чем суть:
SE-0447
вводит абстрацию доступа к непрерывной памяти - Span<T>
Array
, UnsafeBufferPointer
, Foundation.Data
и т.д. SE-0446
вводит новое ограничение ~Escapable
для того чтобы реализовать SE-0447
~Escapable
будет использоваться для типов, которые могут быть скопированы локально, но не могут быть назначены или переданы вне текущего контекста Выглядит круто и логично, но у меня вопросы:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
AVAudioEffectNode: звуковые эффекты, написанные на Swift
Очень редко приходится работать с
🟢 Создается
🟢 Подклассы, такие как
🟢 Для определения описания аудиокомпонента используется
🟢 В
🟢 Объединение источника (SourceNode), приемника (SinkNode) и эффекта (EffectNode) создает надежный и гибкий API для обработки и генерации звука
😺️ Полный проект
Очень редко приходится работать с
AVFoundation
и каждый раз как в первый 😅 . Оказывается, на WWDC 2019 Apple представила AVAudioSourceNode
и AVAudioSinkNode
. Так как это часть AVAudioEngine
и работает с железом, то API там не очень дружелюбное, но очень гибкое. В статье разбирается пример как создавать звуковые эффекты в более приятной манере: AVAudioNode
, который можно подключить к движку, используя AVAudioUnit
AVAudioUnitEffect
, используются для создания пользовательских аудиоэффектов AudioComponentDescription
AVAudioEffectNode
определяется удобный инициализатор для передачи блока рендеринга. Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Короткая но полезная статья про простоту миграции на новый фреймворк тестирования, а именно по переходу на новый
#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