Forwarded from Surf Tech
Media is too big
VIEW IN TELEGRAM
После стрима разыграем три пауэрбанка с MagSafe. Условия в посте.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1
Спасибо всем кто смотрел вместе с нами на стриме, первый опыт, пишите в комментарии зашел ли вам такой формат, хочется ли трансляции других ивентов?
AirPods Pro 3
Apple Watch 11
iPhone 17
iPhone Air
iPhone Pro
Как вам новинки? 👍 / 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔18👍7🔥4❤1
Набор советов по дебагу iOS приложений
Название достаточно громкое, "Я потратил 5 лет на неправильный дебаг, вот как нужно". Но советы действительно полезные:
Не эффективно:
🔴 Множество print-ов для отладки
🔘 Разделяю мнение автора. Но все таки полезно сделать нормальное логирование, а ситуационные print-ы так себе подход
🔴 Закомментировать все и постепенно раскомментировать
🔘 Точно не лучший способ, сколько раз из-за багов Xcode компиляции я думал что все исправил
🔴 Магические константы
🔘 Примеры в статье странные, я бы обозначил это так: не чините баги с помощью
Что эффективно:
🟢 Conditional Breakpoints.
Эффективно но сложно в настройке, применял только в самых сложных сценариях
🟢 LLDB команды для терминала.
🟢 Debug View Hierarchy - очень полезно, когда работает
🟢 Включайте точки остановки при runtime ошибках
Что еще использую лично я?
🔵 Proxy для моккирования сети
🔵 Выстраивание архитектуры через UDF
🔵 Логирование переходов из состояния в состояние
🔵 Автотесты для воспроизведения ошибочного сценария
🔵 Форматирование контента логируемых объектов (
Название достаточно громкое, "Я потратил 5 лет на неправильный дебаг, вот как нужно". Но советы действительно полезные:
Не эффективно:
Dispatch.asyncAfter
Что эффективно:
Эффективно но сложно в настройке, применял только в самых сложных сценариях
po, expr, image, thread, frame
Что еще использую лично я?
debugDescription
)Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🤔1
Превращение журналов CI в действия
В обзоре дебага я немного коснулся логирования. Но логирование нужно не только для для отлаживания багов, но для CI. Просмотр журналов CI при падении утомителен и неэффективен. Использование скриптов для комментариев и оповещений дублирует логику. Разберемся как использовать специальные строки журнала и оболочку для автоматизации действий.
Пример с Xcode
🔵 Xcode использует специальные журналы для отображения предупреждений.
🔵 Можно создать исполняемый файл, который будет анализировать журналы и выполнять действия.
Реализация на Swift
🔵 Используется подпроцесс для выполнения команды сборки и анализа журналов.
🔵 Подпроцесс удаляет первый аргумент и гарантирует прозрачность
🔵 Вывод стандартного вывода анализируется и обрабатывается.
Добавление комментариев к PR
🔵 Лог-коммандер получает переменные окружения для авторизации на GitHub.
🔵 Создается клиент GitHubClient для публикации комментариев.
🔵 Лог-коммандер анализирует строки журнала в формате JSON и публикует комментарии.
Манипуляция средой
🔵 Дочерний процесс не должен знать об авторизации на GitHub.
🔵 Среда манипулируется в исходном вызове run для удаления переменной
Преимущества и расширение
🟢 Единая оболочка упрощает процесс отладки и уменьшает дублирование логики.
🟢 Можно расширить функциональность для создания оповещений Slack, метрик и других действий.
В обзоре дебага я немного коснулся логирования. Но логирование нужно не только для для отлаживания багов, но для CI. Просмотр журналов CI при падении утомителен и неэффективен. Использование скриптов для комментариев и оповещений дублирует логику. Разберемся как использовать специальные строки журнала и оболочку для автоматизации действий.
Пример с Xcode
Реализация на Swift
stderr
.Добавление комментариев к PR
Манипуляция средой
GITHUB_TOKEN
.Преимущества и расширение
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Apple представила новый SwiftUI WebView для отображения веб-контента. Веб-просмотр доступен для iOS 26, macOS 26 и других версий. Одна из немногих фич, которую точно стоит прикручивать с бекпортом сразу при релизе. Веб-просмотр является частью фреймворка WebKit, отличий в рендеринге не будет, а вот API сильно приятнее.
Два подхода к отображению веб-контента
Простая загрузка по URL-адресу
Усовершенствованный контроль с помощью WebPage
Преимущества WebView
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Пока все радуются iOS 26, давайте вспомним, что же нам стало доступно вместе с релизом Swift 6.2.
Approachable Concurrency
Swift 6.2 упрощает параллельное программирование:
@MainActor
async
функции: можно писать асинхронный код без доступа к мутации состояния@concurrent
Safe Systems Programming
Новые фичи по написанию низкоуровневого быстрого кода безопасно:
unsafe pointer
Swift расширение для VS Code официально в релизе:
Точный контроль над "ворнингами"
Предупреждениями компилятора теперь можно гранулярно управлять через установку
diagnostic group
идентифицируемой именем. Например, теперь можно выставить "считать все предупреждения ошибками" кроме предупреждений о депрекейтах API..target(
name: "MyLibrary",
swiftSettings: [
.treatAllWarnings(as: .error),
.treatWarning("DeprecatedDeclaration", as: .warning),
]
)
Улучшили дебаг многопоточки:
Подпроцесс
В Swift 6.2 представлен новый пакет
Subprocess
с оптимизированным API для запуска внешних процессов и управления ими. import Subprocess
let swiftPath = FilePath("/usr/bin/swift")
let result = try await run(
.path(swiftPath),
arguments: ["--version"]
)
let swiftVersion = result.standardOutput
Foundation
Библиотека Foundation включает современный NotificationCenter API, который использует конкретные типы уведомлений вместо строк и нетипизированных словарей. Типы уведомлений также указывают, отправляются ли они синхронно на основной актор или асинхронно через соответствие
MainActorMessage
или AsyncMessage
.Observation
Swift 6.2 позволяет транслировать изменения состояния наблюдаемых типов в рамках транзакций с помощью нового типа асинхронной последовательности
Observations
. Это позволяет избежать избыточных обновлений пользовательского интерфейса, повышает производительность и гарантирует, что ваш код будет реагировать на согласованный снапшот изменения.Тестирование
Новые API для повышения выразительности тестов и результатов тестирования.
-@Test("square() returns x * x")
-func squareIsXTimesX() {
+@Test func `square() returns x * x`() {
#expect(square(4) == 4 * 4)
}
Поддержка WebAssembly
Swift 6.2 получил поддержку WebAssembly, также известной как Wasm. WebAssembly — это платформа виртуальных машин, ориентированная на переносимость, безопасность и высокую производительность. Вы можете создавать как клиентские, так и серверные приложения для Wasm и развертывать их в браузере или на других платформах. Узнайте больше о Wasm в обзоре поддержки WebAssembly в Swift.
Что из этого вы больше всего ждали?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3
Фичефлаги - простая пятничная тема на обсудидить. Флаги позволяют включать и выключать определенные функциональные возможности в зависимости от условий. Если вы используете trunk-based подход, то вы точно активно пользуетесь фичефлагами. В статье разбирается базовая реализация фичефлагов, которую можно значительно улучшить. Что бы я заложил, если передо мной стояла задача реализовать фичефлаги в новом приложении:
Вы используете фичефлаги в своем прилоежнии? Если да, то что бы вы еще отметили? Если нет, то почему?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Навалим немного базы:
[weak self]
используется для предотвращения утечек памяти в замыканиях. В обработчиках завершения [weak self]
и guard let self
используются для проверки существования self перед продолжением выполнения. Но SE-0269 позволяет использовать неявные self-захваты в ситуациях, когда замыкания не сохраняются, что снижает вероятность утечек памяти.Проблемы с [weak self] в Task
Предотвращение утечек памяти в Task
Рекомендации по использованию [weak self] в Task:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2