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

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

#ios #mobile #swift
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
Senior-разработчик объясняет архитектуру проекта новичкам😎
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает Bool.random() в Swift на самом деле?

Наверняка, в своих проектах каждый хоть раз использовал нечто вроде:

let randomInt = Int.random(in: 1..<5)
let randomFloat = Float.random(in: 1..<10)
let randomBool = Bool.random()


🤔 Но задумывались ли вы, что происходит на самом деле внутри? Иногда я смотрю на реализацию крутых вещей в ядре Swift, как например в посте про сортировку, и ищу материалы, объясняющие то или иное решение.

Так вот, в случае Bool полная реализация API будет получать необработанное значение UInt64 от генератора (он же RNG), сдвигать его вправо 17 раз и возвращать true, если первый бит результирующего значения равен 0.

Самое интересное в количестве, а именно, почему же 17?

Причина, по которой значение сдвигается ровно 17 раз, заключается в том, что (некоторые) слабые ГСЧ (генераторы случайных чисел) имеют лучшие свойства случайности в средних битах по сравнению с младшими/старшими битами.

Команда разработчиков Swift решила защитить нас от API, которые решили использовать эти ГСЧ вместо стандартного SystemRandomNumberGenerator.

ℹ️ Кстати, до пулл-реквеста, в котором реализовано это улучшение, Bool.random() просто возвращал generator.next() % 2 == 0.

📖 Почитать подробнее можно в ядре свифта или в более понятном источнике. А ещё рекомендую пост про UUID.

@iOS Dev
Как реализовать обновления в реальном времени с помощью Live Activity + Бонус

ℹ️ Live Activities будут представлены в iOS 16.1 как способ отображения актуальной информации на экране блокировки iPhone и в Dynamic Island.

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

👩‍💻 Бонусом идёт модифицированный скрипт для отправки нужных пушей, взятый из документации Apple.

👨‍💻 Кроме этого материала, советую ознакомиться с официальной документацией, если вы планируете внедрять эту функциональность в свои приложения.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание и планирование локальных уведомлений с помощью async/await

После того как вы получите разрешение на отправку уведомлений, вам будет доступно управление уведомлениями с помощью user notification center.

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

@iOS Dev
Интерполяция строк в Swift 5

📖 Swift 5 добавил некоторые приятные улучшения для интерполяции строк, о которых многие люди могут не знать.

Как минимум, это возможность управлять интерполяцией в кастомный тип, использующий ExpressibleByStringInterpolation.

ℹ️ Это позволит создавать такие типы, как HTML, и управлять новым форматированием строк OSLog (например, log.debug("value \(x, privacy: .public)").

Бекка Ройал-Гордон предоставила несколько хороших примеров этого в SE-0228.

Как побочный эффект, String и Substring теперь используют DefaultStringInterpolation, что дает нам возможность для настройки поведения интерполяции.

@iOS Dev
Как подружить фичу Autoplay и tvOS?

Autoplay — это когда по завершении просмотра одного фильма пользователю предлагается посмотреть похожий контент, рекомендованный системой.

О нюансах реализации этой фичи на tvOS рассказала Валерия Рублевская, iOS-разработчик на проекте онлайн-кинотеатра KION от МТС.

Прочитать можно здесь.
Использование Apple Swift и SwiftUI в iOS 16

📖 Большое исследование от Alexandre Colucci, которое стало уже традиционным. Как и в прошлые годы, автор постарался ответить на следующие вопросы:

🔘 Сколько бинарников в iOS 16?
🔘 Какие языки программирования используются для разработки этих приложений?
🔘 Сколько приложений написано на Swift?
🔘 Каков процент приложений, использующих SwiftUI, по сравнению с UIKit?

В материале автор рассказывает о методологии, об эволюции языков программирования и сравнивает UIKit со SwiftUI непосредственно в самих приложениях Apple.

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

Краткий вывод

Swift продолжает свое экспоненциальное восхождение и в этом году он опередил C++. Кроме этого, SwiftUI чаще задействуется и в Apple: количество двоичных файлов, использующих SwiftUI, удвоилось между iOS 15 и iOS 16.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Вы только посмотрите, разве это не самая милая реализация возможностей Dynamic Island?

В приложении Apollo можно кормить питомцев, играть с ними в игры, укреплять дружбу и не только.

📖 Материалы, которые вам помогут создать свой собственный остров: раз и два.

@iOS Dev
Учебник по кривым Безье — бесплатный ресурс (а по факту книга на github) с огромным руководством по работе с кривыми Безье

📖 Это электронная книга, посвященная как математическим, так и программным аспектам кривых Безье, охватывающая широкий круг тем, связанных с рисованием и работой с этой кривой, которая, кажется, появляется повсюду, от путей Photoshop до функций смягчения CSS и контура шрифта.

🕔 Я, конечно, ни на что не намекаю, но материал может пригодиться и когда-нибудь в будущем.

📖 В этом материале рассматриваются 45 глав, которые охватывают если не всё, то почти всё, связанное с этой темой.

Поэтому, если вас не пугает большое количество формул и расчётов, то источник вполне можно сохранить себе.

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

1️⃣ Отталкивайтесь в любом конкурсе от базы, а именно, от минимальных требований.

2️⃣ Планируйте своё время. Не только в конкурсе, а и в рабочих задачах. И помните про декомпозицию.

Не факт, что я сам буду участвовать в этот раз, но всем, кто попробует свои силы — ⭐️ удачи!

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Код Воробья для iOS разработчиков
В Xcode 14 добавили экспорт локализации пакетов. Подробнее в туториале по локализации.

Это новый туториал на сайте, мы сделали большой ультимативный гайд по локализации. Разобрали основы, экспорт и импорт, как локализовать SPM-пакеты, плюрализацию, картинки, плагины для авторгенерации.

В конце туториала узнаете почему для некоторых российский рубль показывается как , а для некоторых RUB.
Vision Framework для iOS: обнаружение контуров

💡 Творческий подход к доступным вам инструментам может существенно повлиять на результат.

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

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

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

📖 В этом руководстве вы узнаете, как использовать фреймворк Vision для следующих этапов:

1️⃣ Создание запросов для обнаружения контуров.

2️⃣ Настройка параметров для получения разных контуров.

3️⃣ Упрощение контуров для создания художественных эффектов.

@iOS Dev
OptionSet в Swift: определение, примеры и при чём тут побитовые операторы?

Недавно я писал пост про «базу» и то, что на самом деле мы гораздо чаще, чем нам кажется, встречаемся с важными алгоритмическими понятиями.

📖 В этом материале рассказывается о том, что создать собственный OptionSet не так уж и сложно.

Его можно использовать для большого количества логических значений.

Хотя вы можете инициализировать его литералом массива, на самом деле он больше похож на Set, чем на массив.

ℹ️ Фактически, OptionSet наследует все SetAlgebra, которые вы можете применять к сетам, что означает, что OptionSet имеет такие методы, как intersection, union, contains и несколько других методов, которые вы могли использовать в Set.

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

@iOS Dev
Простой доступ к данным симулятора

🔎 При разработке для iOS часто бывает полезно перейти к файлам, которые вы создаете в симуляторе.

Местонахождение файлов на диске менялось годами, но одно оставалось неизменным — неудобно определять местонахождение файлов.

Трудности с поиском файлов становятся еще более очевидными при работе в команде.

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

Проверка переменных среды, доступных при работе в симуляторе, показывает, что есть вся необходимая информация, чтобы это произошло.

😎 Теперь, каждый раз при запуске симулятора, на рабочем столе вашего Mac будет создаваться новая символическая ссылка.

@iOS Dev
UIStackView: Distribution и Alignment

Несмотря на то, что UIStackView значительно упрощает лэйаут, он все равно может стать довольно сложным и несколько запутанным.

Существует четыре основных свойства UIStackView:

1️⃣ axis

2️⃣ distribution

3️⃣ alignment

4️⃣ spacing

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

Как насчет оставшихся двух: alignment и spacing?

Хотя UIStackView стал настолько популярным и широко используется во многих приложениях, многие могут не понимать его полностью и использовать неправильно.

📖 И как раз о причинах сложностей и свойствах UIStackView рассказывается в этом материале.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация двунаправленной UICollectionView с использованием orthogonalScrollingBehavior

ℹ️ До iOS 13, если вы хотели реализовать вертикальную UICollectionView с разделами с горизонтальной прокруткой, требовалось встроить scroll view внутрь ячейки, передать модель, обработать тачи, прикрутить делегирование и сложную логику.

С UICollectionViewCompositionalLayout все эти проблемы исчезают.

Всё благодаря orthogonalScrollingBehavior, которую предоставила нам Apple.

📖 В этом материале рассказывает о своём опыте использования и приводит примеры.

👩‍💻 Код доступен на github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какими должны быть outlets, weak или всё-таки strong?

Должны ли outlets объявляться слабыми или сильными? Что произойдёт, если использовать weak? Какие здесь подводные камни?

Эти вопросы возникают довольно часто. И чтобы понять, что к чему, нам нужно знать, какие из объектов ссылаются на другие. А подсчет ссылок должен в этом помочь.

📖 В этом материале автор даёт ответ на этот вопрос, приводит аргументы и объясняет свои выводы.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание меню отладки в Swift с помощью UIContextMenuInteraction

Меню отладки в iOS — очень эффективный способ повысить продуктивность рабочего дня разработчика.

🔎 Если вы обнаружите, что выполняете одни и те же задачи отладки снова и снова (я вам уже говорил, что такое безумие), такие как вывод ответов серверной части, переход к определенным экранам или копирование айдишников пользователей, было бы неплохо иметь в своем приложении специальные меню разработчика, которые делали бы это автоматически.

Для этого может пригодиться UIContextMenuInteraction — API контекстного меню.

Он работает аналогично UIAlertController, но на него приятнее смотреть и, что самое важное, гораздо проще реализовать!

А начиная с iOS 14, мы даже можем добавить к нему нужные нам асинхронные действия с помощью UIDeferredMenuElement.

📖 В этом материале рассказывается о способе создания абстракции, которая реализует меню отладки для нужных нам вьюх в тестовых сборках.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Grand Central Dispatch: от определения к низкоуровневым примитивам

ℹ️ Вместо ручного создания потоков и их последующего контроля мы можем использовать абстрактные очереди и возложить на них всю ответственность по управлению потоками.

В серии статей ниже Alex Shchukin рассматривает основные понятия, как, например, очереди, как с ними работать, иссследует dispatch source и затрагивает DispatchIO (который не является супер популярным инструментом).

⭐️ Плюс статей в примерах, с помощью которых реализуются некоторые основные подходы, которые можно использовать в реальных приложениях.

А для самых любопытных Алекс расскажет, как реализовать примитивы GCD самостоятельно.

Материалы доступны здесь:

1️⃣ GCD: Очереди и методы.

2️⃣ DispatchWorkItem и Quality of Service (тот самый QoS).

3️⃣ DispatchGroup и concurrentPerform.

4️⃣ Синхронизация: семафоры, барьеры (и не только).

5️⃣ DispatchSource и Target Queue Hierarchy.

👨‍💻 Примитивы GCD в деталях — в этой статье автор использует низкоуровневые примитивы, чтобы разобраться, как на самом деле работает GCD.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Протоколы ошибок, о которых вы могли не знать: Localized​Error, Recoverable​Error, Custom​NSError

Несмотря на то, насколько мы все знакомы с Error, на удивление немногие из нас могут быть знакомы с другими протоколами ошибок, появившимися в SE-0112. Например, когда вы в последний раз сталкивались с LocalizedError в дикой природе? А что насчет RecoverableError?

Вы можете сказать, что эти протоколы действительно малоизвестны, и есть большая вероятность, что вы о них не слышали:

🔘 LocalizedError. Специализированная ошибка, предоставляющая локализованные сообщения с описанием ошибки и причиной ее возникновения.

🔘 RecoverableError. Специальная ошибка, которую можно исправить, предоставив пользователю несколько возможных вариантов восстановления.

🔘 CustomNSError. Специализированная ошибка, предоставляющая домен, код ошибки и user-info dictionary.

📖 В этом объёмном материале автор разбирает на примерах, что и когда лучше использовать.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
⌨️ А у нас интересный факт, посмотрите, как устроен эпловский календарь изнутри!

Довольно любопытное решение для оптимизации скролла, как верно заметил Иван в этом посте, при этом реализовано оно с помощью двуслойных картинок.

ℹ️ Кстати, в этом канале периодически выходят крутые разборы для, казалось бы, стандартных приложений.

Полезно посмотреть на то, как решают типовые проблемы инженеры яблочной компании, и как они, например:

1️⃣ В системном калькуляторе, сетку с кнопками расставили с помощью фреймов.

2️⃣ А вот тут можно прочесть про то, как устроено приложение App Store.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM