💡Навіщо потрібен метод init(coder:) для View Controllers?
Якщо ви нещодавно почали працювати з UIKit або перейшли до верстки кодом, то, ймовірно, стикалися з помилкою:
Ця помилка виникає при створенні контролерів програмно (а не з XIB або storyboard).
Чому це відбувається?
Клас UIViewController відповідає протоколу NSCoding.
Коли ми створюємо його програмно, ми повинні дотримуватися цього протоколу, що включає необхідність реалізації ініціалізатора, навіть якщо ми його не використовуємо безпосередньо.
Як це працює в Storyboard: під час виконання часу, UIStoryboard створює контролер програмно, кодує його за допомогою протоколу NSCoding, а потім передає архів даних у метод init(coder:), що використовується для відтворення стану контролера.
📖 Докладне пояснення можна знайти в цій статті.
🇺🇦 iOSDevUA
Якщо ви нещодавно почали працювати з UIKit або перейшли до верстки кодом, то, ймовірно, стикалися з помилкою:
'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController'Ця помилка виникає при створенні контролерів програмно (а не з XIB або storyboard).
Чому це відбувається?
Клас UIViewController відповідає протоколу NSCoding.
Коли ми створюємо його програмно, ми повинні дотримуватися цього протоколу, що включає необхідність реалізації ініціалізатора, навіть якщо ми його не використовуємо безпосередньо.
Як це працює в Storyboard: під час виконання часу, UIStoryboard створює контролер програмно, кодує його за допомогою протоколу NSCoding, а потім передає архів даних у метод init(coder:), що використовується для відтворення стану контролера.
📖 Докладне пояснення можна знайти в цій статті.
🇺🇦 iOSDevUA
💡Tab View Styles в SwiftUI
Модифікатор
🇺🇦 iOSDevUA
Модифікатор
.tabViewStyle у SwiftUI дозволяє налаштовувати нестандартну поведінку вкладок у таб-барі. Наприклад, він дає можливість користувачам змінювати порядок вкладок за допомогою функції drag-and-drop.🇺🇦 iOSDevUA
❤2
💡Як AI змінює розробку
Цей лонгрид розглядає, як сучасний стан AI змінює патерни розробки програмного забезпечення. Ось кілька ідей:
👉 Розробників можна поділити на дві категорії: бутстрапери — ті, хто використовує генератори додатків для швидкого створення прототипів, та ітератори — ті, хто працює над існуючою кодовою базою за допомогою AI, вдосконалюючи зміни.
👉 AI дозволяє швидко виконати перші 70% роботи, але для більшості решта 30% стають справжнім випробуванням.
👉 Ті, хто успішно працює з AI, не просто приймають згенерований код, а розбивають його на модулі, додають обробку edge кейсів, перевіряють та покращують інтерфейси, типи та архітектурні рішення, додають обробку помилок.
👉 AI допомагає senior-розробникам, але для новачків може бути суттєвим бар’єром.
🇺🇦 iOSDevUA
Цей лонгрид розглядає, як сучасний стан AI змінює патерни розробки програмного забезпечення. Ось кілька ідей:
👉 Розробників можна поділити на дві категорії: бутстрапери — ті, хто використовує генератори додатків для швидкого створення прототипів, та ітератори — ті, хто працює над існуючою кодовою базою за допомогою AI, вдосконалюючи зміни.
👉 AI дозволяє швидко виконати перші 70% роботи, але для більшості решта 30% стають справжнім випробуванням.
👉 Ті, хто успішно працює з AI, не просто приймають згенерований код, а розбивають його на модулі, додають обробку edge кейсів, перевіряють та покращують інтерфейси, типи та архітектурні рішення, додають обробку помилок.
👉 AI допомагає senior-розробникам, але для новачків може бути суттєвим бар’єром.
🇺🇦 iOSDevUA
Pragmaticengineer
How AI-assisted coding will change software engineering: hard truths
A field guide that also covers why we need to rethink our expectations, and what software engineering really is. A guest post by software engineer and engineering leader Addy Osmani
❤2
💡TabletopKit – фреймворк для кооперативних ігор у visionOS
Майбутнє visionOS поки що залишається невизначеним: виробництво дорогих моделей припинили, а поява більш доступних рішень під питанням. Проте технології, що лежать у його основі, досі викликають інтерес. Наприклад, у цьому матеріалі розглядається використання фреймворку TabletopKit для створення кооперативної гри в жанрі escape room. Також детально описані виклики, з якими зіткнулися розробники.
🇺🇦 iOSDevUA
Майбутнє visionOS поки що залишається невизначеним: виробництво дорогих моделей припинили, а поява більш доступних рішень під питанням. Проте технології, що лежать у його основі, досі викликають інтерес. Наприклад, у цьому матеріалі розглядається використання фреймворку TabletopKit для створення кооперативної гри в жанрі escape room. Також детально описані виклики, з якими зіткнулися розробники.
🇺🇦 iOSDevUA
❤2🔥1
💡Огляд Advanced Commerce API
🔗 Apple представила новий API для керування великими каталогами внутрішніх покупок та підписок в App Store.
📖 У статті детально розглядається, кому цей API буде корисним, які можливості він відкриває та які має обмеження.
🇺🇦 iOSDevUA
🔗 Apple представила новий API для керування великими каталогами внутрішніх покупок та підписок в App Store.
📖 У статті детально розглядається, кому цей API буде корисним, які можливості він відкриває та які має обмеження.
🇺🇦 iOSDevUA
❤1
Apple відкрили вихідний код Swift Build! 🎉
Чудовий початок року для Swift-розробників! Apple відкрили вихідний код Swift Build – системи збірки, яка працює під капотом Xcode. Тепер вона доступна у відкритому репозиторії GitHub.
📌 Що це означає?
✅ Підтримка всіх типів Swift-проєктів: пакетів, CLI-інструментів і GUI-додатків.
✅ Нові можливості для інтеграції Swift в інші IDE.
✅ Великий потенціал для кастомізації та оптимізації процесів збірки.
Очікуємо на ще більше гнучкості та інновацій у Swift-екосистемі! 🚀
🇺🇦 iOSDevUA
Чудовий початок року для Swift-розробників! Apple відкрили вихідний код Swift Build – системи збірки, яка працює під капотом Xcode. Тепер вона доступна у відкритому репозиторії GitHub.
📌 Що це означає?
✅ Підтримка всіх типів Swift-проєктів: пакетів, CLI-інструментів і GUI-додатків.
✅ Нові можливості для інтеграції Swift в інші IDE.
✅ Великий потенціал для кастомізації та оптимізації процесів збірки.
Очікуємо на ще більше гнучкості та інновацій у Swift-екосистемі! 🚀
🇺🇦 iOSDevUA
This media is not supported in your browser
VIEW IN TELEGRAM
💡Створення універсального компонента для меню в SwiftUI
📖 У статті автор пояснює, як створити багаторазовий компонент меню для SwiftUI та кастомізувати його під власні потреби.
Основні аспекти, що розглядаються:
👉 Прототипування – створення базової версії меню.
👉 Кастомні View Modifiers – як додавати та використовувати.
👉 View Builders – відокремлення UI від бізнес-логіки.
👉 Налаштування стилів – створення унікального вигляду для меню.
🇺🇦 iOSDevUA
📖 У статті автор пояснює, як створити багаторазовий компонент меню для SwiftUI та кастомізувати його під власні потреби.
Основні аспекти, що розглядаються:
👉 Прототипування – створення базової версії меню.
👉 Кастомні View Modifiers – як додавати та використовувати.
👉 View Builders – відокремлення UI від бізнес-логіки.
👉 Налаштування стилів – створення унікального вигляду для меню.
🇺🇦 iOSDevUA
💡Якщо у вашому застосунку використовується WebView і потрібно налаштувати взаємодію між веб-контентом та нативною частиною, ось короткий навчальний матеріал, який допоможе розібратися з цим процесом.
👉 https://medium.com/swlh/web-to-native-code-communication-on-ios-using-wkscriptmessagehandler-8d307b3847fa
🇺🇦 iOSDevUA
👉 https://medium.com/swlh/web-to-native-code-communication-on-ios-using-wkscriptmessagehandler-8d307b3847fa
🇺🇦 iOSDevUA
Medium
Web to native code communication on iOS using WKScriptMessageHandler
Did you know that it is possible to call Swift code from the JavaScript code of a web page displayed inside a WKWebView?
💡Стаття про те, як тестувати застосунок в умовах повільного інтернету. Так, автор згадує власний інструмент, але він може стати в пригоді. Крім того, у матеріалі пояснюється, навіщо це потрібно, як імітувати повільне з’єднання і що враховувати під час тестування.
👉 https://www.avanderlee.com/debugging/network-link-conditioner-utility/
🇺🇦 iOSDevUA
👉 https://www.avanderlee.com/debugging/network-link-conditioner-utility/
🇺🇦 iOSDevUA
💡Змішування кольорів у SwiftUI
🎨 У SwiftUI з’явилася нова функція
✨ Крім того, цей процес підтримує анімацію, що відкриває можливості для плавної зміни кольорів, наприклад, при переході з світлої теми на темну.
🇺🇦 iOSDevUA
🎨 У SwiftUI з’явилася нова функція
mix, яка дозволяє програмно поєднувати кольори, задаючи два вихідні кольори та колірний простір для отриманого результату.✨ Крім того, цей процес підтримує анімацію, що відкриває можливості для плавної зміни кольорів, наприклад, при переході з світлої теми на темну.
🇺🇦 iOSDevUA
Swift with Majid
Color mixing in SwiftUI
With the latest release of SwiftUI, Apple has introduced a new feature called color mixing. It’s a single function that enables you to perform various creative tasks. In this week’s discussion, we’ll dive into color mixing in SwiftUI and explore its potential…
❤3
💡Оновлення в роботі Background Uploads в iOS
📤 Завантаження файлів у фоновому режимі в iOS залишається однією з найбільш складних тем через недостатню документацію.
🔍 У мережі є чудовий розбір, який пояснює деталі роботи URLSession у фоновому режимі. Однак деякі поради в ньому вже застаріли.
📖 У цій статті розглядаються останні зміни в механізмах фонового завантаження та надаються актуальні рекомендації.
🇺🇦 iOSDevUA
📤 Завантаження файлів у фоновому режимі в iOS залишається однією з найбільш складних тем через недостатню документацію.
🔍 У мережі є чудовий розбір, який пояснює деталі роботи URLSession у фоновому режимі. Однак деякі поради в ньому вже застаріли.
📖 У цій статті розглядаються останні зміни в механізмах фонового завантаження та надаються актуальні рекомендації.
🇺🇦 iOSDevUA
🔥2❤1
💡Каталог Swift-пакетів із підтримкою Android
Команда Skip продовжує розширювати можливості Swift для Android-розробки. Вони вже надіслали PR для додавання Android-таргета в низку бібліотек, а також створили окремий сайт, де можна стежити за прогресом міграції екосистеми Swift на Android.
🇺🇦 iOSDevUA
Команда Skip продовжує розширювати можливості Swift для Android-розробки. Вони вже надіслали PR для додавання Android-таргета в низку бібліотек, а також створили окремий сайт, де можна стежити за прогресом міграції екосистеми Swift на Android.
🇺🇦 iOSDevUA
💡Як запустити CarPlay у McLaren
🚗 Розробник зіткнувся з проблемою – його новий McLaren не підтримував CarPlay.
🔍 Замість того, щоб миритися з цим, він провів реверс-інжиніринг протоколів медіасистеми, розібрався, як працює передача аудіо, і самостійно додав підтримку CarPlay.
📖 У статті детально розповідається про цей процес – від дослідження системи до її інтеграції. Вражаючий технічний кейс для тих, хто любить нестандартні рішення!
🇺🇦 iOSDevUA
🚗 Розробник зіткнувся з проблемою – його новий McLaren не підтримував CarPlay.
🔍 Замість того, щоб миритися з цим, він провів реверс-інжиніринг протоколів медіасистеми, розібрався, як працює передача аудіо, і самостійно додав підтримку CarPlay.
📖 У статті детально розповідається про цей процес – від дослідження системи до її інтеграції. Вражаючий технічний кейс для тих, хто любить нестандартні рішення!
🇺🇦 iOSDevUA
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
💡Відладка застосунку з обмеженим доступом
Розробник Bryce Bostwick поділився цікавим досвідом щодо можливості відладки застосунку, який захищений від аналізу.
⚠️ Обмеження в додатку:
1️⃣ Блокує підключення дебагера.
2️⃣ Автоматично закривається при спробі впровадження коду.
3️⃣ Викликає краш пристрою, якщо на ньому встановлено джейлбрейк.
📖 Що з цього вийшло? Детальний розбір у відео або статті.
💡 Корисно для розробників, які створюють захищені застосунки, або хочуть перевірити свій продукт на стійкість до таких атак.
🇺🇦 iOSDevUA
Розробник Bryce Bostwick поділився цікавим досвідом щодо можливості відладки застосунку, який захищений від аналізу.
⚠️ Обмеження в додатку:
1️⃣ Блокує підключення дебагера.
2️⃣ Автоматично закривається при спробі впровадження коду.
3️⃣ Викликає краш пристрою, якщо на ньому встановлено джейлбрейк.
📖 Що з цього вийшло? Детальний розбір у відео або статті.
💡 Корисно для розробників, які створюють захищені застосунки, або хочуть перевірити свій продукт на стійкість до таких атак.
🇺🇦 iOSDevUA
❤1
💡Ghostty – новий швидкий та кросплатформений термінал
Екс-засновник HashiCorp представив Ghostty – сучасний термінал, що виділяється серед альтернатив. Його головні переваги:
🚀 Висока продуктивність – працює швидко навіть з важкими процесами.
💡 Кросплатформеність – підтримує macOS та Linux.
🎨 Гнучкі налаштування – вкладки, автоперемикання темної теми, кастомізація.
🛠 Додаткові можливості – інтеграція з інструментами та розширені API.
👀 Вже спробував – і поки що дуже подобається!
🇺🇦 iOSDevUA
Екс-засновник HashiCorp представив Ghostty – сучасний термінал, що виділяється серед альтернатив. Його головні переваги:
🚀 Висока продуктивність – працює швидко навіть з важкими процесами.
💡 Кросплатформеність – підтримує macOS та Linux.
🎨 Гнучкі налаштування – вкладки, автоперемикання темної теми, кастомізація.
🛠 Додаткові можливості – інтеграція з інструментами та розширені API.
👀 Вже спробував – і поки що дуже подобається!
🇺🇦 iOSDevUA
💡Глосарій по Swift Concurrency
Matt Massicotte зібрав у одному місці всі ключові терміни, пов’язані зі Swift Concurrency.
📖 У своєму матеріалі він пояснює не лише основи
💡 Корисний ресурс для розробників, які працюють зі Swift Concurrency або лише починають знайомство з багатопотоковістю у Swift.
🇺🇦 iOSDevUA
Matt Massicotte зібрав у одному місці всі ключові терміни, пов’язані зі Swift Concurrency.
📖 У своєму матеріалі він пояснює не лише основи
async/await та actor, а й менш очевидні концепції, такі як @unchecked, for-await тощо. До кожного терміна додається коротка довідка: що це таке, як використовується та в якому Swift Evolution пропозалі було реалізовано.💡 Корисний ресурс для розробників, які працюють зі Swift Concurrency або лише починають знайомство з багатопотоковістю у Swift.
🇺🇦 iOSDevUA
❤2
💡Як дебажити диплінки та Quick Actions
📌 При запуску додатку через Xcode дебаггер підключається автоматично, але при закритті – відключається. Це створює проблему для тестування функцій, які залежать від альтернативних способів запуску, наприклад, Deep Links або Quick Actions.
💡 Рішення – налаштувати в схемі запуску опцію “Wait for executable to be launched”. Це дозволить запускати додаток через диплінк чи Quick Actions, а потім приєднувати дебаггер вручну.
👉 https://tanaschita.com/xcode-debugging-app-restart/
🇺🇦 iOSDevUA
📌 При запуску додатку через Xcode дебаггер підключається автоматично, але при закритті – відключається. Це створює проблему для тестування функцій, які залежать від альтернативних способів запуску, наприклад, Deep Links або Quick Actions.
💡 Рішення – налаштувати в схемі запуску опцію “Wait for executable to be launched”. Це дозволить запускати додаток через диплінк чи Quick Actions, а потім приєднувати дебаггер вручну.
👉 https://tanaschita.com/xcode-debugging-app-restart/
🇺🇦 iOSDevUA
Tanaschita
Learn to debug iOS features that require app start from external actions in Xcode
Learn how to debug features like deep linking, universal links or home screen quick actions in Xcode with the scheme option wait for executable to be launched. Learn how to attach Xcode's debugger on app launch.
❤2
💡SwiftUI + Firebase: створюємо застосунок “Нагадування”
📌 У цьому покроковому гайді показано, як розробити to-do застосунок на SwiftUI з інтеграцією Firebase.
⚡️ Основні етапи навчання:
1️⃣ Інтерфейс користувача – основи MVVM-архітектури та створення списку задач.
2️⃣ Кастомні компоненти – розділення UI на відокремлені View.
3️⃣ Інтеграція Firebase – налаштування бекенду та тестування локально.
4️⃣ Збереження даних у Cloud Firestore – додавання, редагування та видалення даних.
5️⃣ Dependency Injection – управління залежностями у проєкті.
6️⃣ Аутентифікація користувачів – підтримка анонімного входу, Sign in with Apple та прив’язка акаунтів.
🇺🇦 iOSDevUA
📌 У цьому покроковому гайді показано, як розробити to-do застосунок на SwiftUI з інтеграцією Firebase.
⚡️ Основні етапи навчання:
1️⃣ Інтерфейс користувача – основи MVVM-архітектури та створення списку задач.
2️⃣ Кастомні компоненти – розділення UI на відокремлені View.
3️⃣ Інтеграція Firebase – налаштування бекенду та тестування локально.
4️⃣ Збереження даних у Cloud Firestore – додавання, редагування та видалення даних.
5️⃣ Dependency Injection – управління залежностями у проєкті.
6️⃣ Аутентифікація користувачів – підтримка анонімного входу, Sign in with Apple та прив’язка акаунтів.
🇺🇦 iOSDevUA
Copilot тепер підтримує кастомні інструкції до репозиторію
🚀 GitHub додав можливість налаштовувати Copilot під специфіку вашого проєкту!
🔹 Достатньо створити файл
✔️ Технологічний стек
✔️ Кодстайл і стандарти
✔️ Очікувану поведінку асистента
🛠 Після цього Copilot враховуватиме ці інструкції під час роботи з кодом.
📖 Деталі оновлення: GitHub Changelog.
🇺🇦 iOSDevUA
🚀 GitHub додав можливість налаштовувати Copilot під специфіку вашого проєкту!
🔹 Достатньо створити файл
.github/copilot-instructions.md та вказати в ньому:✔️ Технологічний стек
✔️ Кодстайл і стандарти
✔️ Очікувану поведінку асистента
🛠 Після цього Copilot враховуватиме ці інструкції під час роботи з кодом.
📖 Деталі оновлення: GitHub Changelog.
🇺🇦 iOSDevUA
❤2
💡Параметризовані тести в Swift
Параметризовані тести дозволяють запускати один і той самий тест із різними вхідними даними, не додаючи зайвого коду. Наприклад, можна протестувати всі можливі значення
🇺🇦 iOSDevUA
Параметризовані тести дозволяють запускати один і той самий тест із різними вхідними даними, не додаючи зайвого коду. Наприклад, можна протестувати всі можливі значення
enum. Достатньо задати колекцію параметрів для тесту, і він автоматично виконається для кожного з них.🇺🇦 iOSDevUA
SwiftLee
Parameterized tests in Swift: Reducing boilerplate code
Learn how to write parameterized tests in Swift, allowing you to run a single test with multiple input parameters.