iOS Dev
7.72K subscribers
1K photos
84 videos
1 file
1.16K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
Download Telegram
Обновления для Simulator в iOS 16

🎉 Simulator теперь поддерживает удаленные уведомления в iOS 16 при запуске в macOS 13 на Mac с Apple silicon или T2. Используется Apple Push Notification Service Sandbox. Каждый симулятор генерирует токен из комбинации самого симулятора и аппаратного обеспечения Mac.

🎉 Уведомления поддерживают больше функций с помощью .apns payload или команды simctl push.

🎉 simctl теперь поддерживает управление симуляцией местоположения, включая запуск сценариев и интерполяцию между списком путевых точек.

simctl addmedia прокачан для поддержки многих дополнительных форматов изображений (включая многие популярные форматы RAW).

Теперь вы можете загружать устройства симулятора, например x86_64 на Mac с Apple silicon, используя новый аргумент командной строки --arch в simctl boot.

Внимание! Токены симулятора могут быть длиннее, чем токены физического устройства. Не задавайте жестко определенную длину или формат для этих токенов.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
В Xcode 14 добавили code snippet для генерации memberwise initializer 🎉

Ну наконец-то! Раньше для этого можно было юзать, конечно, правую кнопку мыши и так далее, но теперь-то заживём 😅

@iOS Dev
Новый синтаксис в Swift 5.7 для optional unwrapping

😎 В Swift 5.7 появился новый, более лаконичный способ optional unwrapping с помощью операторов if let и guard let.

👌Теперь мы можем просто опустить присваивание после оператора if let, и компилятор Swift автоматически преобразует наш опциональный параметр в конкретное значение с точно таким же именем.

Также это сработает и для guard.

👍 Конечно, у нас все еще есть возможность делать как раньше: из-за стиля кода, либо если мы хотим дать другое имя преобразуемому опциональному значению.

@iOS Dev
Теперь можно просматривать SF-символы прямо из библиотеки Xcode 14

👍Намного проще и понятнее, чем было ранее.

@iOS Dev
SwiftUI в ячейках UITableView или UICollectionView с помощью UIHostingConfiguration

С момента своего первоначального появления в 2019 году SwiftUI обладал приличной совместимостью с UIKit. Экземпляры UIView и UIViewController можно было обернуть для полной совместимости со SwiftUI, а UIHostingController позволял нам отображать SwiftUI в контроллере на базе UIKit.

🤔 Однако, несмотря на то, что в macOS существовал NSHostingView для встраивания SwiftUI в любой NSView, в iOS никогда не было простого способа сделать также. Мы могли взять UIHostingController, но даже это решение было так себе.

😉 В 14 оси ввели content configurations. Этот API теперь был расширен UIHostingConfiguration, позволяющим определять содержимое ячейки, используя любую иерархию SwiftUI. Здесь статья с разбором, описывающая и некоторые сложности.

Взаимодействие между SwiftUI и UIKit становится все более мощным, и это здорово.

🛠У меня в рабочем проекте не используется SwiftUI, но теперь я вижу веский повод попробовать.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одна фича нового Xcode — Sticky Headers при скролле

😉 Наглядно видна иерархия, работает и для Objective-C тоже.

📓 Разработчикам альтернативных IDE стоит взять на заметку, выглядит очень удобно.

@iOS Dev
Открылась регистрация на WWDC labs и lounges от Apple

Что это вообще такое?

💬 Digital lounges

Ежедневно в Slack проходит множество интересных мероприятий.

Можно задавать вопросы по проектированию и дизайну.
Следить за переписками в режиме реального времени во время совместного просмотра.
Знакомиться с другими разработчиками в непринуждённой обстановке.
Экспериментируйте с новейшими фреймворками.
🔵 Викторина против лучших в своём деле 9 июня.

💻 Лаборатории

Получите индивидуальные консультации по основам разработки или сложным концепциям.
Узнайте, как внедрять новые технологии Apple, принципы дизайна и многое другое.

Кому можно участвовать?

🙋 Активности открыты для всех участников программ Apple Developer Program и Apple Developer Enterprise Program, а также для победителей 2022 Swift Student Challenge.

Где?

Регистрация на Labs здесь.

Регистрация на Lounges здесь.

@iOS Dev
Эвристика iOS постоянно совершенствуется, например, теперь мы можем обнаруживать деньги и не только с помощью новых детекторов данных.

🛠 Если с .money всё понятно, то .physicalValue пока что без описания.

@iOS Dev
Теперь можно изменять размер для sheetPresentation!

😉 Например, если вам нужен участок, который сейчас имеет высоту всего 250 пунктов, это легко сделать с помощью кода выше.

Когда вы создаёте свой detent provider, можно использовать UISheetPresentationControllerDetentResolutionContext, чтобы увидеть, например, trait collection или установить максимальное значение.

🎉 Неплохо! Кроме этого, можно использовать и прошлые свойства UISheetPresentationController, как установка, например, .largestUndimmedDetentIdentIdentifier.

@iOS Dev
Как добавить автоматическое изменение размера ячеек UICollectionView или UITableView в iOS 16

😎 Изменение, которое наверняка заставит тех из нас, кто годами полагался на UICollectionView и UITableView, плакать от радости и облегчения (как заметил Джордан Морган, написавший одним из первых про эту фичу), теперь автоматически управляет размером ячеек при изменении их содержимого.

ℹ️ Обратите внимание, речь идёт именно про изменение размера (у нас уже давно были self sizing cells).

А теперь, например, если у вас есть лейбл, который то прячется, то вновь показывается, больше не нужно выполнять магические заклинания, чтобы изменить размер ячейки, вычислить ее высоту или что-то еще — теперь это доступно прямо из коробки.

📝 И ещё кое-что, это свойство теперь включено по умолчанию.

@iOS Dev
SF-символы получили ещё один веский повод посмотреть на них под другим углом

С каждым годом они становятся сложнее и полезнее. Даже если бы нам каждый год добавляли больше символов, это уже было бы неплохо 😉.

Буквально вчера я уже писал про то, что в Apple упростили их интеграцию в наши приложения. Но это не всё!

В Apple ищут способы для расширения возможностей многих вещей и добавления новых фреймворков. И сразу после того, как нам предоставили разные стили рендеринга символов, появилась возможность ещё и по-разному их заполнять.

Короче говоря, мы можем «заполнить» глиф на основе процентного значения от 0 до 1. Примеры использования, о которых можно подумать сразу:

1️⃣ Прогресс загрузки или обновления.

2️⃣ Сила сигнала Wi-Fi.

3️⃣ Заряд вашего телефона (и не только его).

4️⃣ Размер волн на море (простите, лето).

😎 В общем, примеров использования этого простого улучшения может быть много, и здорово, что символы постоянно прокачивают.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Упрощаем написание и понимание кода в Swift 5.7 использованием some

В своем канале постараюсь приводить самые занятные моменты сессий в виде небольших постов с разбором.

На гифке объявление идентично предыдущему, но ненужный список параметров типа и where исчезли, потому что нам не всегда нужна выразительность, которую они обеспечивают.

Запись some Animal более понятна, поскольку уменьшает синтаксический шум и включает семантическую информацию о параметре animal прямо в объявление параметра.

Немного про синтаксис some Animal

1️⃣ Слово some указывает на то, что вы работаете с определенным типом.

2️⃣ За ключевым словом some всегда следует требование соответствия.

3️⃣ В данном случае конкретный тип должен соответствовать протоколу Animal, что позволит нам использовать требования протокола Animal для значения параметра.

4️⃣ Ключевое слово some можно использовать в типах параметров и результатов.

😉 Если вы уже писали код SwiftUI, вы использовали some. Some View несёт точно такой же смысл.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Xcode 14 научили добавлять отступы при вводе закрывающей скобки

😎По факту, это аналог команды Ctrl + i. Она же находится в Editor -> Structure -> Re-Indent.

@iOS Dev
Создание и настройка диаграмм с помощью нового Swift Charts Framework

💻 Уже появляются статьи и туториалы, связанные с анонсами #WWDC, по мере сил делюсь с вами этими материалами в доступных форматах.

📖 Адаптировал и запилил на хабре урок про создание и настройку диаграммы со слоями.

📖 Для тех, кто предпочитает читать в телеге — то же самое, доступно тут.

🛠 Базовый материал можно прочесть здесь, а код, по традиции, на гитхабе.

@iOS Dev
Как с помощью Gauge в iOS 16 показать значение в заданном диапазоне

👨‍💻 Часто бывает так, что вы хотите отобразить прогресс чего-то происходящего в вашем приложении, например, в отображающем список книг, и хотите показать прогресс чтения.

В SwiftUI для этого можно использовать Gauge View (подробнее в документации).

🙌 Кроме этого, вы можете дополнительно стилизовать внешний вид индикатора, задав цвет оттенка или градиент в инициализаторе. На картинке показан эффект градиента с CircularGaugeStyle.

@iOS Dev
WWDC: Навигация по блокам видео

#WWDC подошла к концу, и пусть мы некоторые нововведения уже расмотрели, но их, конечно же, намного больше.

Позволил себе вынести в отдельный блок приоритетные темы для изучения.

📼 Лучшее в Swift: последние обновления.
📼 Инструменты разработчика: все, что нужно для создания следующего топового приложения.
📼 System Services.
📼 Карты.
📼 SwiftUI и Frameworks.
📼 Privacy и Security.

Остальные видео, сгруппированые по блокам, доступны по следующим ссылкам:

📼 Доступность и инклюзивность.
📼 Изменения в App Services: App Intents, SharePlay, WidgetKit, Focus, и другие.
📼 Лучшее из App Store Distribution и Marketing.
📼 Аудио и видео.
📼 Дополненная реальность.
📼 Бизнес и образование.
📼 Улучшения в дизайне: узнайте, как придумывать, повторять и создавать отличные интерфейсы.
📼 Графика и игры: повысьте уровень своих приложений и игр с помощью Metal 3.
📼 Здоровье и фитнес.
📼 ML и Vision.
📼 Фото и камера.
📼 Safari и Web.

❤️ Сделал для читателей @iOS Dev.
Как использовать Live Text API в вашем приложении для iOS

С iOS 16 функция Live Text стала доступна для разработчиков. Однако в Xcode 14 вы не найдете ни LiveTextKit, ни фреймворка с подобным названием. Всё дело в том, что новые API являются частью фреймворка VisionKit.

ℹ️ И вообще, Live Text — это скорее маркетинговый термин. Классы, которые нужно использовать, это ImageAnalyzer и ImageAnalysisInteraction.

Базовая настройка по на деле не очень сложная. Нам нужен UIImageView для отображения overlay и экземпляр UIImage с каким-нибудь изображением, содержащим либо текст, либо, например QR-код.

📖 В своей статье Filip Němeček приводит пример работы этих API.

📼 Перед этим можно посмотреть видео с #WWDC или почитать документацию.

@iOS Dev
Пример создания CircleLayout в SwiftUI

❗️Внимание! Эта возможность официально не документирована (или спрятана, как другие Private API) и пока непонятно, как будут относиться в Apple на ревью. Я не рекомендую использовать это в ваших проектах на данный момент.

😎 Оказывается, что кроме стандартных типов лэйаута есть CircleLayout, который может привести к такому необычному отображению.

Если кто-то из вас, коллеги, делал приложения для WatchOS, то возможно вы проходили через некоторые сложности анимаций. Мне этот CircleLayout напомнил анимацию для часов, страшно даже сказать вслух, с #WWDC 2015.

Верю, что этот тип layout рано или поздно всё-таки анонсируют, так как, например, для часов мы уже видели улучшения.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Xcode 14 научили сохранять значение параметра при автокомплите вместо добавления нового

🎉 Одна из самых неприятных вещей в среде разработки была побеждена. Если раньше при автокомплите сохранялся старый код с уже заданным параметром и добавлялся новый слева, то теперь в Apple это оптимизировали и сэкономили всем нам немного нервов при разработке.

Надеюсь, что инициаторы этой фичи в Xcode получили свою заслуженную премию 😉.

@iOS Dev
Реализация собственного календаря с использованием UICalendarView на Swift в iOS 16

👏 Написал небольшую статью про то, как быстро можно внедрить новый UICalendarView в ваше приложение на Swift, в котором будет новая ось.

😉 Пример кода тоже есть, иначе зачем это всё.

@iOS Dev
Различные методы удаления последнего элемента из массива в Swift

1️⃣ dropLast()

let fruits = ["Apple","Orange","Banana"]
let nonRoundFruits = fruits.dropLast()
print(nonRoundFruits) // ["Apple", "Orange"]


Использование метода dropLast() удалит последний элемент и вернет оставшиеся. dropLast() является предпочтительным методом удаления массива, поскольку он безопасен, так как не изменяет исходный массив.

2️⃣ removeLast()

var fruits = ["Apple","Orange","Banana"]
let removedFruit = fruits.removeLast()
print(fruits) // ["Apple", "Orange"]
print(removedFruit) // Banana


В отличие от метода dropLast(), метод removeLast() удаляет последний элемент из исходного массива и модифицирует его.

3️⃣ popLast()

var fruits = ["Apple","Orange","Banana"]
let removedFruit = fruits.popLast()
print(fruits) // ["Apple", "Orange"]
print(removedFruit) // Optional("Banana")


🧐 PopLast() похож на прошлый, но есть разница. Если в массиве нет элементов перед вызовом popLast(), краша не будет. Вместо этого вернётся nil.

@iOS Dev