Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨💻
SwiftUI — это декларативный фреймворк, позволяющий нам создавать сложные пользовательские интерфейсы, определяя данные, отображаемые на экране.
🧭 Навигация была главной больной точкой фреймворка с самого первого дня. К счастью, после #WWDC22 ситуация изменилась, и SwiftUI теперь предоставляет новый API навигации на основе данных.
📖 В этом материале можно узнать, как использовать новый Navigation API для построения
user flow — пути, которым могут воспользоваться пользователи внутри приложения.
@iOS Dev
SwiftUI — это декларативный фреймворк, позволяющий нам создавать сложные пользовательские интерфейсы, определяя данные, отображаемые на экране.
🧭 Навигация была главной больной точкой фреймворка с самого первого дня. К счастью, после #WWDC22 ситуация изменилась, и SwiftUI теперь предоставляет новый API навигации на основе данных.
📖 В этом материале можно узнать, как использовать новый Navigation API для построения
user flow — пути, которым могут воспользоваться пользователи внутри приложения.
@iOS Dev
Как сбросить UserDefaults в Swift?
👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых конфигураций или настроек приложения.
Вот только по мере усложнения проекта иногда нам может понадобится функция очистки всего конфига.
🤔 Мы можем использовать метод
🛠 Но что делать, если таких ключей у нас пара десятков? Тогда на помощь придёт системное API, в котором пригодится
@iOS Dev
👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых конфигураций или настроек приложения.
Вот только по мере усложнения проекта иногда нам может понадобится функция очистки всего конфига.
🤔 Мы можем использовать метод
removeObject
, чтобы удалить значение для определенного ключа (и сделать так для каждого).🛠 Но что делать, если таких ключей у нас пара десятков? Тогда на помощь придёт системное API, в котором пригодится
removePersistantDomainForName
.@iOS Dev
Grand Central Dispatch: многопоточность, очереди, параллелизм
Grand Central Dispatch (GCD) - это низкоуровневый API для управления параллельными операциями. Он может помочь улучшить скорость отклика вашего приложения, откладывая вычислительно дорогие задачи на задний план. Это более простая в работе модель, нежели блокировки и потоки.
📖 В этом материале по Grand Central Dispatch, состоящем из двух частей, вы узнаете все тонкости GCD и его Swifty API.
⚫ В первой части объясняется, что делает GCD, и демонстрируется несколько основных функций GCD.
⚫ Во второй части вы узнаете о некоторых расширенных функциях GCD.
Вы будете работать над существующим приложением под названием GooglyPuff. GooglyPuff - это неоптимизированное, "потокобезопасное" приложение, которое накладывает «гугл-глаза» на обнаруженные лица, используя API Core Image для обнаружения лиц.
🛠 В рамках этих статей GCD поможет оптимизировать приложение и обеспечить безопасный вызов кода из разных потоков.
@iOS Dev
Grand Central Dispatch (GCD) - это низкоуровневый API для управления параллельными операциями. Он может помочь улучшить скорость отклика вашего приложения, откладывая вычислительно дорогие задачи на задний план. Это более простая в работе модель, нежели блокировки и потоки.
📖 В этом материале по Grand Central Dispatch, состоящем из двух частей, вы узнаете все тонкости GCD и его Swifty API.
⚫ В первой части объясняется, что делает GCD, и демонстрируется несколько основных функций GCD.
⚫ Во второй части вы узнаете о некоторых расширенных функциях GCD.
Вы будете работать над существующим приложением под названием GooglyPuff. GooglyPuff - это неоптимизированное, "потокобезопасное" приложение, которое накладывает «гугл-глаза» на обнаруженные лица, используя API Core Image для обнаружения лиц.
🛠 В рамках этих статей GCD поможет оптимизировать приложение и обеспечить безопасный вызов кода из разных потоков.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Создание кастомного ParseableFormatStyle в iOS
⏳ Начиная с iOS 2.0, старый класс
📖 В этом посте рассматриваются развёрнутые возможности и приводятся примеры, как расширить
🙌 И хотя в статье автор пишет про iOS, эти протоколы доступны в macOS, watchOS и tvOS.
@iOS Dev
⏳ Начиная с iOS 2.0, старый класс
Formatter
и его производные, такие как DateFormatter
и NumberFormatter
, были основным средством преобразования значений в строки и наоборот — из строк. С течением времени Apple добавила другие крутые форматеры, такие как ByteCountFormatter
, MeasurementFormatter
, RelativeDateTimeFormatter
и ListFormatter
. 📖 В этом посте рассматриваются развёрнутые возможности и приводятся примеры, как расширить
ParseableFormatStyle
и связанные с ним протоколы, чтобы создать собственный пользовательский форматер телефонных номеров. Затем его используют для фактического форматирования ввода текстовых полей. 🙌 И хотя в статье автор пишет про iOS, эти протоколы доступны в macOS, watchOS и tvOS.
@iOS Dev
DoNilDisturb Swift Plugin
😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенно ближе к вечеру пятницы).
Решил поделиться с вами шуточным плагином, который не позволит вам билдить проекты в нерабочее время😂
Не у всех выходные в субботу и воскресенье, и не у всех рабочий день длится с 9 до 17 часов, но всё-таки!
Опенсорсный DoNilDisturb Swift Plugin (nil, ахахах, ну вы поняли) делает именно это — не даёт вам запустить ваш проект в нерабочее время.
Хороших вам выходных, iOS-разработчики❤️!
@iOS Dev
😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенно ближе к вечеру пятницы).
Решил поделиться с вами шуточным плагином, который не позволит вам билдить проекты в нерабочее время😂
Не у всех выходные в субботу и воскресенье, и не у всех рабочий день длится с 9 до 17 часов, но всё-таки!
Опенсорсный DoNilDisturb Swift Plugin (nil, ахахах, ну вы поняли) делает именно это — не даёт вам запустить ваш проект в нерабочее время.
Хороших вам выходных, iOS-разработчики❤️!
@iOS Dev
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование
🤔 Что вообще за зверь такой, responder, если я имею дело с UITextFields?
🤔 Почему UIViews юзает сабкласс от UIResponder?
🤔 Вообще, в чем их смысл?
В iOS Responder Chain — это название, данное сгенерированному UIKit связному списку объектов UIResponder, и это основа для всего, что касается событий (touch, motion).
🛠 Responder Chain — это то, с чем мы постоянно встречаемся при разработке, и хотя не так часто приходится иметь с ней дело напрямую, пожалуй, кроме манипуляций с клавиатурой
Экземпляры UIResponder это объекты, которые могут обрабатывать и реагировать на произвольные события. Многие вещи в iOS являются UIResponder, включая
📖 В этом материале рассказывается про это детальнее, и приводятся примеры использования.
@iOS Dev
🤔 Что вообще за зверь такой, responder, если я имею дело с UITextFields?
🤔 Почему UIViews юзает сабкласс от UIResponder?
🤔 Вообще, в чем их смысл?
В iOS Responder Chain — это название, данное сгенерированному UIKit связному списку объектов UIResponder, и это основа для всего, что касается событий (touch, motion).
🛠 Responder Chain — это то, с чем мы постоянно встречаемся при разработке, и хотя не так часто приходится иметь с ней дело напрямую, пожалуй, кроме манипуляций с клавиатурой
UITextField
😉, знание того, как она работает, позволяет решать связанные с событиями проблемы простыми/креативными способами.Экземпляры UIResponder это объекты, которые могут обрабатывать и реагировать на произвольные события. Многие вещи в iOS являются UIResponder, включая
UIView
, UIViewController
, UIWindow
, UIApplication
и UIApplicationDelegate
.📖 В этом материале рассказывается про это детальнее, и приводятся примеры использования.
@iOS Dev
Быстрый способ проверить, все ли элементы коллекции удовлетворяют заданному условию
👌 Со Swift 4.2 для этого можно использовать метод
🟢 Если все элементы удовлетворяют заданному условию, то вызов
🔴Если хотя бы один элемент не пройдет наше условие, то результатом вызова
@iOS Dev
👌 Со Swift 4.2 для этого можно использовать метод
allSatisfy()
. 🟢 Если все элементы удовлетворяют заданному условию, то вызов
allSatisfy()
вернет true
.🔴Если хотя бы один элемент не пройдет наше условие, то результатом вызова
allSatisfy()
будет false
.@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Быстрый способ проверить созданную URL-схему (диплинк) в симуляторе c помощью терминала
⏳ Есть старый способ с использованием Safari, но он не так эффективен. Safari не запоминает последнюю добавленную схему, поэтому вам придется вводить её снова и снова. А переход между браузером и приложением делает ситуацию хуже, ещё и тратит время.
👌 Расскажу о другом способе. Вы наверняка знаете, что есть xcrun, который можно использовать для запуска любого инструмента внутри Xcode из командной строки. Опцией для способа ниже является simctl, который и поможет вам управлять симуляторами.
Для этого можно использовать:
💻 В качестве параметра
Специально для @iOS Dev.
⏳ Есть старый способ с использованием Safari, но он не так эффективен. Safari не запоминает последнюю добавленную схему, поэтому вам придется вводить её снова и снова. А переход между браузером и приложением делает ситуацию хуже, ещё и тратит время.
👌 Расскажу о другом способе. Вы наверняка знаете, что есть xcrun, который можно использовать для запуска любого инструмента внутри Xcode из командной строки. Опцией для способа ниже является simctl, который и поможет вам управлять симуляторами.
Для этого можно использовать:
xcrun simctl openurl booted <url>
💻 В качестве параметра
url
нужно использовать вашу ранее созданную схему. В моём примере это: exampleapp://test
.Специально для @iOS Dev.
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone
Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач.
Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться.
@iOS Dev
Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач.
Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться.
@iOS Dev
Telegraph
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone
⚪ Однобуквенные и двухбуквенные комбинации были просто хардкодом. Тяжело поверить, но это правда. При вводе «ik» всегда была автокоррекция на «ok». ⚪ Автокоррекция на оригинальном iPhone была очень простой. Она всегда соответствовала количеству набранных…
Equality в Swift: протокол Equatable, объяснение и примеры
🧐 Проверка того, считаются ли два объекта или значения равными, определенно является одной из наиболее часто выполняемых операций во всем программировании.
💻 Одним из наиболее интересных аспектов реализации равенства в Swift является то, что все это сделано протокольно-ориентированным способом — это означает, что любой тип может стать равнозначным, соответствуя протоколу
📖 Например, в этой статье рассматривается, как Swift моделирует концепцию равенства и как эта модель различается между типами значений и ссылок.
@iOS Dev
🧐 Проверка того, считаются ли два объекта или значения равными, определенно является одной из наиболее часто выполняемых операций во всем программировании.
💻 Одним из наиболее интересных аспектов реализации равенства в Swift является то, что все это сделано протокольно-ориентированным способом — это означает, что любой тип может стать равнозначным, соответствуя протоколу
Equatable
.📖 Например, в этой статье рассматривается, как Swift моделирует концепцию равенства и как эта модель различается между типами значений и ссылок.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Продвинутые анимации в SwiftUI
📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе
Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI.
Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций.
1️⃣ Часть первая — Paths.
2️⃣ Часть вторая — GeometryEffect.
3️⃣ Часть третья — AnimatableModifier.
🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.
@iOS Dev
📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе
Animatable
, его верном спутнике animatableData
, мощном и часто игнорируемом GeometryEffect
и протоколе AnimatableModifier
.Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI.
Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций.
1️⃣ Часть первая — Paths.
2️⃣ Часть вторая — GeometryEffect.
3️⃣ Часть третья — AnimatableModifier.
🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.
@iOS Dev
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏
📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке.
📖 В этой статье рассказывается про один из подходов.
Что НЕ следует делать
🔴 Показывать алерт при запуске.
🔴 Показывать его слишком рано.
🔴 Показывать при любом общем для всех действии.
Стратегии получения максимальной отдачи
🟢 Ориентироваться на уникальное действие в приложении.
🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении.
🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например:
— Открытие твита 1 балл.
— Лайк твита 3 балла.
— Создание твита 5 баллов.
Если пользователь достигнет нужного порога — показываем запрос.
🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.
@iOS Dev
📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке.
📖 В этой статье рассказывается про один из подходов.
Что НЕ следует делать
🔴 Показывать алерт при запуске.
🔴 Показывать его слишком рано.
🔴 Показывать при любом общем для всех действии.
Стратегии получения максимальной отдачи
🟢 Ориентироваться на уникальное действие в приложении.
🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении.
🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например:
— Открытие твита 1 балл.
— Лайк твита 3 балла.
— Создание твита 5 баллов.
Если пользователь достигнет нужного порога — показываем запрос.
🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.
@iOS Dev
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков.
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов.
Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
@iOS Dev
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов.
Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
@iOS Dev
Применение default для подсчёта количества символов в строке
Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях.
Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом
🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs».
💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.
@iOS Dev
Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях.
Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом
default
.🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs».
💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.
@iOS Dev
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU
Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой.
Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь!
🤔 Что такое CPU Exceptions в iOS?
Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго.
Однако в фоне вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды.
Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение.
Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор".
📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.
@iOS Dev
Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой.
Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь!
🤔 Что такое CPU Exceptions в iOS?
Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго.
Однако в фоне вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды.
Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение.
Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор".
📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.
@iOS Dev
Простой способ подсчитать количество строк в ваших Swift-файлах
Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods):
Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.
@iOS Dev
Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods):
find . -path ./Pods -prune -o -name '*.swift' -print0 ! -name '/Pods' | xargs -0 wc -l
Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Субботний опенсорс
🛠 Полезный репозиторий с реализацией нескольких сортировок.
Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort).
Используется Swift Playgrounds.
@iOS Dev
#opensource
🛠 Полезный репозиторий с реализацией нескольких сортировок.
Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort).
Используется Swift Playgrounds.
@iOS Dev
#opensource
Различные способы перехвата ошибок в Swift при использовании do-catch
Конечно, заманчиво просто поймать все ошибки с помощью единственного
👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения
📖 В этой статье автор рассматривает различные способы перехвата из
@iOS Dev
Конечно, заманчиво просто поймать все ошибки с помощью единственного
catch
и на этом закончить, но не все ошибки одинаковы, и вы должны относиться к ним именно так.👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения
catch
. Они будут легко читаться, пониматься и соответствовать потребностям вашего вашего приложения.📖 В этой статье автор рассматривает различные способы перехвата из
throw
-функций. Кроме этого, описываются типы этих функций и разбирается, что в них используется для разделения каждого catch
.@iOS Dev
Clean Architecture и MVVM в iOS: пример реализации проекта
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
@iOS Dev
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Когда скопировал два решения со StackOverflow
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable
📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC.
Новый SwiftUI PhotosPicker API доступен на всех платформах:
⚪ iOS (16.0+)
⚪ iPadOS (16.0+)
⚪ macOS (13.0+)
⚪ watchOS (9.0+)
Больше не нужно использовать
Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его.
Кстати, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения.
Для внедрения нужны два шага:
1️⃣ Использовать
2️⃣ Загрузить данные об объекте с помощью
@iOS Dev
📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC.
Новый SwiftUI PhotosPicker API доступен на всех платформах:
⚪ iOS (16.0+)
⚪ iPadOS (16.0+)
⚪ macOS (13.0+)
⚪ watchOS (9.0+)
Больше не нужно использовать
UIViewControllerRepresentable
для обертывания PHPickerViewController
или его старой версии UIImagePickerController
.Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его.
Кстати, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения.
Для внедрения нужны два шага:
1️⃣ Использовать
PhotosPicker
для получения одного или нескольких экземпляров PhotosPickerItem
.2️⃣ Загрузить данные об объекте с помощью
PhotosPickerItem.loadTransferable
.@iOS Dev