💡Як працюють черги
Чудовий пост про те, як працюють різні типи черг, за якими параметрами їх можна порівнювати між собою та як пріоритизація запитів впливає на них. Найкрутіше – все це з інтерактивними прикладами!
🇺🇦 iOSDevUA
Чудовий пост про те, як працюють різні типи черг, за якими параметрами їх можна порівнювати між собою та як пріоритизація запитів впливає на них. Найкрутіше – все це з інтерактивними прикладами!
🇺🇦 iOSDevUA
👍2
Управління пам’яттю у Swift
Безумовно, управління пам’яттю є найважливішим етапом для забезпечення максимальної продуктивності та запобігання витокам.
Хочу поділитися статтею, в якій зачіпаються не лише базові речі (стек і купа), але й пастки, в які можна потрапити при реалізації функцій, абстракцій тощо.
📖 У цьому матеріалі розглянуті й ситуації, коли структури можуть бути неефективними у використанні порівняно з класами, відмінності статичної від динамічної диспетчеризації та багато іншого.
🇺🇦 iOSDevUA
Безумовно, управління пам’яттю є найважливішим етапом для забезпечення максимальної продуктивності та запобігання витокам.
Хочу поділитися статтею, в якій зачіпаються не лише базові речі (стек і купа), але й пастки, в які можна потрапити при реалізації функцій, абстракцій тощо.
📖 У цьому матеріалі розглянуті й ситуації, коли структури можуть бути неефективними у використанні порівняно з класами, відмінності статичної від динамічної диспетчеризації та багато іншого.
🇺🇦 iOSDevUA
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
💡Створення інтерфейсу пошуку у стилі Photos з iOS 18
Новий розділ виглядає як кастомна View у SwiftUI, яку Seb Vidal спробував відтворити за допомогою публічного API (але без реверс-інжинірингу не обійшлося). Затронуто також найскладніший момент — плавний перехід фону в стиль клавіатури.
📖 Тут можна прочитати про основні етапи створення такого екрану.
🛠 А тут подивитися на реалізацію в коді.
🇺🇦 iOSDevUA
Новий розділ виглядає як кастомна View у SwiftUI, яку Seb Vidal спробував відтворити за допомогою публічного API (але без реверс-інжинірингу не обійшлося). Затронуто також найскладніший момент — плавний перехід фону в стиль клавіатури.
📖 Тут можна прочитати про основні етапи створення такого екрану.
🛠 А тут подивитися на реалізацію в коді.
🇺🇦 iOSDevUA
👍3
💡Про Meridian, ще один серверний фреймворк
Meridian – фреймворк для розробки бекенда на Swift. Його відмінна особливість – API, схожий на SwiftUI. Ще з цікавого:
👉Є підтримка вебсокетів
👉async/await з коробки
👉Можна зручно оголошувати свій Middleware
🇺🇦 iOSDevUA
Meridian – фреймворк для розробки бекенда на Swift. Його відмінна особливість – API, схожий на SwiftUI. Ще з цікавого:
👉Є підтримка вебсокетів
👉async/await з коробки
👉Можна зручно оголошувати свій Middleware
🇺🇦 iOSDevUA
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
💡Animatable та AnimatablePair: призначення та приклади
SwiftUI дозволяє створювати анімацію без особливих зусиль, але іноді нам потрібен більший контроль над тим, як рухаються та анімуються об’єкти.
Наприклад, щоб синхронізувати анімацію декількох властивостей, нам потрібно використовувати
📖 У цій статті розглянуті
📖 Нагадаю, що в каналі є ще одна стаття про створення багатоступеневої анімації.
🇺🇦 iOSDevUA
SwiftUI дозволяє створювати анімацію без особливих зусиль, але іноді нам потрібен більший контроль над тим, як рухаються та анімуються об’єкти.
Наприклад, щоб синхронізувати анімацію декількох властивостей, нам потрібно використовувати
AnimationPair:@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
@frozen public struct AnimatablePair<First, Second> : VectorArithmetic where First : VectorArithmetic, Second : VectorArithmetic
Більше інформації в офіційній документації Apple.
📖 У цій статті розглянуті
Animatable та AnimatablePair, а також є приклади, як можна використовувати API для покращення анімацій у наших додатках.📖 Нагадаю, що в каналі є ще одна стаття про створення багатоступеневої анімації.
🇺🇦 iOSDevUA
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
💡Складнощі в роботі з кареткою
Автор бібліотеки DeclarativeTextKit розповідає про неочевидні складнощі розрахунку позиції каретки та ментальну модель, яка допомагає міркувати навіть у граничних випадках.
🇺🇦 iOSDevUA
Автор бібліотеки DeclarativeTextKit розповідає про неочевидні складнощі розрахунку позиції каретки та ментальну модель, яка допомагає міркувати навіть у граничних випадках.
🇺🇦 iOSDevUA
🔥2
💡Основою практично будь-якого iOS додатку на даний момент є робота з мережею.
І, звісно, цю частину теж потрібно якось дебажити, оптимізувати, аналізувати тощо.
Ось стаття про це. Автор тут розповідає про свій інструмент RocketSim, про який ми вже писали, і показує на його прикладі функцію з «копанням» у роботі запитів у проєкті. Але під капотом для цього він використовує опенсорсну бібліотеку Pulse. Тож якщо не хочете використовувати RocketSim, то можете спробувати просто цю бібліотеку напряму. Посилання є в статті.
Самі функції дуже класні. Зручно дивитися, який запит спрацював у який момент часу, скільки зайняв, які дані були, код відповіді тощо.
Виглядає принаймні дуже непогано!
👉 https://www.avanderlee.com/xcode/inspect-network-traffic-simulator/
🇺🇦 iOSDevUA
І, звісно, цю частину теж потрібно якось дебажити, оптимізувати, аналізувати тощо.
Ось стаття про це. Автор тут розповідає про свій інструмент RocketSim, про який ми вже писали, і показує на його прикладі функцію з «копанням» у роботі запитів у проєкті. Але під капотом для цього він використовує опенсорсну бібліотеку Pulse. Тож якщо не хочете використовувати RocketSim, то можете спробувати просто цю бібліотеку напряму. Посилання є в статті.
Самі функції дуже класні. Зручно дивитися, який запит спрацював у який момент часу, скільки зайняв, які дані були, код відповіді тощо.
Виглядає принаймні дуже непогано!
👉 https://www.avanderlee.com/xcode/inspect-network-traffic-simulator/
🇺🇦 iOSDevUA
SwiftLee
Inspect network traffic using the Xcode Simulator
Discover the importance of inspecting network traffic in app development. Explore different tools and optimize your app's performance.
👍2
Створюєте нову
StaticControlConfiguration. Якщо пам’ятаєте, у віджетів свій конфігуратор, у Live Activity також свій. І всі вони поруч.А за дії відповідають інтенти, як для Live Activity. Навіть протоколи ті ж самі.
По суті, контролі — це віджети, які можна змінювати за розміром. Могли б взагалі до віджетів прирівняти, і все працювало б.
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
💡TextRenderer у SwiftUI
У SwiftUI з’явився новий протокол
🇺🇦 iOSDevUA
У SwiftUI з’явився новий протокол
TextRenderer, який замінює NSAttributedString. У статті розбирається, як за його допомогою підсвітити частину символів у рядку.🇺🇦 iOSDevUA
👍3
💡Як створити кастомний SF Symbol
Ви можете користуватися не лише готовими SF Symbols, але й створювати повністю свої. У туторіалі розбираються всі кроки – від створення векторної іконки в Sketch до використання її в коді додатка.
🇺🇦 iOSDevUA
Ви можете користуватися не лише готовими SF Symbols, але й створювати повністю свої. У туторіалі розбираються всі кроки – від створення векторної іконки в Sketch до використання її в коді додатка.
🇺🇦 iOSDevUA
Danijela's blog
Create Custom SF Symbols in Sketch | Danijela's blog
Symbols (or icons) are an essential part of any app. Luckily, when developing for Apple platforms, we have the amazing collection of SF symbols at our disposal. But even with over 6000 symbols already available, sometimes the one you need doesn't exist yet.…
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
💡Реалізація інвертованої прокрутки в месенджері на SwiftUI
На відміну від більшості екранів, де контент починається з верхньої частини, а користувачам потрібно прокручувати вниз, для чатів все працює навпаки.
Ті, хто розробляв додатки для обміну повідомленнями, напевно, знають трюк з трансформом. Якщо ні — то коротко це виглядає так:
Для SwiftUI подібний хак можна реалізувати за допомогою кастомного
📖 А ось тут Вінсент наводить приклад реалізації (і зачіпає питання, чому просто реверснути сам датасорс, наприклад, недостатньо).
🇺🇦 iOSDevUA
На відміну від більшості екранів, де контент починається з верхньої частини, а користувачам потрібно прокручувати вниз, для чатів все працює навпаки.
Ті, хто розробляв додатки для обміну повідомленнями, напевно, знають трюк з трансформом. Якщо ні — то коротко це виглядає так:
CGAffineTransform(scaleX: 1, y: -1) для таблиці (і для комірок навпаки).
Для SwiftUI подібний хак можна реалізувати за допомогою кастомного
ViewModifier.📖 А ось тут Вінсент наводить приклад реалізації (і зачіпає питання, чому просто реверснути сам датасорс, наприклад, недостатньо).
🇺🇦 iOSDevUA
🔥5
💡Розбір режимів накладання у Swift: приклади та можливі варіанти
Режими накладання (blend modes) відіграють найважливішу роль у дизайні. Вони необхідні при роботі з фото, створенні ефектів освітлення, і, наприклад, використовуються для досягнення ефекту глибини в зображеннях.
💬 Як випливає з назви, при використанні такого режиму відбувається змішування кольору кількох шарів пікселів за допомогою математичних формул для визначення ступеня впливу кожного пікселя на кінцеве зображення.
Можна комбінувати будь-яку кількість шарів, але мінімально необхідно лише два — базовий і сам шар накладання.
📖 У цій статті докладно розглядаються різні режими накладання (та математичні формули), способи реалізації та приклади використання.
🇺🇦 iOSDevUA
Режими накладання (blend modes) відіграють найважливішу роль у дизайні. Вони необхідні при роботі з фото, створенні ефектів освітлення, і, наприклад, використовуються для досягнення ефекту глибини в зображеннях.
💬 Як випливає з назви, при використанні такого режиму відбувається змішування кольору кількох шарів пікселів за допомогою математичних формул для визначення ступеня впливу кожного пікселя на кінцеве зображення.
Можна комбінувати будь-яку кількість шарів, але мінімально необхідно лише два — базовий і сам шар накладання.
📖 У цій статті докладно розглядаються різні режими накладання (та математичні формули), способи реалізації та приклади використання.
🇺🇦 iOSDevUA
👍3
💡Що нового в UI тестах в Xcode 16
👉 Функція waitForNonExistence(withTimeout:), яка дозволяє прив’язатися до зникнення якогось елемента.
👉 Функція wait(for:toEqual:timeout:), яка дає можливість прив’язатися до моменту, коли властивість елемента буде дорівнювати певному значенню.
🇺🇦 iOSDevUA
👉 Функція waitForNonExistence(withTimeout:), яка дозволяє прив’язатися до зникнення якогось елемента.
👉 Функція wait(for:toEqual:timeout:), яка дає можливість прив’язатися до моменту, коли властивість елемента буде дорівнювати певному значенню.
🇺🇦 iOSDevUA
Jesse Squires
UI testing improvements in Xcode 16
While the new Swift Testing framework announced this year at WWDC24 is getting a lot of attention, there are some notable improvements coming to UI testing i...
👍1
💡Невелика стаття з порадами та хитрощами в новому API ScrollView в iOS 18
Про пагінацію та приховування навігаційної панелі та таббарів.
З прикладами коду
👉 https://dimillian.medium.com/some-tips-tricks-with-the-new-ios-18-scrollview-api-95632b41bc8e
🇺🇦 iOSDevUA
Про пагінацію та приховування навігаційної панелі та таббарів.
З прикладами коду
👉 https://dimillian.medium.com/some-tips-tricks-with-the-new-ios-18-scrollview-api-95632b41bc8e
🇺🇦 iOSDevUA
Medium
Some tips & tricks with the new iOS 18 ScrollView API
Pagination, hiding navigation and tab bar & more.
👍1
💡Стаття з цікавим заголовком. Навряд чи чомусь сильно навчить вас, але роздуми цікаві! І не дуже популярні, від чого ще цікавішими стають 😀
Але все ж чомусь навчить і навіть приклади покаже. Взагалі, якщо вам цікава розробка під macOS, але ви все не можете зважитися, то, можливо, ця стаття трохи підштовхне вас!
👉 https://www.avanderlee.com/swiftui/macos-development-powerful-utilities/
🇺🇦 iOSDevUA
Але все ж чомусь навчить і навіть приклади покаже. Взагалі, якщо вам цікава розробка під macOS, але ви все не можете зважитися, то, можливо, ця стаття трохи підштовхне вас!
👉 https://www.avanderlee.com/swiftui/macos-development-powerful-utilities/
🇺🇦 iOSDevUA
SwiftLee
Why macOS Development is Perfect for Indie Developers
Learn from the experiences of a successful macOS app developer and gain the confidence to dive into creating your own Mac applications.
👍1
💡Проблеми використання NSCopying у світі Swift
Через особливості того, як в Objective-C працюють designated initializer’и, наслідування від класів, що реалізують протокол NSCopying, у Swift може призвести до неприємних крешів. Інженери PSPDFKit розповідають про те, як їх можна спробувати обійти.
🇺🇦 iOSDevUA
Через особливості того, як в Objective-C працюють designated initializer’и, наслідування від класів, що реалізують протокол NSCopying, у Swift може призвести до неприємних крешів. Інженери PSPDFKit розповідають про те, як їх можна спробувати обійти.
🇺🇦 iOSDevUA
Nutrient
NSCopying in a Swift world
An exploration into how a modern Swift programming mindset clashes with Objective-C’s NSCopying protocol.
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🔒 Encapsulation 🔒
Інкапсуляція є ключем до чистого, підтримуваного коду. Перегляньте приклад, доданий тут, де цей принцип застосовується з використанням Combine API у рамках архітектури MVVM. Замість того, щоб відкривати
🇺🇦 iOSDevUA
Інкапсуляція є ключем до чистого, підтримуваного коду. Перегляньте приклад, доданий тут, де цей принцип застосовується з використанням Combine API у рамках архітектури MVVM. Замість того, щоб відкривати
send на PassthroughSubject, інкапсулюйте його у своєму ViewModel. Це забезпечує цілісність даних та запобігає неправильному використанню.Пам’ятайте, цей підхід не обмежується Combine — він є важливим для кожного компонента, який ми розробляємо.
🇺🇦 iOSDevUA
👍2
🎬Вийшло потужне інтерв’ю з Крісом Латтнером
Такі відео з’являються надзвичайно рідко. Тому, якщо у вас знайдеться час, обов’язково постарайтеся подивитися діалог з творцем Swift, LLVM, Clang та інших продуктів.
Цікаво, що Кріс відповідає не лише на очевидні питання, але й ділиться інсайдами, а також розповідає, як проєкт, що був потенційно цікавим лише кільком сотням людей з 2010 до 2016 року, пройшов величезний шлях і став опенсорсним. До речі, зачіпаються і цікаві моменти, коли доводилося розповідати професіоналам з багаторічним досвідом на Objective-C про переваги нової мови і які складнощі були на цьому шляху.
📺 Зберігайте відео, щоб подивитися відповіді та коментарі одного з найвизначніших програмістів нашого покоління.
🇺🇦 iOSDevUA
Такі відео з’являються надзвичайно рідко. Тому, якщо у вас знайдеться час, обов’язково постарайтеся подивитися діалог з творцем Swift, LLVM, Clang та інших продуктів.
Цікаво, що Кріс відповідає не лише на очевидні питання, але й ділиться інсайдами, а також розповідає, як проєкт, що був потенційно цікавим лише кільком сотням людей з 2010 до 2016 року, пройшов величезний шлях і став опенсорсним. До речі, зачіпаються і цікаві моменти, коли доводилося розповідати професіоналам з багаторічним досвідом на Objective-C про переваги нової мови і які складнощі були на цьому шляху.
📺 Зберігайте відео, щоб подивитися відповіді та коментарі одного з найвизначніших програмістів нашого покоління.
🇺🇦 iOSDevUA
YouTube
I Interviewed The Creator Of LLVM, Clang, Swift, and Mojo
Recorded live on twitch, GET IN
### Guests
Chris Lattner
https://x.com/clattner_llvm?s=21&t=-sv4MdpmLrRuMIhARbLk-g
https://www.modular.com
TJ DeVries
https://youtube.com/@teej_dv?si=AIrpF3SWJYZqlboU
### My Stream
https://twitch.tv/ThePrimeagen
###…
### Guests
Chris Lattner
https://x.com/clattner_llvm?s=21&t=-sv4MdpmLrRuMIhARbLk-g
https://www.modular.com
TJ DeVries
https://youtube.com/@teej_dv?si=AIrpF3SWJYZqlboU
### My Stream
https://twitch.tv/ThePrimeagen
###…
❤4
💡Як вирішити проблему missing package product
🔨 Один з найнеприємніших багів у Xcode виникає, коли випадково видаляється файл
Це можливо, наприклад, при зміні гілок у гіті, а залежно від розміру проєкту — таких помилок можуть бути десятки (іноді навіть сотні).
Більшість можливих рішень на форумах зводяться до магічної комбінації очищення проєкту (
📖 Все це займає час, але Джессі Сквайрс радить перевірити налаштування git, або навіть автоматизувати це за допомогою Makefile.
🇺🇦 iOSDevUA
Package.resolved, що й призводить до помилки missing package product.Це можливо, наприклад, при зміні гілок у гіті, а залежно від розміру проєкту — таких помилок можуть бути десятки (іноді навіть сотні).
Більшість можливих рішень на форумах зводяться до магічної комбінації очищення проєкту (
cmd-shift-K), видалення DerivedData/, або використання File > Packages > Reset Package Caches (або закриття та повторного відкриття Xcode).📖 Все це займає час, але Джессі Сквайрс радить перевірити налаштування git, або навіть автоматизувати це за допомогою Makefile.
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
💡Як принципи дизайну реалізуються в конкретних рішеннях
Дуже крутий огляд додатка Family, крипто-гаманця з топовим дизайном і анімаціями. У пості розглядаються всі принципи дизайну, яким слідувала команда, та те, в які патерни інтерфейсу та анімацій вони перетворювались. Якщо ви шукаєте натхнення – рекомендую!
🇺🇦 iOSDevUA
Дуже крутий огляд додатка Family, крипто-гаманця з топовим дизайном і анімаціями. У пості розглядаються всі принципи дизайну, яким слідувала команда, та те, в які патерни інтерфейсу та анімацій вони перетворювались. Якщо ви шукаєте натхнення – рекомендую!
🇺🇦 iOSDevUA
🔥3
💡Міграція проєкту на Swift 6: неповне керівництво
Напевно, багато хто проходив кілька ітерацій оновлення кодової бази (хтось навіть з Objective-C, і досі певний відсоток коду може бути написаний на ньому і в ваших поточних проєктах).
Завдання міграції завжди стоїть окремо, це кропітка, важка і зовсім не швидка робота, а одна зі складностей при оптимізації — показати цінність для бізнесу. Буває непросто пояснити, чому нам потрібно щось змінювати, якщо і так все працює. Але іноді це просто необхідно.
Звісно, при переході на Swift 6 можуть виникати проблеми, та й що казати, часто ми не все можемо контролювати напряму (ті ж залежності CocoaPods або SPM), тому доводиться шукати варіанти.
📖 У цьому матеріалі є відповіді на питання, що виникають при міграції, аналіз помилок і навіть опис багів у самому Swift.
🇺🇦 iOSDevUA
Напевно, багато хто проходив кілька ітерацій оновлення кодової бази (хтось навіть з Objective-C, і досі певний відсоток коду може бути написаний на ньому і в ваших поточних проєктах).
Завдання міграції завжди стоїть окремо, це кропітка, важка і зовсім не швидка робота, а одна зі складностей при оптимізації — показати цінність для бізнесу. Буває непросто пояснити, чому нам потрібно щось змінювати, якщо і так все працює. Але іноді це просто необхідно.
Звісно, при переході на Swift 6 можуть виникати проблеми, та й що казати, часто ми не все можемо контролювати напряму (ті ж залежності CocoaPods або SPM), тому доводиться шукати варіанти.
📖 У цьому матеріалі є відповіді на питання, що виникають при міграції, аналіз помилок і навіть опис багів у самому Swift.
🇺🇦 iOSDevUA
Brightdigit
Swift 6 Incomplete Migration Guide for Dummies
Discover the first steps for migrating to Swift 6, focusing on concurrency safety. Learn how to handle mutable properties, use `nonisolated`, and make UI components `@MainActor` for a seamless transition.