Анонсируем Swift 6
Поздравляю всех iOS разработчиков с релизом Swift 6! Мы планомерно разбирали все нововведения в деталях, но стоит еще раз их перечислить:
🟢 Новый подход к многопоточности, новый Swift будет избавлять нас от состояния гонки
🟢 Typed throws, теперь можно указывать тип выбрасываемой ошибки
🟢 Swift Testing - новый продвинутый фреймворк для тестирования
🟢 Модель "владения" через некопируемые типы и ~Copyable
🟢 Интероп с C++ напрямую из Swift
🟢 Новая модель компиляции подмножества языка для встроенных систем
🟢 Улучшения производительности и стабильности
🟢 Поддержка 128-битных целых чисел
🟢 Улучшенная отладка с помощью
🟢 Улучшенная производительность при запуске с explicit модулями
🟢 Foundation типы JSONDecoder, URL, Calendar, FileManager, ProcessInfo, и многие другие, наконец, переписаны на Swift. Теперь это часть языка а не Apple экосистемы
Поздравляю всех iOS разработчиков с релизом Swift 6! Мы планомерно разбирали все нововведения в деталях, но стоит еще раз их перечислить:
@debugDescription
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍1
Потокобезопасность с мьютексами в Swift 6
А еще нам теперь "доступен" новый фреймворк Synchronization со всеми основными примитивами для работы с многопоточностью
1. Берем классический пример не безопасного менеджера для работы с кэшем
2. При использовании привычного GCD прийдется отказаться от прелестей Swift Concurrency и пометить его
3. Но если заменить DispatchQueue то можно оставить class - Sendable и код станет еще и понятнее
4. Но Mutex доступен только с iOS 18, так что напишем свой, с низкоуровневым C-API и pthread_mutex_t
5. Добавляем к нашему коду Legacy и ограничение на таргет пропадает
От себя бы еще добавил не использовать сразу Legacy а сделать Backport, который будет выбирать нужную реализацию, в зависимости от таргета и пометил бы его
А еще нам теперь "доступен" новый фреймворк Synchronization со всеми основными примитивами для работы с многопоточностью
1. Берем классический пример не безопасного менеджера для работы с кэшем
2. При использовании привычного GCD прийдется отказаться от прелестей Swift Concurrency и пометить его
@unchecked
Sendable3. Но если заменить DispatchQueue то можно оставить class - Sendable и код станет еще и понятнее
4. Но Mutex доступен только с iOS 18, так что напишем свой, с низкоуровневым C-API и pthread_mutex_t
5. Добавляем к нашему коду Legacy и ограничение на таргет пропадает
От себя бы еще добавил не использовать сразу Legacy а сделать Backport, который будет выбирать нужную реализацию, в зависимости от таргета и пометил бы его
@deprecated
чтобы не забыть его удалить. Подробнее про такой подход в SwiftUI писал ранее👍9❤1
В 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