🇺🇦 iOS Dev UA - спільнота iOS розробників
384 subscribers
399 photos
42 videos
9 files
959 links
Перша україномовна спільнота iOS розробників 🇺🇦

👨‍💻Цікаві матеріали зі світу розробки для продуктів Apple.
Статті по розробці на Swift та SwiftUI. Огляд нових технологій в розробці від Apple.

чат: @iOSDevsUAChat
Ідеї та пропозиції: @SergeyZhuravel
Download Telegram
🎬Server-side Swift Meetup #3

Продовжуючи тему Swift на сервері, ось посилання на наступний митап від команди, яка займається його розвитком. У програмі:

👉 Swift і WebAssembly
👉 Підготовка проектів до Swift 6

📆 Митап відбудеться сьогодні

🇺🇦 iOSDevUA
1👍1🔥1
Відбувся реліз Swift 6! 🎉🎉🎉

🦺 Concurrency: memory safety і data-race safety
🪟 Підтримка вбудованих та крос-платформених рішень
🧪 Swift Testing: параметризоване тестування на основі макросів

👉 https://www.swift.org/blog/announcing-swift-6/

🇺🇦 iOSDevUA
👍42🔥2
💡Camera Control в iPhone16: AVCaptureControl та фреймворк LockedCameraCapture

Буквально тиждень тому показали новий телефон, а у нас вже з’явився новий інструмент, новий контрол, з яким можна працювати.

📖 На офіційній сторінці Apple можна ознайомитися з найкращими практиками в плані дизайну.

А з того, що нам може знадобитися:

1️⃣ AVCaptureControl — новий контрол тільки для 16/16 Pro (приклади роботи — тут).

2️⃣ LockedCameraCapture — новий фреймворк, за допомогою якого можна створити розширення для запуску камери на заблокованому пристрої. Туторіал вже доступний (але, як і завжди, є ряд обмежень).

🇺🇦 iOSDevUA
💡libcimbar – протокол передачі даних за допомогою QR-кодів

Не знаю, навіщо вам цей проєкт, але виглядає як крута ідея для основи якогось пет-проєкту! На базі анімованого QR-коду реалізована передача даних зі швидкістю близько 100 кбіт/сек.

🇺🇦 iOSDevUA
💡Swift Testing: Розбір API та макроса #expect

Новий зрозумілий та виразний API робить написання тестів більш простим, а сам інтерфейс Xcode зробив великий крок вперед для сповіщень при помилках (або ж коректному виконанні).

📖 У цій статті приділено увагу написанню тестів з використанням нових можливостей, а також розглянуто міграцію з XCTests.

🇺🇦 iOSDevUA
💡Реліз Hummingbird 2

Останнім часом кількість новин навколо серверного Swift якось зашкалює. Цього разу мова про мажорний реліз ще одного порівняно популярного фреймворку. Ключова зміна, звісно ж, Swift Concurrency. Повні реліз-ноути можна прочитати тут.

🇺🇦 iOSDevUA
💡Оновлення App Store Connect

Тепер обов’язковим є лише один набір скріншотів для додатків (і для iPhone, і для iPad).

🤩 Викладати додатки буде простіше (і швидше).

🇺🇦 iOSDevUA
👍3
💡Оптимізація використання пам’яті для SwiftUI+CoreData

Незважаючи на наявність lazy containers у SwiftUI та загалом механізмів для оптимізації CoreData, зі збільшенням складності додатків можуть виникнути ситуації, коли можна зловити краші через надмірне використання пам’яті.

Важливо розуміти не тільки особливості роботи з в’юхами, але й властивості самої CoreData.

📖 У цьому проєкті розглянуто покроковий процес оптимізації роботи з пам’яттю для демонстраційного додатка (спочатку використовуючого 1,6 ГБ пам’яті для відображення всього лише 100 елементів даних), який у результаті зможе працювати з сотнями об’єктів і використовувати всього 200 МБ.

🛠 Код додатка доступний на GitHub.

🇺🇦 iOSDevUA
🔥5👍1
💡Стаття з дуже кричущою назвою.
Не знаю, наскільки це все реально, але думка про те, що майбутнє зовсім близько, трохи присутня.
Мабуть, стаття буде цікава не дуже широкій аудиторії, але виглядає надихаюче, хоч і трохи складно, тому не можна не поділитися 👍

👉 https://www.createwithswift.com/revolutionizing-surgery-and-medical-treatments-with-visionos/

🇺🇦 iOSDevUA
4
💡Підбірка питань по Swift та iOS для технічних співбесід 2024

Сьогодні ділюся тут великим матеріалом

1. У чому різниця між статичною змінною та змінною класу?
Чому їх природа схожа і до чого тут наслідування?

2. Чи обчислюються ліниві змінні більше одного разу?
І чому важлива потокобезпечність.

3. У чому різниця між self та Self?
Різниця в Swift полягає в їх використанні та контексті. Якщо ви писали іншими мовами, то напевно знаєте, для чого там використовували this або typeof.

4. Як зробити методи опціональними в протоколі?
Є два підходи — optional та extension.

5. Як відбувається оптимізація використання пам’яті в UITableView?
У каналі я регулярно ділюся проблемами та рішеннями для оптимізації. Наприклад, що робити, якщо у нас дуже багато комірок.

6. Що таке Dependency Injection і які його переваги?
Тут, як ви вже здогадалися, мова про Constructor injection/Property injection/Method injection. Ну і про опис переваг, звісно.

7. Поясніть різницю між throws та rethrows у Swift.
Як правильно використовувати do-catch і багато іншого.

8. Поясніть типи сесій та задач, які підтримує клас URLSession.
Default Session/Ephemeral Session/Background Session. У цій темі розглянуто, чи є у нас спосіб повторити невдалі запити.

9. Порівняйте статичні та динамічні бібліотеки.
Про те, що може включати кожен тип бібліотек, що відбувається при компіляції, як бути з оновленнями.

10. Як би ви реалізували список з нескінченним прокручуванням?
Великий розбір на прикладах.

11. Що таке copy-on-write у Swift? Поясніть, як налаштувати його реалізацію.
Звісно, ця техніка дозволяє значно скоротити використання пам’яті та підвищити продуктивність. Але що всередині?

12. Поясніть, як використовується патерн Factory і яку проблему вирішує цей патерн.

13. Що таке APNS і як він працює?

14. Поясніть призначення ключового слова «mutating» у Swift.

15. У чому різниця між @StateObject та @ObservedObject у SwiftUI?

16. Що таке Mocks та Stubs і в чому різниця між ними?
Призначення/Поведінка/Використання.

17. Поясніть протоколи Equatable, Hashable та Comparable у Swift.

18. Що означає UIApplicationMain?

19. Поясніть, чому Swift є типобезпечною мовою?
Все про Strong Type, Type Inference, Type Casting, optional, дженеріки.

20. Навіщо вам потрібні escaping closures і коли їх слід використовувати?

🇺🇦 iOSDevUA
💡Використовуємо Cursor для розробки iOS

Cursor — хайпова IDE, яка позиціонує себе як AI-centric. Якщо вам цікаво спробувати розробляти в ній під iOS, то в статті розповідається, як за допомогою бібліотеки Inject можна обійтися без необхідності працювати з симулятором через Xcode.

🇺🇦 iOSDevUA
👍1
💡Кастомізація тем у SwiftUI з використанням ShapeStyle

У SwiftUI налаштування зовнішнього вигляду додатка на базі кастомної теми безумовно покращить користувацький досвід.

Початковий підхід до управління цими налаштуваннями передбачає монотонне повторення одних і тих же дій для різних екранів.

📖 У цій статті розглянуто спосіб з використанням кастомного ShapeStyle для створення власних тем у всьому додатку.

🇺🇦 iOSDevUA
👍1
💡Стаття, яку запропонував наш підписник. Вона допомогла йому в роботі. Впевнений, що допоможе ще комусь.
Якщо ви використовуєте CoreData у своєму проєкті і працюєте (а можливо, після прочитання статті почнете) з Diffable Data Sources, то цей матеріал точно буде вам корисним.
Diffable Data Sources — це заміна табличних дата сорсов, щоб відображати контент у форматі таблиці або колекції та брати дані з CoreData, власне. В загальному у статті все детально описано 👍

👉 https://www.avanderlee.com/swift/diffable-data-sources-core-data/

🇺🇦 iOSDevUA
💡SwiftPM Snippets

Сніппети з’явилися ще у Swift 5.7, але вони використовуються рідко, а офіційної документації мало, тому стаття – на вагу золота. Автор розбирає, як додавати сніппети до пакетів, вбудовувати їх у документацію DocC та використовувати купу їх маловідомих особливостей.

🇺🇦 iOSDevUA
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
💡Створення секундоміра та таймера на базі SystemFormatStyles у Xcode 16

Коротко кажучи, стилі форматування (format styles) — це заміна на Swift старих класів Objective-C Formatter від Apple.

Вони дозволяють швидко і легко створювати локалізовані відображення різних типів даних.

Вони безпечні, продуктивні та дуже прості у використанні в коді для перетворення одного типу в інший.

Але документація Apple не завжди описує всі нововведення відразу ж (або взагалі ніколи).

📖 У цьому прикладі вже зараз можна познайомитися з двома новими стилями SystemFormatStyle.Stopwatch та SystemFormatStyle.Timer.

🇺🇦 iOSDevUA
Hello iOS developers! New iOS news digest is here!

How to Measure Design System at Scale
The Uber Rider app launches features simultaneously on a global scale, changing details across hundreds of screens using thousands of feature flags. It is no longer possible for any designers, engineers, quality assurance, or product managers to fully visualize every single user flow. Uber needs an observability system of similar scale for measuring design quality to prevent subpar user experience, especially when it comes to adopting the existing UI libraries and accessibility best practices packaged under the Uber’s Design System, Base. Without such an observability system–let’s call it Design System Observability–it could be too late when Uber learned through complaints and public media about the end users who would suffer confusing onboarding rides, inconsistent layouts, and frustrating voiceovers/talkbacks sessions:
https://www.uber.com/en-UA/blog/design-system-at-scale

Great article about preventing app removal on iOS. But be aware to use this feature in a wrong way:
https://tinycoder.pika.page/posts/preventing-app-removal-on-ios

Server side Live Activities guide
iOS 17.2 gained the capability to start Live Activities from a server, which is pretty cool and handy:
https://christianselig.com/2024/09/server-side-live-activities

Managing Themes in React Native Using Context API
In modern React Native apps, managing global states like themes can be cumbersome if not done efficiently. One of the most elegant solutions for managing application-wide states is the Context API. In this article, we’ll explore how to implement dark and light themes in a React Native app using the Context API and React Native’s Appearance module:
https://dev.to/amitkumar13/managing-themes-in-react-native-using-context-api-3dk2

Introduction to Communication Patterns in SwiftUI
SwiftUI provides a powerful and declarative way to build UIs, allowing views to react to state changes automatically. However, managing communication between views, especially when passing data or events from one view to another, can be challenging if not handled properly. In this article, we’ll explore several communication patterns in SwiftUI that enable seamless data flow between views, ensuring that updates occur efficiently and in a way that aligns with SwiftUI’s architecture:
https://azamsharp.com/2024/09/22/introduction-to-communication-patterns-in-swiftui.html

Using the #expect macro for Swift Testing
Swift Testing is Apple’s Swift framework for writing tests and introduces several macros, including the #expect macro. Where we had to use all kinds of XCAssert variations before, we can now rely on a powerful replacement that will help us debug tests more quickly:
https://www.avanderlee.com/swift-testing/expect-macro

Why is my Task running on the main thread?
Building an intuition for Swift Concurrency
https://blog.jacobstechtavern.com/p/why-is-task-running-on-main-thread
💡AVAudioEffectNode: створення низькорівневих аудіоефектів у Swift

При створенні аудіоефектів можна використовувати Audio Units.

І хоча Apple надає приклади того, як це зробити, вони можуть бути складними для початківців.

Дотримуючись аналогічного підходу з бібліотеки Novocaine, автор ділиться прикладом зручного API для створення аудіоефектів у Swift за допомогою AVFoundation.

📖 Дослідження доступне тут, а код — ось тут.

🇺🇦 iOSDevUA
💡Зміни структури проекту в Xcode 16

У Xcode 16 змінився стандартний спосіб організації структури проекту – замість груп тепер ви працюєте з реальними папками. У статті розглядаються наслідки цього рішення.

👉 https://troz.net/post/2024/xcode_folders_groups/

🇺🇦 iOSDevUA
👍2
💡Офіційна специфікація для Lottie

У Lottie тепер є офіційна специфікація версії 1.0. Вона включає всі базові функції, такі як layers, shapes, transforms. Сама специфікація описана тут, а майбутній роадмап – тут.

🇺🇦 iOSDevUA
👍1