iOS Dev
Open in Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Show more7 878
Subscribers
+324 hours
-27 days
-4630 days
Posts Archive
7 878
Как изменить стандартный заголовок при создании файлов в Xcode?
📖 Написал руководство, которое даст ответ на этот вопрос.
@iOS Dev
7 878
#IOS #Senior #relocation #vacancy
Senior IOS разработчик
Работодатель: Mimesis inc
Город: Ереван, Армения или удаленно
Опыт: от 4,5 лет
Stack: iOS 14+; Swift 5.5; MVC/MVVM; Combine; UiKit; Navigation: Coordinators
График: полная занятость
Вилка: от $4500 до $6000
Продукты с которыми предстоит работать:
• Nufa: Body Photo Editor
• AI Fitness
• Virtual Dressing Room (через ML технологии GAN)
Задачи:
• Интеграция подхода Deep link
• Миграция алгоритмов ML в устрйоство
• "Оживление" приложения. Кастомная анимация.
• Сильная оптимизация ресурсозатратности приложения.
• CDD
• Crashtracking
Рабочие обязанности:
• Разработка iOS-приложения;
• Поддержание и создание эффективных методов разработки;
• Сохранение кода в чистоте и покрытие юнит-тестами;
• Устранить проблемы, связанные с развитием, изучить узкие места и эффективность;
• RESTful взаимодействие сервисов;
Релокация: предлагаем релокацию в Ереван, сопровождаем в открытии ИП и счета в местном банке.
В будущем возможна релокация в Тайланд или Польшу.
Контакт для связи: @allagmk
7 878
Доступность в iOS — определение и примеры
Из этого руководства по специальным возможностям iOS вы узнаете, как сделать приложения более доступными
📖 С помощью этого материала вы измените существующее приложение, чтобы сделать его более доступным для людей с ограниченными возможностями зрения.
В процессе вы пройдёте следующие основные этапы и узнаете как:
⚪ Использовать VoiceOver.
⚪ Проверять свое приложение с помощью Accessibility Inspector.
⚪ Внедрять элементы доступности с помощью UIKit.
⚪ Создавать положительный пользовательский опыт для людей с ограниченными возможностями.
@iOS Dev
7 878
Что означает EXC_BAD_ACCESS?
Вероятнее всего, однажды вы столкнетесь (а скорее всего, уже сталкивались) с крашем, вызванным EXC_BAD_ACCESS. Так что же это на самом деле?
Всякий раз, когда вы встречаете EXC_BAD_ACCESS, это означает, что вы отправляете сообщение объекту, который уже был освобожден. Это самый распространенный сценарий, но есть и другие.
🧑💻Техническое объяснение сложнее
В нашей работе мы постоянно имеем дело с указателями.
ℹ️ Указатель — это не что иное, как переменная, в которой хранится адрес памяти другой переменной.
Когда вы отправляете сообщение объекту, указатель, который указывает на объект, которому вы отправляете сообщение, должен быть разыменован (dereferenced). Это означает, что вы берете адрес памяти, на который указывает указатель, и получаете доступ к значению этого блока памяти.
Когда этот блок памяти больше не задействован для вашего приложения или, другими словами, этот блок памяти не используется для того, для чего вы думаете, доступ к этому участку (фрагменту) памяти больше невозможен.
Когда это происходит, ядро отправляет исключение (EXC), указывающее, что ваше приложение не может получить доступ к этому блоку памяти (тот самый BAD_ACCESS).
Таким образом, когда вы сталкиваетесь с EXC_BAD_ACCESS, это означает, что вы пытаетесь отправить сообщение в блок памяти, который не может выполнить это сообщение.
Однако в некоторых случаях EXC_BAD_ACCESS вызван поврежденным указателем. Всякий раз, когда ваше приложение пытается разыменовать поврежденный указатель, ядро выдаёт исключение.
Основные причины для EXC_BAD_ACCESS
⚪ Использование памяти, которая была освобождена.
⚪ Попытка записи за конец массива или буфера другого типа.
⚪ Использование указателя, который не был инициализирован.
Что почитать на эту тему?
1️⃣ Debugging EXC_BAD_ACCESS
2️⃣ EXC_BAD_ACCESS crash error: Understanding and solving it
@iOS Dev — о том, что мы иногда можем встретить
7 878
Повторяем красоту с помощью эффекта увеличения в SwiftUI на практике!
Если помните этот пост, то скорее всего вы задумывались о способах реализации.
📺 Время пришло! Для этого появился туториал.
😉 А для ленивых я даже сделал секретный gist (только для читателей нашего канала).
@iOS Dev — делюсь реализацией крутых эффектов
7 878
Что такое Thread Sanitizer и при чём тут гонки данных в Swift?
Thread Sanitizer, также известный как TSan — это инструмент на базе LLVM для изучения проблем с потоками в вашем коде, написанном на языках Swift и C. Он был впервые представлен в Xcode 8 и может стать отличным инструментом для поиска менее заметных ошибок в коде, например, гонок данных.
📖 Автор этой статьи делится, как Thread Sanitizer помог решить проблемы с нестабильными тестами и странными сбоями, в которых не получалось точно определить причину.
Возможно, вы не использовали TSan раньше, поскольку может быть немного непонятно, что делает этот инструмент и как он работает.
В материале затрагиваются важные темы:
⚪ Что такое гонки данных (data races).
⚪ Примеры гонки данных в Swift.
⚪ Использование Thread Sanitizer для обнаружения гонок данных.
⚪ Ограничения для Thread Sanitizer.
⚪ Подходы к решению гонки данных. Также стоит обратить внимание на эту статью и этот пост.
@iOS Dev
7 878
Разница между Thread.sleep() и Task.sleep()
Сделал наглядную табличку для предыдущего поста, примеры можно посмотреть здесь
@iOS Dev
7 878
Что представляет собой процесс собеседования в Netflix?
Джорданна Квок поделилась опытом управления командой мобильных разработчиков в Netflix в интервью Полу Хадсону, о принципах найма и о многом другом
✍️ Ниже основные тезисы из интервью на случай, если вы решитесь попытать свои силы:
🟢 В команде Джорданны в Netflix не задают вопросов с LeetCode, и в целом на собеседовании стараются избегать головоломок, анализа сложности и т. д. Причина в том, что они не используют это в повседневной работе.
Зато можно спросить, что такое коллекции? Что представляет собой многопоточность? Вам нужно загрузить, я не знаю, 10 изображений — как вы убедитесь, что они правильно закэшированы? Такие вещи представляют собой настоящие проблемы, с которыми все инженеры будут сталкиваться изо дня в день в Netflix, поэтому именно такие вопросы мы будем задавать на большинстве технических собеседований.
GCD, управление памятью и тому подобное, в целом основы iOS — то, что хотелось бы услышать от кандидатов.
🟢 Намного полезнее тестовое задание. Так как оно лучше отразит, что вы на самом деле испытаете на рабочем месте. Потому что вы получите открытый вопрос, например, «создать приложение, которое что-то делает».
🟢 Даже если что-то не получается, мы делаем все возможное, чтобы дать обратную связь.
🟢 Мы нанимали людей на их второе или третье собеседование, поэтому я просто хочу сказать, что это не значит, что если вы не прошли в первый раз, это не значит, что вы не получите роль в будущем.
Терпение и труд всё перетрут?
Что я думаю об этом?
Те процессы, о которых рассказала Джордана, выглядят более чем разумными. Особенно интересна позиция про алгоритмические секции, хотя Netflix и входит в тот самый FAANG, компании из которого славятся своим харкдором.
🤔 Пусть алгоритмы являются краеугольным камнем, но это совершенно не означает, что их не нужно учить.
@iOS Dev — об алгоритмах мы ещё поговорим
7 878
Прокачиваем push-уведомления для iOS: Rich Push Notifications
Узнайте, как изменять и улучшать push-уведомления до того, как они будут представлены пользователю
Push-уведомления позволяют приложениям передавать оповещения пользователям — даже если они не используют устройство активно.
Хотя уведомления уже показывают полезную инфомрацию, их истинная мощь проявляется в Rich Notifications.
Rich Notifications позволяют перехватывать notification payload и дают вам возможность их оформления в соответствии с потребностями пользователя.
Это позволяет отображать кастомный UI, который может включать в себя и действия с кнопками.
📖 В этом материале вы узнаете, как изменять и улучшать входящий контент, как создавать собственный интерфейс для таких уведомлений и многое другое.
@iOS Dev
7 878
Что такое phyllotaxis или как повторить анимацию в Wallet и Lock Screen в iOS 16
Оговорюсь, я как и прежде не использую Swift UI в проде, и наверняка код можно сделать чище
С выходом новой iOS многие обратили внимание на крутую анимацию при переходе на заблокированный экран и обратно. Philip Davis в твиттере дополнил, что по факту используемая фигура очень похожа на phyllotaxis (
филлотаксис по-русски). Так что же это за зверь такой?
Время нового факта
Филлотаксис — одна из природных загадок, известная со времён Леонардо да Винчи. Название с древнегреческого — «расположение листьев».
Загадочным является наблюдаемое в мире растений геометрически правильное расположение. Вспомните, например, как выглядит подсолнух😏.
Если сосчитать количество однотипных спиралей на поверхности, то с большой вероятностью мы получим одну из пар, образованных двумя соседними числами Фибоначчи.
☺️ Спасибо математикам за псевдокод:
n = caseIndex
base_angle = pi*(1+sqrt(5))
r = sqrt(n)
theta = n*base_angle
x = r*cos(theta)
y = r*sin(theta)
Для упрощения терминологии: n это индекс семечка (у нас это просто кружок, baseAngle некий стартовый угол, r - радиус, x и y — позиции, на которые мы должны поместить наше семечко).
Что ж, попробуем повторить природное явление с помощью Swift UI!
1️⃣ Создадим GeometryReader, proxy.size выступит нашем полем для заполнения. xCenter и yCenter - координаты центра поля, от которых я отталкивался.
2️⃣ Радиус можно рассчитать по следующей формуле let radius:Double = maxWidth * sqrt(Double(i)). maxWidth это ширина семечка (тех, что ближе к краю поля).
3️⃣ Заполяем поле с помощью CircleInside в зависимости от максимального количества "семечек" внутри поля.
4️⃣ И небольшой эффект анимации: scaleEffect и rotationEffect по тапу.
😎 В итоге получится то, что вы видите на гифке.
🛠 Свой код я залил на Github, можете изменять его так, как захотите.
⭐️ Сказать спасибо, если пост оказался интересным, можно тут или звёздочкой на гитхабе.
@iOS Dev — решаем загадки Да Винчи на Swift UI.7 878
Пример реализации автозаполнения пароля для приложения iOS
Функция Password Autofill позволяет пользователям входить в одну и ту же учетную запись на разных устройствах без необходимости запоминать учетные данные.
🌐 Например, при регистрации в веб-приложении пользователи могут придумать пароль и сохранить учетные данные в связке ключей iCloud.
Когда в какой-то момент они запускают нативное приложение для доступа к той же учетной записи, приложение предлагает учетные данные, сохраненные для веб-сайта, в строке пароля QuickType.
После аутентификации пользователя, например, с помощью
Face ID, система заполняет учетные данные - таким образом, их не нужно вводить повторно.
Чтобы корректно рализовать эту фичу в приложении для iOS, необходимо выполнить следующие шаги:
1️⃣ Настройка связанных доменов приложения (associated domains).
2️⃣Установка правильного типа автозаполнения для соответствующих полей.
📖 В этом материале более подробно рассматривается каждый из этих шагов.
@iOS Dev7 878
Продвинутые эффекты для тени UIView с использованием shadowPath
📖 В этой статье рассматриваются необычные подходы к использованию теней.
Подробно разбирается, зачем нужно каждое из свойств:
shadowColor, shadowOffset, shadowOpacity, shadowPath и shadowRadius, а также их комбинации.
Кроме этого демонстрируется, как можно использовать UIBezierPath применительно к тени для создания интересного эффекта.
@iOS Dev7 878
Полное руководство по UICollectionView с примерами на Swift
Узнайте, как использовать UICollectionView с многократно используемыми компонентами UIKit и шаблоном MVVM.
📖 Автор рассказывает о двух подходах к созданию и настройке
UICollectionView, а также приводит аргументы за использование кода, а не Interface Builder.
🛠 Кроме этого, он делится своим фреймворком
📺 Кстати, рекомендую посмотреть видео Apple о продвинутых пользовательских интерфейсах.
@iOS Dev7 878
Каково работать в команде, которая преследует амбициозную цель – развивать свой продукт в составе суперприложения?
VK дает разработчикам возможность узнать это и получить большой опыт взаимодействия с другими командами, а также прокачать навыки в разных направлениях работы.
Вас ждут на Weekend Offer в команды Почты и Облака Mail.ru. Вместе с ними вы будете строить удобную инфраструктуру, создавать высоконагруженный сервис с 1M RPS, решать уникальные задачи по работе с файлами и многое другое.
С 22 августа до 2 сентября подавайте заявку, а 3 и 4 сентября тимлиды команд расскажут о своей работе, ответят на все ваши вопросы и проведут собеседования, чтобы в воскресение вечером выбрать лучших кандидатов и сделать им оффер. Не упустите возможность!
7 878
Как бы мог выглядеть iOS-разработчик в разных стилях живописи или как мне дали доступ к DALL·E. Часть 3 — архив.
На случай, если вам понадобится аватарка (без всяких вотермарок)
В архиве все картинки по разделам, сгенерированные Dall-E по разделам:
⚪ Ренессанс.
⚪ Классицизм.
⚪ Романтизм.
⚪ Импрессионизм.
⚪ Экспрессионизм.
⚪ Авангардизм.
@iOS Dev
7 878
Как бы мог выглядеть iOS-разработчик в Эпоху Возрождения или как мне дали доступ к DALL·E
Почувствуйте игру слов😂
Я, наконец, получил свой доступ к нейросети от OpenAI и решил потратить весь свой запас кредитов некоторое время на проверку того, как она работает. Что могу сказать — впечатления необычные.
Как показывает практика, при корректных запросах нейросеть умеет в контект и в целом более чем круто создаёт изображения на основе запросов.
И почему бы в пятницу не поэкспериментировать и не подумать, как бы мог выглядеть iOS-разработчик, если бы его рисовал, например, Да Винчи?
Что получилось в итоге — вы можете увидеть на скриншоте.
Как выглядел процесс создания этих изображений для меня?
1️⃣ Несколько неудачных фраз, в которых не было нужно контекста.
2️⃣ Попытка подобрать более интересные эпохи. Не уверен, нужно ли показывать айос-разработчиков в стиле авангардизма? Если соберём 33 ⚡ — сделаю!
3️⃣ Подготовка и выбор наиболее удачных изображений из всех.
Ну и то что получилось — перед вами. А какой разработчик сегодня ты? Из эпохи ренессанса, классицизма или романтизма?
@iOS Dev — что дали, то DALL·E.
