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

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

#ios #mobile #swift
加入频道
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
Улучшение работы с closures в Swift 5.7

Раньше Swift действительно боролся с любыми замыканиями, которые не были тривиальными, но начиная с Swift 5.7 мы теперь можем писать код, как в первом примере.

😎 В новой версии было принято предложение SE-0326. Это сделало вывод типов менее неожиданным для разработчиков и устранило существующую ошибку в поведении.

👌 Речь здесь идёт о том, что добавление еще одного выражения или оператора в closure могло приводить к ошибке компиляции. Теперь такого не будет, и это хорошо.

@iOS Dev
WWDC: Вопросы и ответы из Digital Lounges

В некоторых источниках уже фигурировали ответы по SwiftUI, собранные из каналов Slack по итогам общения разработчиков с работниками Apple.

📖 Пользователь твиттера по имени Emin пошёл дальше и создал ресурс со всеми темами из Digital Lounges.

👏 Из плюсов — хороший поиск и степень структурирования, а также потенциальное масштабирование.

🛠 Также вы можете внести и свой вклад в опенсорсный проект на гитхабе.

@iOS Dev
Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨‍💻

SwiftUI — это декларативный фреймворк, позволяющий нам создавать сложные пользовательские интерфейсы, определяя данные, отображаемые на экране.

🧭 Навигация была главной больной точкой фреймворка с самого первого дня. К счастью, после #WWDC22 ситуация изменилась, и SwiftUI теперь предоставляет новый API навигации на основе данных.

📖 В этом материале можно узнать, как использовать новый Navigation API для построения
user flow — пути, которым могут воспользоваться пользователи внутри приложения.

@iOS Dev
Как сбросить UserDefaults в Swift?

👌 Мы можем использовать 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
This media is not supported in your browser
VIEW IN TELEGRAM
Создание кастомного ParseableFormatStyle в iOS

Начиная с 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
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование

🤔 Что вообще за зверь такой, 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 для этого можно использовать метод 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, который и поможет вам управлять симуляторами.

Для этого можно использовать:

xcrun simctl openurl booted <url>

💻 В качестве параметра url нужно использовать вашу ранее созданную схему. В моём примере это: exampleapp://test.

Специально для @iOS Dev.
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone

Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач.

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

@iOS Dev