iOS Dev
رفتن به کانال در Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
نمایش بیشتر7 877
مشترکین
+124 ساعت
-17 روز
-5130 روز
آرشیو پست ها
7 877
Повторение эффекта конфетти из iMessage
Я люблю анимации в iOS и иногда ищу (или реализую сам), как именно инженеры реализуют те или иные вещи.
✅Например, целый раздел в ноушне я посвятил подборке клёвых эффектов и их реализации.
iMessage имеет одну из самых красивых реализаций конфетти на iOS.
Но как это работает?
Краткий ответ: недокументированная функциональность и недокументированная функциональность.
📖 Хорошо, что есть энтузиасты, как, например, Брайс Паукен, которые тратят свои силы на объяснение и показывают, как можно реализовать такие вещи.
🔗А вот и пример кода для реализации этого эффекта.
Кстати, если вы хотите больше примеров с современными технологиями, уделите внимание этому репозиторию от @eleev (и поддержите его звездами).
Если вам нравятся такие темы, то напомню, что есть способ поддержки канала.
😃 iOS Dev • 🐱 Узнать о важном
7 877
Бонус к релизу Swift: протоколы теперь могут быть вложены в перечисления, классы, структуры и акторы
На практике это означает, что протоколы могут быть размещены в определенном контексте, что совершенно точно повысит читабельность, поскольку им больше не нужно быть сложными определениями верхнего уровня.
📖 Ссылка на принятый пропозал.
😃 iOS Dev • 🐱 Узнать о важном
7 877
🎉 Swift 5.10 уже доступен!
В Swift 5.10 реализована полная изоляция данных.
Эта важная веха заняла годы активной разработки в течение многих релизов.
Модель параллелизма была представлена в Swift 5.5, включая
async/await, actors и структурированный параллелизм.
В Swift 5.7 был представлен Sendable как фундаментальная концепция для потокобезопасных типов, значения которых могут совместно использоваться в произвольных параллельных контекстах без риска возникновения гонок данных.
А теперь, в Swift 5.10, полная изоляция данных обеспечивается во время компиляции во всех областях языка, когда включена соответствующая опция.
Swift 5.10 будет выдавать предупреждения о гонках данных в некоторых случаях, когда код может быть признан безопасным с помощью дополнительного анализа компилятора.
📖 Больше изменений в официальном ченджлоге свифта здесь.
✅Узнать больше о Swift Concurrency и познакомиться с возможными кейсами вы можете здесь.
😃 iOS Dev • 🐱 Подпишись, чтобы узнать больше7 877
Task и structured concurrency в swift
Влад Яндола на хабре проделал монументальную работу и разобрал в серии статей инструменты и механизмы structured concurrency, преимущества по сравнению с GCD и привел несколько примеров.
Например, вы можете узнать, что такое иерархия тасок, какие могут быть тонкости при работе и многое другое.
1️⃣ Swift async/await. Чем он лучше GCD?
2️⃣ Swift async/await на примерах.
3️⃣ Task и structured concurrency в Swift.
✅Напоминаю, что в базе знаний уже есть огромный раздел по Swift Concurrency, в том числе с разбором подводных камней.
😃 iOS Dev • 🐱 Подпишись, чтобы узнать больше
7 877
Понятие Изоляции в Swift: определение и виды
Изоляцию можно назвать механизмом, который Swift использует для того, чтобы сделать гонки данных невозможными.
С помощью этого механизма компилятор понимает, как осуществляется доступ к данным и когда можно и нельзя делать это гарантированно безопасным способом.
Стоит также отметить, что речь идет именно о небезопасном доступе к изменяемому состоянию, но не обо всех видах гонок в целом.
Изоляция при этом может быть одной из следующих:
1️⃣ Статической.
2️⃣ Динамической.
3️⃣ Отсутствующей (или, если сказать по другому, без неё). По умолчанию как раз все не изолировано, и нам нужно предпринять явные действия, чтобы это изменить.
Типы акторов, глобальные акторы и изолированные параметры — все это формы статической изоляции.
Может случиться так, что система типов не описывает или не может описать фактически используемую изоляцию. Это регулярно случается с системами, реализованными до появления параллелизма.
Один из инструментов, который решает эту проблему — динамическая изоляция.
Это API, которые позволяют нам выразить изоляцию таким образом, что она не видна при простом просмотре определений.
✅В базе знаний я добавил расширенный материал не только с примерами изоляции, но и отличную подборку для работы с протоколами и параллелизмом.
😃 iOS Dev • 🐱 Подпишись, чтобы узнать больше
7 877
iOS IQ — обновление базы знаний
Практически целый месяц я собираю свои исследования, код, статьи и лучшие посты, включая неопубликованные в этом канале воедино.
За это время поддержали канал около 100 человек, и я получил потрясающие и приятные отзывы. Благодаря опросу в том числе.
Вот что вы там можете увидеть (и это только верхний уровень):
🏅Подборки лучших материалов для подготовки к собеседованиям.
🧠 Подготовка к собеседованиям (задачи, разбор полётов).
👨💻 Личная эффективность (советы, мысли, опыт).
🔨 Код. Правила и необычные подходы.
🔮 Важные моменты при разработке.
📓 Алгоритмическая секция (если вы хотите узнать, что такое мемоизация или разобраться, наконец, с поиском в ширину).
💎 Архитектуры (без фундамента не построить дом, а без архитектуры не реализовать масштабируемое приложение).
🏄 Реализация эффектов (от анимации Wallet до эффектов в приложении Messages или NameDrop).
✅ Пока что ещё есть места в премиум-ноушне, но и они заканчиваются.
🐱 Подпишись, чтобы узнать больше
7 877
❗️[UPDATE] Обновление Apple на счёт Privacy Manifests
🗓 С 13 марта: если загрузить в App Store Connect приложение с API, требующим причин использования, то разработчику будет отправлено соответствующее письмо.
Это будет дополнением к уведомлению в самом App Store Connect.
🗓 С 1 мая: Чтобы загрузить приложение в App Store Connect, будет необходимо указать причины использования перечисленных API, если они есть в коде.
Если причину найти не получится, то следует поискать альтернативу этому API.
Обязательно нужно использовать версию SDK, включающую манифест конфиденциальности, подписи также потребуются, когда SDK добавляется в качестве бинарной зависимости.
😃 iOS Dev
7 877
Работа с датами в Swift
Каждый раз, когда предстоит работа с датами, некоторые считают, что это приключение на 20 минут.
В свою очередь, я вспоминаю этот отрывок из замечательного фильма «Феномен», снятый ещё до момента, когда Траволта решил воспользоваться обликом Кейджа.
Сегодня я хотел бы напомнить, что если вы путаетесь в форматах, то есть прекрасный ресурс, а ещё шпаргалка!
📖 И, кстати, можно попробовать воспользоваться собственной стратегией кодирования и декодирования дат в Swift.
😃 iOS Dev • 🐱 Подпишись, чтобы узнать больше
7 877
Публикация iOS-фреймворка: SPM, CocoaPods, Carthage
Наверняка, многие создавали или планировали создать свои фреймворки.
Все на самом деле не так страшно, и у эпла, например, есть богатая документация на этот счёт.
📖 Но если нужна простая инструкция, то можно воспользоваться и этой статьёй.
✅Кстати, если вы думаете, какую архитектуру использовать, то для этого есть целый раздел.
😃 iOS Dev • 🐱 iOS IQ
7 877
Архитектура приложений
Архитектура включает в себя способы организации и структурирования кода, который и помогает корректно функционировать всему приложению.
Вполне корректно сравнить её с фундаментом (практически как при строительстве домов).
Прежде всего, при проектировании архитектуры в крупных проектах нужно уделять внимание потенциальному масштабированию.
Бывает, что вместо этого внимание сосредоточено на синтаксисе или узких моментах. Но ведь без удобной в поддержке архитектуры не может быть гибкого кода.
А ведь у нас ещё есть безопасность, кэширование, автономность (и всё это можно проектировать в глубину на несколько уровней).
Несмотря на это, бывают заблуждения, некорректные практики и ложные направления.
В новой секции в iOS IQ я разобрал несколько фундаментальных вещей, о которых не напишут в каналах и о чём нельзя узнать, не столкнувшись на практике.
И почему тащить сторонние либы почти никогда не хорошая идея.
✅Узнать больше можно здесь.
😃 iOS Dev • 🐱 iOS IQ
7 877
Metal в Swift: как писать шейдеры
Использование Metal — весьма сложное, но в то же время захватывающее занятие, если научиться использовать его мощь.
Материалов по нему всё ещё немного, а лучшие эффекты доступны в двух или трёх репозиториях (в будущем и здесь будет подборка).
Сегодня я делюсь с вами фундаментальным исследованием Джейкоба Бартлетта.
Он обещает помочь написать собственные шейдеры Metal и использовать их в своих приложениях.
Поскольку многие раньше не сталкивались с C++ или графическим кодом, бонусом будет доступное и лаконичное объяснение сложных моментов.
Часть I: Введение
🔘Что такое Metal?
🔘Почему Metal такой быстрый?
🔘Настройка проекта.
Часть II: Эффект цвета
🔘Настройка нашего View.
🔘Шаблон Metal.
🔘Наша первая шейдерная функция.
🔘Понимание цвета.
🔘Понимание позиции.
🔘Понимание геометрии.
🔘Понимание времени.
🔘Понимание колебаний.
🛠 Проект: Создание диско-лучей.
Часть III: Эффект искажения
🔘Понимание искажения.
🔘Понимание Source и Destination.
🛠 Проект: Создание волнистого текста.
Часть IV: Эффект слоя
🔘Понимание эффекта слоя.
🔘SwiftUI::Layer и Sampling.
🛠 Проект: Создание ретро-фильтра.
Часть V: Свободный полет
🔘Книга о шейдерах.
🔘Случайный шум.
🔘Шум Перлина.
Если вы не хотите ждать подборку репозиториев, то кроме неё есть ещё и несколько интересных моментов, которые я описал в iOS IQ.
✅Например, можно узнать, как использовать Metal в UIVIew.
😃 iOS Dev • 🐱 Разбор сертификатов
7 877
Что скрывают сертификаты для Code Signing?
Подписание кода является основополагающей технологией для всех платформ Apple.
Например, знаете ли вы, что provisioning profile объединяет пять критериев:
кто, что, где, когда и как.
Что касается вопроса «кто?», то в TN3125 описывается, как именно каждый профиль включает сертификат для каждого разработчика.
Но в нём нет подробного описания того, что такое сертификат.
Например, в реальном мире сертификат — это документ, в котором эмитент подтверждает некоторые факты о предмете.
Например, в свидетельстве о рождении:
🔘 Эмитентом является региональный орган регистрации.
🔘 Субъект (или же тема) — это вы.
🔘 Факты — это ваше имя, дата рождения, родители и так далее.
Эта система основана на том факте, что реальные сертификаты подделать непросто: они печатаются на красивой бумаге, используются специальные штампы, сургучные печати и так далее.
Цифровой сертификат преследует ту же цель, что и настоящий.
Однако он не может использовать красивую бумагу для предотвращения подделок, что логично.
Вместо этого цифровой сертификат основан на криптографии с открытым ключом.
Для подписи кода Apple используется стандарт цифровых сертификатов X.509.
Сертификат X.509 содержит пять частей информации:
🔘 Реквизиты эмитента.
🔘 Подробности темы.
🔘 Открытый ключ субъекта.
🔘 Обязательные факты, например действительный диапазон дат. 🔘 Необязательные факты, известные как расширения.
Эмитент подписывает эту информацию своим закрытым ключом, а затем объединяет ее в сертификат (более подробно - вот тут).
У себя я также разобрал понятия .der и .pem, цепочку доверия, Certificate signing request, что происходит при переподписывании кода в App Store, а также путаницу в экосистеме Apple.
😃 iOS Dev • 🐱 Разбор сертификатов7 877
Сегодня пятница, у многих выходной и я, надеюсь, что у вас будет две минуты свободного времени
Примерно раз в год я собираю обратную связь о своём канале и о том, что вам нравится или не нравится для того, чтобы прокачивать контент в правильном направлении.
К сожалению, за это время появилось множество тех, кто копирует материалы отсюда 1 в 1. Иногда удачно, иногда нет, но это касается не только подачи каких-то вещей, но и оформления канала.
Конечно, это ещё один повод искать правильные направления развития, но мне нужна ваша помощь.
🐾 Пройдите опрос (полностью анонимный) и помогите сделать выводы.
😃 iOS Dev • 🐱 Доступ к алгоритмам
7 877
Swift Enums 🤝 Дизайн-системы
Если вы работаете над крупными проектами, то наверняка встречали (или писали сами дизайн-системы).
По факту чаще всего это библиотека, которая объединяет дизайн в переиспользуемые компоненты, цвета, шрифты, иконки и так далее, помогая обеспечить единый стиль во всех ваших продуктах.
Или если ещё проще, они позволяют нам избежать изобретения велосипеда для каждого экрана.
Грамотно спроектированная дизайн-система сэкономит часы (или сотни часов в будущем).
📖 В этом материале Джейкоб Бартлетт рассказывает о своём опыте создани разных систем и объясняет, почему в итоге остановился на использовании перечислений.
🛠 А вот здесь можно посмотреть на код для этого проекта.
😃 iOS Dev • 🐱 Доступ к необычным эффектам
7 877
Алгоритмическая секция
Это страшный термин, который многих может остановить от попыток пройти серию собеседований в крупные компании.
Секция лайвкодинга это в том числе и психологическое испытание, непростое, но в то же время показывающее знания кандидата в необычных условиях.
К этому тяжело подготовиться, а ещё тяжелее конкурировать, ведь есть целая категория ребят, которые занимаются олимпиадным программированием ещё со школы (или даже раньше).
К счастью, чаще всего нам не нужно решать на работе олимпиадные задачи или участвовать в ICPC с целью выиграть золотые медали.
Несмотря на это, подготовка никогда не помешает, ведь даже чтобы обработать тысячи айдишников юзеров с заданным условием и не повесить приложуху, иногда нужно тщательно всё взвесить.
Поэтому я решил добавить в базу знаний алгоритмическую секцию, где будут не только популярные подходы и примеры алгоритмов на разные темы, но ещё и реальные задачи.
Я уже добавил несколько разделов, и перенёс часть своих решённых задач в ноушн.
✅Заходите, доступ пока что можно получить эксклюзивно здесь.
😃 iOS Dev
7 877
Как проверить число на чётность другим способом?
Представим, нам нужно красить ячейку в зависимости от индекса, или, например, менять шрифт у каждого чётного элемента (или ещё тысяча возможных ситуаций).
В таком случае мы, как и в большинстве языков, скорее всего будем использовать
i % 2 == 0 (стандартный способ проверять остаток от деления).
Но знаете ли вы, что для такой ситуации подойдёт и нативный вариант на Swift?
x.isMultiple(of: 2) вернёт true если x чётный и false, если x нечётный.
Кстати, в Apple рассмотрели и корнер-кейсы, например:
x.isMultiple(of: 0)вернёт true, если x это 0 и false в любом другом случае.
🤩 Век живи — век учись, как говорится.
🔗 Напоминаю, что больше таких примеров есть в моём бусти.
😃 iOS Dev7 877
Разбор ошибок начинающих iOS-разработчиков
Александра Башкирова указывает на несколько популярных ошибок начинающих iOS-разработчиков.
1️⃣ В первой части затронут раздел вёрстки и связанных с ней возможных проблем.
2️⃣ Во второй уделено внимание проблемам с написанием кода, в частности, избыточного форс-анрапа, работе с guard/switch и даже разбираются проблемы с утечками памяти (✅я писал о том, что к этому может приводить, и что можно предпринять).
📖 Статья, которую можно смело рекомендовать новичкам к прочтению доступна на хабре.
😃 iOS Dev
7 877
iOS IQ: Обновления и новости
Я продолжаю работать над базой знаний iOS и делюсь обновлением за выходные.
Прозводительность приложений (вопросы с собеседований на размышление)
Когда приложение реагирует на жесты и касания в режиме реального времени, всё хорошо. Но приложения с зависаниями или дёрганым поведением на экране разрушают эту иллюзию.
Что можно сделать, чтобы это не происходило? А если вы столкнулись, то как реагировать? Эта тема безгранична, и именно с этим мы боремся на работе над нашими задачами.
🚦Узнать о том, какие шаги можно предпринять, можно здесь.
Наконец появился блок по коду и непосредственно разработке
В части алгоритмов я вынес карточки с примерами кода в зависимости от сложности, и нарисовал наглядно графики для каждой.
Разобрал акронимы (все же знают их значение?): SOLID, DRY, KISS, YAGNI.
И добавил бонус с разбором алгоритма сортировки в Swift.
Подписывайтесь, я продолжаю разбирать важные темы и делиться своими знаниями (и важными исследованиями) вот тут.
7 877
Работа с вёрсткой в SwiftUI: интерактивный помощник
Оказывается, есть целый сайт, где энтузиасты объясняют как быть с лэйаутом в SwiftUI с помощью примеров.
Уже сейчас покрыты темы с
Alignment, HStacks, Aspect Ratio, Padding и так далее.
Будет полезен новичкам (и тем, кто иногда забывает, на что влияет тот или иной параметр).
💡Вообще, это было бы актуально не только для SwiftUI, но и для некоторых штук в UIKit, как с UIStackView, например.
📖 Посмотреть на доступные варианты (и поперетаскивать элементы) можно здесь.
😃 iOS Dev