EasySwift iOS🍏
3.01K subscribers
271 photos
9 videos
410 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Secret Management on iOS

🙅‍♂️ Если по какой-то причине вы храните токены или ключи в исходном коде - у меня для вас плохие новости: так не стоит делать

⚠️ Секреты не следует хранить в исходном коде или в файлах конфигурации Xcode, так как они могут быть доступны в скомпилированном приложении. Вместо этого рекомендуется использовать серверное хранение.

⚠️ Обфускация секретов с помощью генерации кода и шифрования может затруднить их извлечение, но не гарантирует полной безопасности.

Лучший способ защитить секреты — это не хранить их на клиенте. Если это невозможно, следует рассмотреть возможность использования серверного хранения и обфускации для снижения рисков.

ℹ️ Исследования показывают, что тысячи секретов, таких как API-ключи, ежедневно утечка на платформах, таких как GitHub, что подчеркивает важность безопасного управления секретами.

Пусть статья и не новая, но актуальная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Взлом через картинку в Apple: уроки громкой уязвимости для разработчиков

🚨 Уязвимость PT-2025-34177 (CVE-2025-43300) в системном фреймворке ImageIO позволяет злоумышленникам выполнять произвольный код через вредоносные изображения, что ставит под угрозу миллионы устройств Apple.

‼️ Атака может происходить без взаимодействия пользователя (zero-click), что делает её особенно опасной, так как уязвимость использовалась в реальных атаках на конкретных людей.

🔼 Пользователям рекомендуется обновлять свои устройства до последних версий iOS/Android для уменьшения риска быть атакованным и избегать открытия подозрительных файлов, особенно если они приходят как документы.

Для предотвращения подобных уязвимостей необходимо внедрять процессы безопасной разработки, включая фаззинг и статический анализ кода, а также использовать методы защиты от реверс-инжиниринга.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Debugging Swift Concurrency: “Am I on the Main Actor?”

В Swift 6 важно думать не о потоках, а о акторах, чтобы избежать ошибок с доступом к пользовательскому интерфейсу и тяжелым вычислениям.

⚠️ Используйте MainActor.assertIsolated() для проверки, что код выполняется на главном актере, что помогает выявить ошибки во время разработки.

Можно создавать собственные актеры с помощью @globalActor, что позволяет использовать аналогичные методы проверки изоляции.

➡️ Используйте информацию о очереди в Xcode для понимания контекста выполнения актеров и отладки проблем с многопоточностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Жизненный цикл UIViewController в 2025 году: что изменилось и что устарело

🔍 Методы viewDidUnload и didReceiveMemoryWarning устарели, в то время как новые хуки, такие как viewIsAppearing и viewSafeAreaInsetsDidChange, стали стандартом для работы с UIViewController.

Классический жизненный цикл UIViewController включает методы инициализации, загрузки представления, а также методы для управления отображением и изменениями окружения.

🔗 Для корректного управления дочерними контроллерами необходимо использовать методы addChild и removeFromParent, чтобы обеспечить правильное получение событий жизненного цикла.

➡️ Рекомендуется использовать методы updateViewConstraints и traitCollectionDidChange для адаптации интерфейса к изменениям окружения, таким как смена темы или ориентации устройства.

➡️ Методы для восстановления состояния, такие как encodeRestorableState и decodeRestorableState, остаются актуальными, однако большинство разработчиков предпочитают использовать UserDefaults или CoreData для сохранения данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6
Debug crashes in iOS using MetricKit

⚠️ MetricKit — это система для сбора и анализа отчетов о сбоях на уровне системы, которая была введена в iOS 13, позволяя выявлять сбои, которые традиционные инструменты не могут зафиксировать.

Для начала работы с MetricKit необходимо импортировать его в AppDelegate и подписаться на протокол MXMetricManagerSubscriber, чтобы получать отчеты о сбоях.

ℹ️ Отчеты о сбоях обрабатываются с помощью метода handleCrashDiagnostics, который позволяет логировать краткие сводки, анализировать стек вызовов и архивировать информацию о сбоях.

🔍 Для тестирования реализации MetricKit можно симулировать сбои, такие как выход за пределы массива или принудительное развертывание nil, и проверить, как система реагирует на эти сбои.

class AppDelegate: UIResponder, UIApplicationDelegate, MXMetricManagerSubscriber {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Register as a subscriber to receive metrics and diagnostics
MXMetricManager.shared.add(self)
return true
}

// Implement the required delegate method for diagnostics
func didReceive(_ payloads: [MXDiagnosticPayload]) {
// Process crash reports
for payload in payloads {
if let crashDiagnostics = payload.crashDiagnostics {
handleCrashDiagnostics(crashDiagnostics)
}
}
}

func applicationWillTerminate(_ application: UIApplication) {
// Unsubscribe when the app terminates
MXMetricManager.shared.remove(self)
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
ARC в Swift

🎉 Всех с прошедшим Днем программиста! И чтобы не забывать основы - принес статью про механизм подсчета ссылок.

ARC (Automatic Reference Counting) - это метод управления памятью в Swift, который автоматически отслеживает количество сильных ссылок на объекты и освобождает их, когда счётчик достигает нуля.

⚠️ Циклы сильных ссылок (retain cycles) могут возникать, когда два объекта ссылаются друг на друга, что мешает ARC освободить память. Это может привести к утечкам памяти.

🔗 Weak ссылки не учитываются ARC при подсчёте ссылок, что помогает избежать retain cycles, в то время как unowned ссылки никогда не становятся nil, но могут крашнуть приложение при обращении к уничтоженному объекту.

⚙️ ARC работает на уровне SIL (Swift Intermediate Language), где компилятор автоматически добавляет инструкции подсчёта ссылок, что делает код более чистым и безопасным.

✔️ Автоматический подсчет ссылок упрощает управление памятью, избавляя разработчиков от необходимости вручную управлять ссылками, что делает код более лаконичным и понятным.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍2
Swift 6.2 Released

⚡️ Swift 6.2 выпущена 15 сентября. Кратко, что нового.

Упрощенное написание безопасного параллельного кода с помощью новых атрибутов, таких как @concurrent, и делает код однопоточным по умолчанию.

🔒 В новой версии добавлены типы InlineArray и Span, которые обеспечивают безопасный доступ к памяти и высокую производительность без дополнительных затрат.

🔥 Расширение Swift для VS Code теперь официально подтверждено и включает функции, такие как фоновая индексация и встроенная отладка с LLDB.

Swift 6.2 теперь поддерживает WebAssembly, позволяя создавать приложения для браузеров и других сред выполнения.

⚙️ Библиотеки Swift 6.2 включают новый пакет Subprocess для управления внешними процессами и улучшенный API для NotificationCenter.
Please open Telegram to view this post
VIEW IN TELEGRAM
62👍2🔥1
Не могу не поделиться важной и крутой инфой: мой друг выпустил 10 часовой бесплатный курс!!! про iOS разработку для начинающих 🔥

Если вы начали изучать Swift – обязательно к просмотру. И не забывайте делиться с теми, кто тож хочет начать этот увлекательный путь.

https://www.youtube.com/watch?v=SUKocLwjA5k
🔥8👍52
Как Swift Runtime влияет на производительность iOS-приложений

⚡️ Тут наши ребята рассказывают про производительность - супер объемный и полезный обзор. Вот лишь несколько моментов.

⚙️ Swift Runtime играет ключевую роль в производительности iOS-приложений, особенно в управлении памятью и проверке соответствия типов, что может значительно замедлить работу приложения.

‼️ Метод swift_conformsToProtocolMaybeInstantiateSuperclasses является узким местом производительности, так как он может занимать от 1 до 3 мс на каждом вызове, особенно при использовании операторов as? и as! или методов String(describing:) и String(reflecting:).

⚠️ Рекомендуется избегать использования String(describing:) и операторов as? и as!, а также минимизировать использование type-generic-constraint-ов для повышения производительности приложения.

🤫 Использование type-generic-constraint-ов может значительно замедлить приложение, так как каждый вызов метода swift_conformsToProtocolMaybeInstantiateSuperclasses требует проверки
соответствия для каждого протокола.

💯 Рекомендую к прочтению.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Swift Default Value in String Interpolations

🔥 Swift 6.2 улучшает интерполяцию строк с опциональными значениями, позволяя использовать параметр значения по умолчанию.

При интерполяции строк с опционалами компилятор выдает предупреждение, если не указано значение по умолчанию.

🤫 Теперь можно использовать новый параметр по умолчанию в строке, чтобы она не зависела от типа опционального значения. Однако, он не будет работать с локализацией: LocalizedStringKey не поддерживает такой формат.

// The count is not set
Text("The count is \(count, default: "not set")")
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🪄 Вжух и iOS-митап от Сбера

1 октября встречаемся на митап для iOS-разработчиков в офисе Сбера, чтобы обсудить самые актуальные задачи: как сделать iOS-приложения быстрее, стабильнее и удобнее для пользователей.

В программе:
🟢 спикеры из Сбера, Авито и SberDevices
🟢 подходы к оптимизации процессов и производительности
🟢 решения, которые можно внедрить в своей команде и даже в жизни
🟢 идеи, которые помогают экономить время и ресурсы

Формат: онлайн и офлайн

Программа и регистрация по ссылке
1