💡Тепер можна додавати свої контроли в центр управління
🔖 Працює через App Intents
Синтаксис схожий на інтенти, але налаштовується через
🇺🇦 iOSDevUA
Синтаксис схожий на інтенти, але налаштовується через
ControlWidgetConfiguration🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Media is too big
VIEW IN TELEGRAM
Тепер Sidebar - це варіант відображення TabView. Раніше використовували модифікатор
.tabItem, а тепер так:Tab("Item", systemImage: "play") {
// Content
}Кастомізація працює "з коробки" і зберігається в App Storage. Код універсальний — для iPhone та Vision Pro показує таб-бар, для мака - сайд-бар.
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
💡Новий метод count(where:) у Swift 6
➡ У SE-0220 з'явився новий метод count(where:), який виконує filter() і count за один прохід.
Це дозволяє уникнути створення нового масиву і забезпечує чітке та прозоре рішення підрахунку.
🤩 Цей метод доступний для всіх типів, що відповідають Sequence, тому його можна використовувати і для множин, і для словників.
🇺🇦 iOSDevUA
Це дозволяє уникнути створення нового масиву і забезпечує чітке та прозоре рішення підрахунку.
🤩 Цей метод доступний для всіх типів, що відповідають Sequence, тому його можна використовувати і для множин, і для словників.
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Xcode 16 спростить пошук проблем, які призводять до зависання додатків.
🛠 Тепер за допомогою нового інструмента flame graph можна буде визначити, виконання якого саме коду займає більшу частину часу при серйозних зависаннях у додатку (особливо корисно на старті).
🤩 Інтервали вже зважені за параметром відсотка часу, який вони займають.
Бонус: в Organizer додали нову категорію Launches, у якій можна буде побачити, що саме є причиною довгого запуску додатка у користувачів (статистика за весь час).
🇺🇦 iOSDevUA
🛠 Тепер за допомогою нового інструмента flame graph можна буде визначити, виконання якого саме коду займає більшу частину часу при серйозних зависаннях у додатку (особливо корисно на старті).
🤩 Інтервали вже зважені за параметром відсотка часу, який вони займають.
Бонус: в Organizer додали нову категорію Launches, у якій можна буде побачити, що саме є причиною довгого запуску додатка у користувачів (статистика за весь час).
🇺🇦 iOSDevUA
⚡1
🥴Найбільш незрозуміле нововведення - тонування іконок.
Для темної теми ви даєте кольорову іконоку, а фон залишається системним. Для тонування - ч/б іконку. Можна експериментувати з прозорістю елементів.
🖼 У беті Xcode вже можна додавати іконоки, але наразі вони завжди показують стандартну.
🇺🇦 iOSDevUA
Для темної теми ви даєте кольорову іконоку, а фон залишається системним. Для тонування - ч/б іконку. Можна експериментувати з прозорістю елементів.
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👀2🦄1
💡Live Activity завезли для годинників. Якщо ви вже користувалися LA, то нічого не змінилося. Якщо ні, є туторіал.
UI для годинників можна робити за допомогою перевірки env:
У єнума є два типи,
🇺🇦 iOSDevUA
UI для годинників можна робити за допомогою перевірки env:
@Environment(\.activityFamily) var activityFamily
У єнума є два типи,
.small і .medium. Інформативно назвали 🙆🇺🇦 iOSDevUA
👍5
Dark mode app icons
Рекомендації щодо адаптації іконок додатків різної композиції до темного режиму таким чином, щоб вони не виділялися надмірною яскравістю, але при цьому зберігали впізнаваність.
🇺🇦 iOSDevUA
Рекомендації щодо адаптації іконок додатків різної композиції до темного режиму таким чином, щоб вони не виділялися надмірною яскравістю, але при цьому зберігали впізнаваність.
🇺🇦 iOSDevUA
❤2
💡Підбірка найкращих сесій з WWDC24 (Swift, Performance, Debugging)
WWDC підійшов до кінця, тому вирішив виділити сесії, які варто переглянути в пріоритетному порядку.
📼 Аналіз heap memory
📼 Використання некопійованих типів у Swift
📼 Swift Performance
📼 Підбірка анімацій з WWDC з прикладами коду
📼 Показники продуктивності в AVFoundation
📼 Run, Break, Inspect: Досліджуйте ефективну відладку в LLDB
📼 Swift Testing
📼 База в Xcode
📼 Міграція на Swift 6
📼 Що нового в UIKit
🇺🇦 iOSDevUA
WWDC підійшов до кінця, тому вирішив виділити сесії, які варто переглянути в пріоритетному порядку.
📼 Аналіз heap memory
Розповідають не тільки про основи динамічної пам’яті (кучу), але й про те, як використовувати Instruments та Xcode для аналізу та усунення поширених проблем. А ще методи та найкращі практики для діагностики витоків у додатку.
📼 Використання некопійованих типів у Swift
Велика сесія, яка дозволить дізнатися, що взагалі мається на увазі під копіюванням у Swift, коли можна використовувати некопійований тип і як value ownership дозволяє чітко позначити свої наміри.
📼 Swift Performance
Сесія пояснює, як саме Swift забезпечує баланс продуктивності. Наводять приклади різних функцій Swift і способи їх реалізації, щоб краще зрозуміти можливі потенційні проблеми, що впливають на продуктивність. Можна глибше зануритися в основи виділення пам'яті, memory layout загалом, дженеріки, замикання – загалом топ і в закладки.
📼 Підбірка анімацій з WWDC з прикладами коду
Нові анімації скролу, ефекти, все з прикладами.
📼 Показники продуктивності в AVFoundation
Всі, хто працював з відео, компресією або навіть просто використовував AVPlayer, знають, як мало документації та прикладів по цьому розділу. У цій сесії розповідають, які метрики варто враховувати і як вони впливають на продуктивність.
📼 Run, Break, Inspect: Досліджуйте ефективну відладку в LLDB
Показують, як максимально ефективно використовувати крашлоги і бектрейси, а також як покращити брейкпоінти за допомогою дій та складних умов. А ще особливу увагу приділено команді «p» і новим можливостям Swift, які покращать досвід відладки.
📼 Swift Testing
Можна дізнатися, як написати набір тестів, використовуючи вбудовані функції. Як розширювати існуючі тести, щоб охопити більше сценаріїв, організувати тести в різних середовищах і оптимізувати тести для паралельного виконання.
📼 База в Xcode
Розповідають про популярні фішки Xcode, які допоможуть прискорити розробку.
📼 Міграція на Swift 6
Можна дізнатися, як перевести існуючий додаток на Swift 6 на реальному прикладі. Розповідають про опцію переносу модуль за модулем і як компілятор допомагає виявити код, схильний до ризику гонок даних. Розповідають про ізоляцію та як вирішити проблему одночасного доступу до спільного змінного стану.
📼 Що нового в UIKit
Дізнайтеся про всі новинки в UIKit, включаючи зручність запуску вкладок і документів, переходи, зміни тексту та введення. Також розповідають про сумісність анімацій і жестів UIKit і SwiftUI, а також загальні покращення у всьому UIKit.
🇺🇦 iOSDevUA
❤7
💡Swift переїхав в окрему організацію на GitHub
Swift тепер знаходиться не в організації Apple, а у власній організації Swiftlang. Там же буде розміщуватися стандартна бібліотека, компілятор, всі основні інструменти та бібліотеки, а також інші проекти, важливі для екосистеми. У майбутньому обіцяють представити єдиний процес додавання нових проектів в організацію та їх еволюції, почати використовувати GitHub Teams і покращувати CI для всього.
🇺🇦 iOSDevUA
Swift тепер знаходиться не в організації Apple, а у власній організації Swiftlang. Там же буде розміщуватися стандартна бібліотека, компілятор, всі основні інструменти та бібліотеки, а також інші проекти, важливі для екосистеми. У майбутньому обіцяють представити єдиний процес додавання нових проектів в організацію та їх еволюції, почати використовувати GitHub Teams і покращувати CI для всього.
🇺🇦 iOSDevUA
Swift.org
New GitHub Organization for the Swift Project
Today, we are announcing an exciting development for the Swift programming language: its migration to a dedicated GitHub organization at GitHub.com/swiftlang.
❤2
💡Чому в Swift повільна перевірка типів
У недавньому інтерв'ю Кріс Латтнер розповів, що вважає систему перевірки типів у Swift невдалою. У статті розбирається, чому в деяких випадках час перевірки типів може зростати експоненціально зі збільшенням складності виразу.
🇺🇦 iOSDevUA
У недавньому інтерв'ю Кріс Латтнер розповів, що вважає систему перевірки типів у Swift невдалою. У статті розбирається, чому в деяких випадках час перевірки типів може зростати експоненціально зі збільшенням складності виразу.
🇺🇦 iOSDevUA
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🚀Wow!! Калькулятор нарешті з’явиться на iPad з iPadOS 18, з розширеними функціями та інтеграцією Apple Pencil.
Новий додаток Calculator також буде доступний для всіх сумісних моделей і матиме узгоджений інтерфейс на всіх пристроях.
Спекуляції щодо відсутності додатка Calculator на iPad можуть бути пов’язані з філософією дизайну та пріоритизацією всередині Apple.
🇺🇦 iOSDevUA
Новий додаток Calculator також буде доступний для всіх сумісних моделей і матиме узгоджений інтерфейс на всіх пристроях.
Спекуляції щодо відсутності додатка Calculator на iPad можуть бути пов’язані з філософією дизайну та пріоритизацією всередині Apple.
🇺🇦 iOSDevUA
This media is not supported in your browser
VIEW IN TELEGRAM
💡Створення анімації в стилі Siri в iOS 18
Siddhant Mehta та Meng To використовували комбінацію Mesh Gradient (приклад ви можете побачити у моєму пості вище) та ripple-ефекту.
🛠 Вихідний код проєкту доступний на GitHub.
📺 Сесія з прикладами анімацій ось тут.
🇺🇦 iOSDevUA
Siddhant Mehta та Meng To використовували комбінацію Mesh Gradient (приклад ви можете побачити у моєму пості вище) та ripple-ефекту.
🛠 Вихідний код проєкту доступний на GitHub.
📺 Сесія з прикладами анімацій ось тут.
🇺🇦 iOSDevUA
Hello iOS developers! New digest is here!
Hello everyone! New iOS weekly digest is here!
🚀🚀🚀 Last Week at Apple 🚀 🚀 🚀
SwiftUI, SwiftUI but what about UIKit? Jordan Morgan wrote an interesting article about UIKit improvements in iOS 18:
iOS 18: Notable UIKit Additions
https://www.swiftjectivec.com/ios-18-notable-uikit-additions
Why Swift's type checker is so slow
The Swift compiler can take an absurdly long time to compile expressions due to how types are inferred1. Here’s an explanation by the creator of Swift, Chris Lattner (from from his Mojo talk and edited for clarity):
My experience with Swift is we tried to make a really fancy bi-directional Hindley-Milner type checker and it’s really great because you can have very beautiful minimal syntax but the problem is that A) compile times are really bad (particularly if you have complicated expressions) and 😎 the error messages are awful because now you have a global constraint system and when something goes wrong you have to infer what happened and the user can’t know that something over there made it so something over here can’t type check. In my experience it sounds great but it doesn’t work super well:
https://danielchasehooper.com/posts/why-swift-is-slow
Mastering ScrollView in SwiftUI. Scroll Offset
WWDC 24 is over, and I decided to start writing posts about new features in the upcoming iteration of the SwiftUI framework. Apple continues filling gaps this year by introducing more granular control over the scroll position. This week, we will learn how to manipulate and read the scroll offset:
https://swiftwithmajid.com/2024/06/17/mastering-scrollview-in-swiftui-scroll-offset
Async await in Swift explained with code examples
Async await is part of the new structured concurrency changes that arrived in Swift 5.5 during WWDC 2021. Concurrency in Swift means allowing multiple pieces of code to run at the same time. This is a very simplified description, but it should give you an idea already how important concurrency in Swift is for the performance of your apps. With the new async methods and await statements, we can define methods performing work asynchronously:
https://www.avanderlee.com/swift/async-await
If you wondered how many Apple pays to OpenAI for ChatGPT integration, the answer is: zero:
https://www.macrumors.com/2024/06/13/apple-not-paying-openai-chatgpt-ios-18
And the last but not least - one hard thing for us as iOS and MacOS developers:
iOS 18 could ‘sherlock’ $400M in app revenue
This feels natural and probably good for end users but not for developers. Especially I can't understand when developers are happy about Apple "killed" some company or startup - we don't know when our app or company will be "killed" next:
https://techcrunch.com/2024/06/18/ios-18-could-sherlock-400m-in-app-revenue/
Hello everyone! New iOS weekly digest is here!
🚀🚀🚀 Last Week at Apple 🚀 🚀 🚀
SwiftUI, SwiftUI but what about UIKit? Jordan Morgan wrote an interesting article about UIKit improvements in iOS 18:
iOS 18: Notable UIKit Additions
https://www.swiftjectivec.com/ios-18-notable-uikit-additions
Why Swift's type checker is so slow
The Swift compiler can take an absurdly long time to compile expressions due to how types are inferred1. Here’s an explanation by the creator of Swift, Chris Lattner (from from his Mojo talk and edited for clarity):
My experience with Swift is we tried to make a really fancy bi-directional Hindley-Milner type checker and it’s really great because you can have very beautiful minimal syntax but the problem is that A) compile times are really bad (particularly if you have complicated expressions) and 😎 the error messages are awful because now you have a global constraint system and when something goes wrong you have to infer what happened and the user can’t know that something over there made it so something over here can’t type check. In my experience it sounds great but it doesn’t work super well:
https://danielchasehooper.com/posts/why-swift-is-slow
Mastering ScrollView in SwiftUI. Scroll Offset
WWDC 24 is over, and I decided to start writing posts about new features in the upcoming iteration of the SwiftUI framework. Apple continues filling gaps this year by introducing more granular control over the scroll position. This week, we will learn how to manipulate and read the scroll offset:
https://swiftwithmajid.com/2024/06/17/mastering-scrollview-in-swiftui-scroll-offset
Async await in Swift explained with code examples
Async await is part of the new structured concurrency changes that arrived in Swift 5.5 during WWDC 2021. Concurrency in Swift means allowing multiple pieces of code to run at the same time. This is a very simplified description, but it should give you an idea already how important concurrency in Swift is for the performance of your apps. With the new async methods and await statements, we can define methods performing work asynchronously:
https://www.avanderlee.com/swift/async-await
If you wondered how many Apple pays to OpenAI for ChatGPT integration, the answer is: zero:
https://www.macrumors.com/2024/06/13/apple-not-paying-openai-chatgpt-ios-18
And the last but not least - one hard thing for us as iOS and MacOS developers:
iOS 18 could ‘sherlock’ $400M in app revenue
This feels natural and probably good for end users but not for developers. Especially I can't understand when developers are happy about Apple "killed" some company or startup - we don't know when our app or company will be "killed" next:
https://techcrunch.com/2024/06/18/ios-18-could-sherlock-400m-in-app-revenue/
Swiftjective-C
iOS 18: Notable UIKit Additions
iOS 18 is out in the wild! As always, let’s check in with our mature interface framework, UIKit.
💡UIKitNavigation – бібліотека від Pointfree
За мотивами недавньої серії роликів про сучасну розробку на UIKit Pointfree випустили прев'ю бібліотеки UIKitNavigation, за допомогою якої можна керувати станом додатка, реалізовувати біндинги та навігацію за аналогією зі SwiftUI.
🇺🇦 iOSDevUA
За мотивами недавньої серії роликів про сучасну розробку на UIKit Pointfree випустили прев'ю бібліотеки UIKitNavigation, за допомогою якої можна керувати станом додатка, реалізовувати біндинги та навігацію за аналогією зі SwiftUI.
🇺🇦 iOSDevUA
www.pointfree.co
A preview of our upcoming UIKitNavigation library
We are excited to announce a beta preview of UIKitNavigation: a toolkit for building modern UIKit apps, including powerful state management tools and tools to drive navigation in UIKit from state.
❤1
💡NotPrivateAPIs — проєкт, який розкриває деякі приватні API
❗️Звичайно, їх не можна використовувати в робочих проєктах і викладати в App Store.
Наприклад, меню зі своїми елементами — це взагалі ще та задача (подивіться реакції в Messages над повідомленням, або реалізацію в телеграмі).
📖 Morris Richman зібрав в одному місці речі, які використовує Apple: наприклад, як додати кастомний хедер в UIAlertController або як змінити іконку додатка без попередження користувача.
🇺🇦 iOSDevUA
❗️Звичайно, їх не можна використовувати в робочих проєктах і викладати в App Store.
Наприклад, меню зі своїми елементами — це взагалі ще та задача (подивіться реакції в Messages над повідомленням, або реалізацію в телеграмі).
📖 Morris Richman зібрав в одному місці речі, які використовує Apple: наприклад, як додати кастомний хедер в UIAlertController або як змінити іконку додатка без попередження користувача.
🇺🇦 iOSDevUA
👍2
Можна налаштувати, які дії скільки місця займають
Презентується як звичайний контролер. Управління через делегати
🇺🇦 iOSDevUA
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💡NodeSwift – пакет для інтеропу Swift з Node.js
NodeSwift – пакет, за допомогою якого можна реалізовувати інтероп Swift з Node.js в обидва боки. Навіщо це взагалі може бути потрібно:
👉 Працювати з нативним кодом і macOS API в Electron-додатку
👉 Використовувати NPM пакети з Swift-додатку
👉 Прискорювати JS код, реалізуючи критичні частини на Swift
🇺🇦 iOSDevUA
NodeSwift – пакет, за допомогою якого можна реалізовувати інтероп Swift з Node.js в обидва боки. Навіщо це взагалі може бути потрібно:
👉 Працювати з нативним кодом і macOS API в Electron-додатку
👉 Використовувати NPM пакети з Swift-додатку
👉 Прискорювати JS код, реалізуючи критичні частини на Swift
🇺🇦 iOSDevUA
GitHub
GitHub - kabiroberai/node-swift: Create Node modules in Swift
Create Node modules in Swift. Contribute to kabiroberai/node-swift development by creating an account on GitHub.
💡Як iOS 18 покращує роботу з градієнтами
Дуже часто в проектах розробники використовують додатковий градієнт, щоб створити контраст між фоном і текстом.
Однак при такому використанні лінійного градієнта будуть видні перепади яскравості та різкий перехід.
📖 В iOS 18 доступне нове API для змішування кольорів. Тому, використовуючи
Приклад використання під катом:
📖 Додатково почитати про змішування кольорів можна в цій статті.
🇺🇦 iOSDevUA
Дуже часто в проектах розробники використовують додатковий градієнт, щоб створити контраст між фоном і текстом.
Однак при такому використанні лінійного градієнта будуть видні перепади яскравості та різкий перехід.
📖 В iOS 18 доступне нове API для змішування кольорів. Тому, використовуючи
UnitCurve, можна інтерполювати кольори за допомогою вбудованих або кастомних кривих Безьє, щоб забезпечити плавність переходу.Приклад використання під катом:
extension Gradient {
init(from: Color, to:Color, with curve:UnitCurve, steps:Int = 10) {
let colors = stride(from: 0.0, through: 1.0, by: 1.0 / Double(steps))
.map { f in
from.mix(with: to, by: curve.value(at: f))
}
self.init(colors: colors)
}
}📖 Додатково почитати про змішування кольорів можна в цій статті.
🇺🇦 iOSDevUA
🔥2