iOS Dev
Kanalga Telegram’da o‘tish
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Ko'proq ko'rsatish8 002
Obunachilar
+424 soatlar
+477 kunlar
+8230 kunlar
Postlar arxiv
8 002
Что скрывают сертификаты для Code Signing?
Подписание кода является основополагающей технологией для всех платформ Apple.
Например, знаете ли вы, что provisioning profile объединяет пять критериев:
кто, что, где, когда и как.
Что касается вопроса «кто?», то в TN3125 описывается, как именно каждый профиль включает сертификат для каждого разработчика.
Но в нём нет подробного описания того, что такое сертификат.
Например, в реальном мире сертификат — это документ, в котором эмитент подтверждает некоторые факты о предмете.
Например, в свидетельстве о рождении:
🔘 Эмитентом является региональный орган регистрации.
🔘 Субъект (или же тема) — это вы.
🔘 Факты — это ваше имя, дата рождения, родители и так далее.
Эта система основана на том факте, что реальные сертификаты подделать непросто: они печатаются на красивой бумаге, используются специальные штампы, сургучные печати и так далее.
Цифровой сертификат преследует ту же цель, что и настоящий.
Однако он не может использовать красивую бумагу для предотвращения подделок, что логично.
Вместо этого цифровой сертификат основан на криптографии с открытым ключом.
Для подписи кода Apple используется стандарт цифровых сертификатов X.509.
Сертификат X.509 содержит пять частей информации:
🔘 Реквизиты эмитента.
🔘 Подробности темы.
🔘 Открытый ключ субъекта.
🔘 Обязательные факты, например действительный диапазон дат. 🔘 Необязательные факты, известные как расширения.
Эмитент подписывает эту информацию своим закрытым ключом, а затем объединяет ее в сертификат (более подробно - вот тут).
У себя я также разобрал понятия .der и .pem, цепочку доверия, Certificate signing request, что происходит при переподписывании кода в App Store, а также путаницу в экосистеме Apple.
😃 iOS Dev • 🐱 Разбор сертификатов8 002
Сегодня пятница, у многих выходной и я, надеюсь, что у вас будет две минуты свободного времени
Примерно раз в год я собираю обратную связь о своём канале и о том, что вам нравится или не нравится для того, чтобы прокачивать контент в правильном направлении.
К сожалению, за это время появилось множество тех, кто копирует материалы отсюда 1 в 1. Иногда удачно, иногда нет, но это касается не только подачи каких-то вещей, но и оформления канала.
Конечно, это ещё один повод искать правильные направления развития, но мне нужна ваша помощь.
🐾 Пройдите опрос (полностью анонимный) и помогите сделать выводы.
😃 iOS Dev • 🐱 Доступ к алгоритмам
8 002
Swift Enums 🤝 Дизайн-системы
Если вы работаете над крупными проектами, то наверняка встречали (или писали сами дизайн-системы).
По факту чаще всего это библиотека, которая объединяет дизайн в переиспользуемые компоненты, цвета, шрифты, иконки и так далее, помогая обеспечить единый стиль во всех ваших продуктах.
Или если ещё проще, они позволяют нам избежать изобретения велосипеда для каждого экрана.
Грамотно спроектированная дизайн-система сэкономит часы (или сотни часов в будущем).
📖 В этом материале Джейкоб Бартлетт рассказывает о своём опыте создани разных систем и объясняет, почему в итоге остановился на использовании перечислений.
🛠 А вот здесь можно посмотреть на код для этого проекта.
😃 iOS Dev • 🐱 Доступ к необычным эффектам
8 002
Алгоритмическая секция
Это страшный термин, который многих может остановить от попыток пройти серию собеседований в крупные компании.
Секция лайвкодинга это в том числе и психологическое испытание, непростое, но в то же время показывающее знания кандидата в необычных условиях.
К этому тяжело подготовиться, а ещё тяжелее конкурировать, ведь есть целая категория ребят, которые занимаются олимпиадным программированием ещё со школы (или даже раньше).
К счастью, чаще всего нам не нужно решать на работе олимпиадные задачи или участвовать в ICPC с целью выиграть золотые медали.
Несмотря на это, подготовка никогда не помешает, ведь даже чтобы обработать тысячи айдишников юзеров с заданным условием и не повесить приложуху, иногда нужно тщательно всё взвесить.
Поэтому я решил добавить в базу знаний алгоритмическую секцию, где будут не только популярные подходы и примеры алгоритмов на разные темы, но ещё и реальные задачи.
Я уже добавил несколько разделов, и перенёс часть своих решённых задач в ноушн.
✅Заходите, доступ пока что можно получить эксклюзивно здесь.
😃 iOS Dev
8 002
Как проверить число на чётность другим способом?
Представим, нам нужно красить ячейку в зависимости от индекса, или, например, менять шрифт у каждого чётного элемента (или ещё тысяча возможных ситуаций).
В таком случае мы, как и в большинстве языков, скорее всего будем использовать
i % 2 == 0 (стандартный способ проверять остаток от деления).
Но знаете ли вы, что для такой ситуации подойдёт и нативный вариант на Swift?
x.isMultiple(of: 2) вернёт true если x чётный и false, если x нечётный.
Кстати, в Apple рассмотрели и корнер-кейсы, например:
x.isMultiple(of: 0)вернёт true, если x это 0 и false в любом другом случае.
🤩 Век живи — век учись, как говорится.
🔗 Напоминаю, что больше таких примеров есть в моём бусти.
😃 iOS Dev8 002
Разбор ошибок начинающих iOS-разработчиков
Александра Башкирова указывает на несколько популярных ошибок начинающих iOS-разработчиков.
1️⃣ В первой части затронут раздел вёрстки и связанных с ней возможных проблем.
2️⃣ Во второй уделено внимание проблемам с написанием кода, в частности, избыточного форс-анрапа, работе с guard/switch и даже разбираются проблемы с утечками памяти (✅я писал о том, что к этому может приводить, и что можно предпринять).
📖 Статья, которую можно смело рекомендовать новичкам к прочтению доступна на хабре.
😃 iOS Dev
8 002
iOS IQ: Обновления и новости
Я продолжаю работать над базой знаний iOS и делюсь обновлением за выходные.
Прозводительность приложений (вопросы с собеседований на размышление)
Когда приложение реагирует на жесты и касания в режиме реального времени, всё хорошо. Но приложения с зависаниями или дёрганым поведением на экране разрушают эту иллюзию.
Что можно сделать, чтобы это не происходило? А если вы столкнулись, то как реагировать? Эта тема безгранична, и именно с этим мы боремся на работе над нашими задачами.
🚦Узнать о том, какие шаги можно предпринять, можно здесь.
Наконец появился блок по коду и непосредственно разработке
В части алгоритмов я вынес карточки с примерами кода в зависимости от сложности, и нарисовал наглядно графики для каждой.
Разобрал акронимы (все же знают их значение?): SOLID, DRY, KISS, YAGNI.
И добавил бонус с разбором алгоритма сортировки в Swift.
Подписывайтесь, я продолжаю разбирать важные темы и делиться своими знаниями (и важными исследованиями) вот тут.
8 002
Работа с вёрсткой в SwiftUI: интерактивный помощник
Оказывается, есть целый сайт, где энтузиасты объясняют как быть с лэйаутом в SwiftUI с помощью примеров.
Уже сейчас покрыты темы с
Alignment, HStacks, Aspect Ratio, Padding и так далее.
Будет полезен новичкам (и тем, кто иногда забывает, на что влияет тот или иной параметр).
💡Вообще, это было бы актуально не только для SwiftUI, но и для некоторых штук в UIKit, как с UIStackView, например.
📖 Посмотреть на доступные варианты (и поперетаскивать элементы) можно здесь.
😃 iOS Dev8 002
Подготовка к собеседованиям
Любое собеседование — это важный этап, который должен быть диалогом между кандидатом и собеседующим.
Для кандидата, конечно же, это стресс. Но его можно попробовать сделать управляемым.
Всегда плюс, когда человек может пояснить, почему он принимает то или иное решение, почему выбирает вот эту архитектуру и как именно некоторые участки кода могут повлиять на производительность.
Мы не можем подготовиться к собеседованию на 100%, у каждой компании свои требования и правила.
У многих может быть и 3 (и иногда 6-7 этапов), но при должной концентрации и грамотном распределении сил вы сможете показать ваш пул знаний, даже не ответив на все заданные вопросы.
🧠 Сегодня я анонсирую новый раздел в для тех, кто поддерживает канал.
На хабре пару лет назад я делился одним из возможных пулов вопросов, сегодня этот раздел будет дополнен, расширен, но до окончательной огранки ему пока далеко.
Здесь уже есть три основных категории: собесы в формате видео (лучшее на просторах интернета), истории реальных собеседований в бигтехе и огромный список ресурсов для подготовки.
🔗 Получить доступ ко всем ресурсам можно здесь.
😃 iOS Dev
8 002
Разбор архитектурных заблуждений в iOS
Алексей, iOS-разработчик из тинькова, поднял восхитительно опасную, но при этом не менее интересную тему.
Вот несколько тезисов, с которыми лично сложно не согласиться:
1️⃣ С точки зрения коммерческой разработки наилучшая архитектура — та, что максимально снижает затраты на разработку в долгосрочной перспективе.
Этого подхода я стараюсь придерживаться и в нашей команде. MVC, MVVM, VIPER — это архитектурные шаблоны (больше вот тут). Часто одного шаблона попросту недостаточно.
Например, сететой слой, пуши или как говорит Алексей, обработка диплинков - MVC-подобные паттерны про это не сообщают.
2️⃣ Разработка — это не только написание кода.
Мы создаём код, но его чтение, понимание, а также процессы в команде — занимают львиную долю времени.
3️⃣ В UI логику не держим или?
С выходом AsyncImage сама Apple показала, что можно доверить загрузку картинок и UI-слою.
4️⃣ Вывод: при планировании архитектуры больше внимания стоит уделять не простоте написания, а простоте чтения кода и внесения изменений.
Меня радует, что даже в крупных командах (около 80 человек) не пытаются писать код ради кода.
Наша задача — решать сложные вопросы с помощью программирования, но помните, что слишком много оптимизации на ранних стадиях — может оказаться не лучшим способом.
Будет здорово, если ещё кто-то прочитает про правило трёх.
📖 Обсуждение статьи.
✅А о правиле трёх (и других моментах) можно прочесть в моём закрытом ноушне.
😃 iOS Dev
8 002
Спасибо всем, кто подписался на бусти всего за один день, это отличный катализатор к развитию премиум-материалов в лучшем доступном виде.
При работе над своими рабочим проектом и контентом для канала за годы у меня накопилось огромное количество материала, которым я так и не поделился здесь.
Иногда это слишком узкие знания, иногда мне кажется, что порог входа может быть выше ожидаемого. Так или иначе, но знания должны быть структурированы.
За прошедший месяц я начал наполнять свой отдельный Notion избранными исследованиями, подборками и самым разным контентом. Кроме этого, пообщавшись со Львом, выяснил, что Notion — формат, которым пользуются и другие блогеры.
Поэтому решение выглядит верным.
Я уже разбил структуру на блоки, которые мне кажутся важными: подготовка к собеседованиям, разбор полётов (узкие, но при этом необходимые темы для роста, и даже выделил отдельную подборку для эффектов).
Кто читает канал давно, тот знает, что иногда я реализую клёвые штуки (c загадками Да Винчи).
☕️ Пока что подписка по стоимости захода в кофейню.
А в качестве бонуса всем, кто подпишется хотя бы на 6 месяцев на Мастер, доступ будет навсегда (а может и не только им, кто знает).
😃 iOS Dev
8 002
Как сделать сompletionHandler намного безопаснее?
Прежде, чем посмотреть на результат исследования, взгляните на первый скриншот, и подумайте, что здесь можно сделать лучше.
📖 Винсент справедливо отмечает, что при использовании оператора defer гарантированно вызовется completionHandler непосредственно в конце функции.
И именно поэтому возможно юзать result, поскольку к тому времени у него 100% будет значение.
😃 iOS Dev
8 002
📌 Важная новость
На протяжении долгого времени в нашем канале я делился самыми разными вещами (и хардкорными, и доступными для новичков).
Каждый автор контента знает, что если разбираться в коде (а я не допускал ни одного поста без предварительной проверки), требуется приличное количество времени, которого не так уж и много. Особенно при условии, что вы фулл-тайм разработчик.
Включал викторины, уникальные истории и старался рассказать о новостях, используя призму своего опыта.
В этом канале не было какой-то странной или непонятной рекламы (а вещей, которым я не доверяю, всё также не будет в дальнейшем).
При этом периодически у меня спрашивают, можно ли как-то поблагодарить за контент или поддержать творчество.
Отвечу сразу на эти вопросы: теперь такая возможность есть.
🐱 Сегодня я анонсирую iOS IQ, мой аккаунт на бусти — концентрированные знания в доступном виде.
И, поскольку я не люблю донаты ради донатов, а при этом постоянно поддерживаю разработчиков советами и решением нетривиальных задач, это это будет регулярно обновляемый контент с понятными ответами на сложные вещи.
Я долго думал об уровнях поддержки, но остановился на трёх: База, Мастер и Архитектор.
Каждый из них обладает своими плюсами, но даже начального будет достаточно.
Если вам нравится контент канала, вам удобен такой стиль изложения и вы хотели бы расставить точки над i в понятии iOS, то я буду рад каждому.
А ещё небольшой бонус, каждому из тех, кто меня поддержит — будет доступна возможность комментирования постов в канале iOS Dev.
Уже сегодня.
Авторов с практическим опытом не так много, а контента — ещё меньше.
Поэтому приходите, и получайте контент в удобном для вас виде. И кстати, если пока не готовы поддержать творчество финансово, подписывайтесь всё равно.
❤️❤️❤️❤️❤️➡️На бусти.
Уверен, что смогу вас удивить.
😃 iOS Dev
8 002
📌 Подборка полезных материалов про SwiftData
По использованию SwiftData уже появилось множество статей и примеров использования, поэтому я решил вынести некоторые из них в специальный список, с помощью которого можно ориентироваться по многим интересующим вопросам.
➡️Отслеживание изменений данных в SwiftData.
➡️Архитектурный дизайн SwiftData и возможности миграции.
➡️Вопросы и ответы про SwiftData и CoreData.
➡️ Удаление данных в SwiftData.
Видео и обзорные туториалы
📺 Видеокурс по SwiftData.
📺 Официальное видео от Apple с примером использования.
📖 Кто ты, SwiftData — большая статья с обзором концепций SwiftData от Андрея Зонова на хабре.
📖 SwiftData на примерах (создание проекта, контейнеров, моделей данных и связей, разбор архитектуры).
📖 Руководство по SwiftData для начинающих.
Практические примеры
🛠 Пример реализации todo-приложения на github.
🛠 FaceFacts - приложение, используюещее SwiftUI и SwiftData с исходным кодом.
🛠 Приложение для коллекционирования сниппетов кода.
🛠 Создаём приложение для заметок.
😃 iOS Dev
8 002
Гибкая обработка ошибок в Swift
Полезно знать несколько способов обработки, чтобы выбрать лучший подход в зависимости от контекста приложения.
📖 Вот тут можно познакомиться с типами, ключевыми словами и вариантами обработки кастомных ошибок.
😃 iOS Dev
8 002
Делегирование в Swift: определение и примеры
Паттерн «делегат» уже давно занимает одно из важнейших мест на платформах Apple.
Делегирование используется для всего, начиная от обработки событий таблицы с помощью
UITableViewDelegate и заканчивая изменением поведения кэша с помощью NSCacheDelegate.
Основная цель паттерна — позволить объекту общаться со своим владельцем в свободном (можно сказать, что отсоединённом) виде.
Не требуя от объекта знать конкретный тип его владельца, мы можем писать код, который гораздо проще повторно использовать и поддерживать.
Хотя это довольно простая в использовании концепция, у новичков могут быть вопросы по использованию.
📖 Рекомендую ознакомиться с этой статьёй, чтобы узнать больше о примерах использования (и возможных минусах).
😃 iOS Dev
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
