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

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

#ios #mobile #swift
加入频道
Разбор ошибок начинающих iOS-разработчиков

Александра Башкирова указывает на несколько популярных ошибок начинающих iOS-разработчиков.

1️⃣ В первой части затронут раздел вёрстки и связанных с ней возможных проблем.

2️⃣ Во второй уделено внимание проблемам с написанием кода, в частности, избыточного форс-анрапа, работе с guard/switch и даже разбираются проблемы с утечками памяти (я писал о том, что к этому может приводить, и что можно предпринять).

📖 Статья, которую можно смело рекомендовать новичкам к прочтению доступна на хабре.

😃 iOS Dev🐱 Доступ к алгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
👍179🔥31👏1🎉1💯1🏆1
Как проверить число на чётность другим способом?

Представим, нам нужно красить ячейку в зависимости от индекса, или, например, менять шрифт у каждого чётного элемента (или ещё тысяча возможных ситуаций).

В таком случае мы, как и в большинстве языков, скорее всего будем использовать i % 2 == 0 (стандартный способ проверять остаток от деления).

Но знаете ли вы, что для такой ситуации подойдёт и нативный вариант на Swift?

x.isMultiple(of: 2) вернёт true если x чётный и false, если x нечётный.

Кстати, в Apple рассмотрели и корнер-кейсы, например:

x.isMultiple(of: 0)вернёт true, если x это 0 и false в любом другом случае.

🤩 Век живи — век учись, как говорится.

😃 iOS Dev🐱 Доступ к алгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
37👍11🔥54🏆211👏1💯1
Алгоритмическая секция

Это страшный термин, который многих может остановить от попыток пройти серию собеседований в крупные компании.

Секция лайвкодинга это в том числе и психологическое испытание, непростое, но в то же время показывающее знания кандидата в необычных условиях.

К этому тяжело подготовиться, а ещё тяжелее конкурировать, ведь есть целая категория ребят, которые занимаются олимпиадным программированием ещё со школы (или даже раньше).

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

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

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

Я уже добавил несколько разделов, и перенёс часть своих решённых задач в ноушн.

Заходите, доступ пока что можно получить эксклюзивно здесь.

😃 iOS Dev🐱 Доступ к алгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥6👍3🏆21💯1🎅11
Swift Enums 🤝 Дизайн-системы

Если вы работаете над крупными проектами, то наверняка встречали (или писали сами дизайн-системы).

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

Или если ещё проще, они позволяют нам избежать изобретения велосипеда для каждого экрана.

Грамотно спроектированная дизайн-система сэкономит часы (или сотни часов в будущем).

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

🛠 А вот здесь можно посмотреть на код для этого проекта.

😃 iOS Dev🐱 Доступ к необычным эффектам
Please open Telegram to view this post
VIEW IN TELEGRAM
18👍8🔥5💯4❤‍🔥1👌1🏆111
Сегодня пятница, у многих выходной и я, надеюсь, что у вас будет две минуты свободного времени

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

К сожалению, за это время появилось множество тех, кто копирует материалы отсюда 1 в 1. Иногда удачно, иногда нет, но это касается не только подачи каких-то вещей, но и оформления канала.

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

🐾 Пройдите опрос (полностью анонимный) и помогите сделать выводы.

😃 iOS Dev🐱 Доступ к алгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
24💯5🔥3🎅21👍1🎉1🙏1🏆11
Что скрывают сертификаты для Code Signing?

Подписание кода является основополагающей технологией для всех платформ Apple.

Например, знаете ли вы, что provisioning profile объединяет пять критериев: кто, что, где, когда и как.

Что касается вопроса «кто?», то в TN3125 описывается, как именно каждый профиль включает сертификат для каждого разработчика.

Но в нём нет подробного описания того, что такое сертификат.

Например, в реальном мире сертификат — это документ, в котором эмитент подтверждает некоторые факты о предмете.
Например, в свидетельстве о рождении:

🔘 Эмитентом является региональный орган регистрации.

🔘 Субъект (или же тема) — это вы.

🔘 Факты — это ваше имя, дата рождения, родители и так далее.

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

Цифровой сертификат преследует ту же цель, что и настоящий.

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

Вместо этого цифровой сертификат основан на криптографии с открытым ключом.

Для подписи кода Apple используется стандарт цифровых сертификатов X.509.

Сертификат X.509 содержит пять частей информации:

🔘 Реквизиты эмитента.
🔘 Подробности темы.
🔘 Открытый ключ субъекта.
🔘 Обязательные факты, например действительный диапазон дат.
🔘 Необязательные факты, известные как расширения.

Эмитент подписывает эту информацию своим закрытым ключом, а затем объединяет ее в сертификат (более подробно - вот тут).

У себя я также разобрал понятия .der и .pem, цепочку доверия, Certificate signing request, что происходит при переподписывании кода в App Store, а также путаницу в экосистеме Apple.

😃 iOS Dev🐱 Разбор сертификатов
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥13👍3💯2🏆2🎉1🙏1
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🐱 Разбор сертификатов
Please open Telegram to view this post
VIEW IN TELEGRAM
41🔥12👍4👏2🏆2❤‍🔥11💯11
Архитектура приложений

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

Вполне корректно сравнить её с фундаментом (практически как при строительстве домов).

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

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

А ведь у нас ещё есть безопасность, кэширование, автономность (и всё это можно проектировать в глубину на несколько уровней).

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

В новой секции в iOS IQ я разобрал несколько фундаментальных вещей, о которых не напишут в каналах и о чём нельзя узнать, не столкнувшись на практике.

И почему тащить сторонние либы почти никогда не хорошая идея.

Узнать больше можно здесь.

😃 iOS Dev🐱 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍8👏3🎉21🔥1🤩1💯1🏆1🎄1🆒1
Публикация iOS-фреймворка: SPM, CocoaPods, Carthage

Наверняка, многие создавали или планировали создать свои фреймворки.

Все на самом деле не так страшно, и у эпла, например, есть богатая документация на этот счёт.

📖 Но если нужна простая инструкция, то можно воспользоваться и этой статьёй.

Кстати, если вы думаете, какую архитектуру использовать, то для этого есть целый раздел.

😃 iOS Dev🐱 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍7🏆41🔥1👏11
This media is not supported in your browser
VIEW IN TELEGRAM
Работа с датами в Swift

Каждый раз, когда предстоит работа с датами, некоторые считают, что это приключение на 20 минут.

В свою очередь, я вспоминаю этот отрывок из замечательного фильма «Феномен», снятый ещё до момента, когда Траволта решил воспользоваться обликом Кейджа.

Сегодня я хотел бы напомнить, что если вы путаетесь в форматах, то есть прекрасный ресурс, а ещё шпаргалка!

📖 И, кстати, можно попробовать воспользоваться собственной стратегией кодирования и декодирования дат в Swift.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
24👏8🔥6💯5😎4👍2🏆2
❗️[UPDATE] Обновление Apple на счёт Privacy Manifests

🗓 С 13 марта: если загрузить в App Store Connect приложение с API, требующим причин использования, то разработчику будет отправлено соответствующее письмо.

Это будет дополнением к уведомлению в самом App Store Connect.

🗓 С 1 мая: Чтобы загрузить приложение в App Store Connect, будет необходимо указать причины использования перечисленных API, если они есть в коде.
Если причину найти не получится, то следует поискать альтернативу этому API.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1310👍74🤯21👌1💯1🏆1
iOS IQ — обновление базы знаний

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

За это время поддержали канал около 100 человек, и я получил потрясающие и приятные отзывы. Благодаря опросу в том числе.

Вот что вы там можете увидеть (и это только верхний уровень):

🏅Подборки лучших материалов для подготовки к собеседованиям.
🧠 Подготовка к собеседованиям (задачи, разбор полётов).
👨‍💻 Личная эффективность (советы, мысли, опыт).
🔨 Код. Правила и необычные подходы.
🔮 Важные моменты при разработке.
📓 Алгоритмическая секция (если вы хотите узнать, что такое мемоизация или разобраться, наконец, с поиском в ширину).
💎 Архитектуры (без фундамента не построить дом, а без архитектуры не реализовать масштабируемое приложение).
🏄 Реализация эффектов (от анимации Wallet до эффектов в приложении Messages или NameDrop).

Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥6👍3🤯3💯2🏆2🎄2👏1🎉1
Понятие Изоляции в Swift: определение и виды

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

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

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

Изоляция при этом может быть одной из следующих:

1️⃣ Статической.

2️⃣ Динамической.

3️⃣ Отсутствующей (или, если сказать по другому, без неё). По умолчанию как раз все не изолировано, и нам нужно предпринять явные действия, чтобы это изменить.

Типы акторов, глобальные акторы и изолированные параметры — все это формы статической изоляции.

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

Один из инструментов, который решает эту проблему — динамическая изоляция.

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

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

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🔥4💯4🏆3👏1🎉111
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🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍10🔥54💯4🆒22🎉1🏆1🎄1
🎉 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🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
26🔥13👍643🎉2🏆2❤‍🔥1👏1👌1
iOS Dev
🎉 Swift 5.10 уже доступен! В Swift 5.10 реализована полная изоляция данных. Эта важная веха заняла годы активной разработки в течение многих релизов. Модель параллелизма была представлена в Swift 5.5, включая async/await, actors и структурированный параллелизм.…
Бонус к релизу Swift: протоколы теперь могут быть вложены в перечисления, классы, структуры и акторы

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

📖 Ссылка на принятый пропозал.

😃 iOS Dev🐱 Узнать о важном
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥211262👏2🎉2💯2👌1🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
Повторение эффекта конфетти из iMessage

Я люблю анимации в iOS и иногда ищу (или реализую сам), как именно инженеры реализуют те или иные вещи.

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

iMessage имеет одну из самых красивых реализаций конфетти на iOS.

Но как это работает?

Краткий ответ: недокументированная функциональность и недокументированная функциональность.

📖 Хорошо, что есть энтузиасты, как, например, Брайс Паукен, которые тратят свои силы на объяснение и показывают, как можно реализовать такие вещи.

🔗А вот и пример кода для реализации этого эффекта.

Если вам нравятся такие темы, то напомню, что есть способ поддержки канала.

😃 iOS Dev🐱 Узнать о важном
Please open Telegram to view this post
VIEW IN TELEGRAM
28🔥8🎉5👍42👏1🙏1💯1🎅11
This media is not supported in your browser
VIEW IN TELEGRAM
Поздравляю всех девушек с праздником!

Хотя красота и страшная сила, но она нужна для того, чтобы спасать мир.

В мире IT много талантливых женщин, и пусть большинство вспомнит Аду Лавлейс, я хотел бы рассказать пару фактов о Грейс Хоппер.

Она была одной из первых, кто писал программы для гарвардского компьютера Марк I, развила концепцию машинно-независимых языков программирования, что привело к созданию Кобола.

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

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

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

🌷С праздником!

📖 А вот тут есть несложный гайд по анимации UIBezierPath.

😃 iOS Dev🐱 Больше эффектов!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥45👍105🔥44🎉2💯2🏆22🤩1
Массивы в Swift: стартовые и продвинутые техники

Среди отзывов к базе знаний читатели просили рассмотреть не только хардкорные вещи, но и более базовые.

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

Кстати, это будет полезно не только новичкам, например, вы можете ещё узнать больше об ArraySlice и, например, рассмотреть использование метода elementsEqual(_:).

Уже сейчас можно почитать следующие темы:

1️⃣ Введение.
2️⃣ Проверка границ массива.
3️⃣ Методы удаления последнего элемента.
4️⃣ Разбор базовых техник.
5️⃣ ArraySlice и его особенности.
6️⃣ Различные способы сортировки.
7️⃣ 23 стратегии использования массивов.

➡️Получить доступ можно здесь.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥6👍5🏆21👏1🎉1💯1
Бинарные деревья и очереди с приоритетом в Swift

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

За основу взята книга: «Алгоритмы и структуры данных» Марчелло Ла Рокка.

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

2️⃣ Во втором блоке демонстрируется swift-код для реализации очереди с приоритетом. API полагается на две внутренние функции (bubbleUp и pushDown), чтобы вернуть очередь в приоритетный порядок после выполнения операции.

🐱 Напомню, что в бусти есть специальный раздел 📓 Алгоритмическая секция, в котором я рассматриваю разные подходы к решению задач, в том числе и на реальных примерах.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5🔥5🤩2🎄2👏1🎉1🏆11
🥳 Приложения для iOS можно будет скачивать с сайтов напрямую

Apple анонсировали эту новость сегодня.

Благодаря функции Web Distribution, разработчики смогут распространять свои приложения для iOS среди пользователей ЕС непосредственно со своих веб-сайтов

Это будет реализовано с помощью специального доступа к API (подробнее на официальном сайте).

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥17🤯7💯53🎉221🏆1