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

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

#ios #mobile #swift
加入频道
Как добавлять и обрабатывать действия для push и local notifications в iOS

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

💻 Делюсь с вами способом, как создавать такие действия для своих проектов.

😉Кстати, ранее писал о способе тестирования пуш-уведомлений на симуляторе.
Как подключиться к Wi-Fi в iOS с помощью Swift?

🛠 Для этого нужно добавить немного capabilities. Это "Hotspot Configuration" и "Network Extensions".

В коде мы создаём экземпляр нашего конфига, а затем подключаемся. Должен быть показан системный диалог, после которого и произойдет подключение. Иногда может занять несколько секунд.

#интересное
Ранее публиковал результаты исследования зарплат для iOS-разработчиков в РФ.

Сегодня прочитал о похожем отчёте в другом мире. Решил поделиться с вами структурированными цифрами по данным сайтов PayScale, Glassdoor, ZipRecruiter и Indeed.

А больше деталей, в том числе и по начальным зарплатам при входе в профессию, можно прочесть здесь.
Три золотых правила для weak self

🙈 A strong-retained self не всегда retain cycle.

🐵 A weakly retained self никогда не будет retain cycle.

🙉 Обновите self до strong в верхней части замыканий для избежания странного поведения.

Chris Downie в своём разборе показывает, почему это действительно так на примерах.

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

😉А ещё эти правила проще заретейнить, бррр, простите, запомнить.
Сохранение конфиденциальных данных с помощью кейчейна в Swift

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

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

🏦 Для безопасного хранения конфиденциальных данных локально, мы должны использовать keychain (связку ключей), предоставляемую Apple. Это довольно старый фреймворк, поэтому, как вы увидите позже, его API недостаточно Swifty, как у других современных фреймворков Apple.

📖 В этой статье рассказывается, как создать универсальный хелпер, работающий как в iOS, так и в macOS, который сохраняет, обновляет, читает и удаляет данные с помощью keychain.
Анализ HTTP-трафика с помощью стандартных инструментов Xcode

👨‍🎓 На прошлогоднем WWDC было множество полезных сессий, одна из недооценённых — объяснение работы с инструментом по анализу трафика.

Michael Abadi Santoso кратко сформулировал принципы для использования Instruments Network для записи и анализа HTTP-трафика вашего приложения.

Вот тут рассказывается, как исследовать и визуализировать поведение сеансов, задач и отдельных HTTP-запросов, чтобы обеспечить эффективную передачу данных и соблюдение конфиденциальности.

💻 Но можно и посмотреть картинки.
А может ну его всё, и в TikTok пойти?

🛠 Ладно-ладно, у нас технический канал, а вы о чём подумали?

Вот вам история о том, какие вопросы могут задать в крупных компаниях на собеседовании. Например, в TikTok. Пусть и не с хэппи-эндом, но история любопытная.

Кандидат прошёл два интервью по Zoom, каждое по 45 минут — в течение одной недели.

Первый этап состоял из двух частей.

- Термины iOS.
- Что нового в мажорной версии? На момент собеседования интервьюер хотел услышать про виджеты.
- Попросили оптимизировать небольшой участок кода.
- Спросили про разницу setNeedsLayout, layoutIfNeeded, layoutSubview.
- Проверили знание того, как найти краши при нехватке памяти без использования Crashlytics.

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

Второй этап

Целиком и полностью был посвящен проектированию. А также спросили про самый жёсткий баг, на поиски которого ушло больше всего времени.

📖 В конце статьи автор делится советами, как пройти собеседование, или хотя бы повысить шансы на успех.
Структура памяти в Swift

Посмотрите, как Swift управляет, хранит и ссылается на различные типы данных и объекты, используя безопасный для памяти подход.

Материал состоит из двух больших частей:

- Схема памяти типов значений (value types) в Swift.

- Ссылочные типы (reference types).

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

🛠 Короче говоря, retain cycles - отстой, но в большинстве случаев их можно избежать, просто используя правильное ключевое слово. Под капотом ARC делает отличную работу, за исключением нескольких крайних случаев, когда вам придется прервать цикл.

Swift - это безопасный для памяти язык программирования по своей конструкции.

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

Индексы массивов также проверяются на ошибки out-of-bounds. Это дает нам дополнительный уровень безопасности, за исключением случаев, когда вы пишете небезопасный Swift-код 🤔.
Вариативные параметры (variadic parameters) позволяют передавать в функцию ноль или более значений определенного типа.

👍 Замечательная особенность Variadic Parameters заключается в том, что Swift обрабатывает преобразование одного значения в коллекцию значений. Мы можем сохранить наши API более читабельными, в то время как Swift позаботится о преобразовании.

📖 Давайте посмотрим, как это работает.
DevToysMac

Как заявляют разработчики, это практически швейцарский нож для макоси.

💻Опенсорсный продукт с конвертерами, форматтерами, декодерами, чего там только нет.

Великолепная утилита, Уолтер. Просто охрененная, если я правильно понял. Надёжная, как швейцарские часы.

👍 Лайк, если угадали источник цитаты.

#opensource
Понедельник, а мы опять про утечки памяти?!

Именно так! Отладка — важная часть в нашей с вами работе, так что материалы про неё вряд ли будут лишними.

Пару раз я делился материалами про retain cycles: тут, тут и вот здесь, например.

🛠 Решил вынести один из способов в статью здесь. Конечно, для многих он очевиден, и может возникнуть вопрос, зачем — это же и так понятно! Но кто-то может найти этот способ вполне рабочим.
Разработчица поделилась своим опытом работы в Expedia

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

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

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

— Спросили об unwrapping optionals. Из-за пункта выше Ким немного поплыла, но интервьюер помог найти ответ. И это позволило рассказать о том, что можно было использовать для очистки вложенных операторов if в коде. Ким привела пример из своей работы.
Тут же Ким привела ремарку, что на других собеседованиях её бы просто сразу списали со счетов и собеседование могло окончиться.

— Последним этапом было очное собеседование, длившееся полдня, на котором Ким познакомили с командой, менеджером, затем был раунд вайтбординга. Далее сессия лайвкодинга и командный обед.
Про командный обед необычно, конечно.

Этот раунд был долгим, но оно преподало мощный урок о проведении собеседований, который Ким применяет с тех пор на всех должностях.

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

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

Решение задач было важным пунктом. Но его нужно было пройти в том числе и для того, чтобы понять, что представляет из себя окружение в целом.
🛠 Сайт-шпаргалка для занятых программистов
Внимание, вопрос!