iOS Dev
Open in Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Show more7 982
Subscribers
-1324 hours
-117 days
+6330 days
Posts Archive
7 982
Подводные камни сторонних зависимостей и библиотек
1. Сложность
Управление версиями, волновой эффект обновлений зависимостей, время сборок. Сторонний код сулит поддержку проблем, которые там могут возникнуть.
2. Объём кода
Это может показаться очевидным, но каждая строка кода очень важно. В одиночку каждая добавленная строка не имеет большого значения. В какой-то момент у вас появится пляж, на котором будет лежать разный мусор (технические долги, ошибки и т.д.). Наша задача как разработчиков — чистить и поддерживать этот пляж.
3. Безопасность
Тут всё понятно. Помните, если пользователь даст доступ к гео, например — в любое время, то и любая зависимость в коде может получить доступ к этому гео.
4. Разбитые окна
Идея "разбитых окон" в программном обеспечении заключается в том, что новички на проекте с большей вероятностью будут следовать установленным условностям и привычкам в кодовой базе. Если в проекте много зависимостей, то это приводит к тому, что добавляется еще больше зависимостей, не обдумывая, нужна ли эта зависимость на самом деле. Это может быстро усложнить вашу кодовую базу и привести к пункту 2.
5. Влияние на вашу команду и карьеру в целом
Адаптация или онбординг. Если на каждом шагу новичкам будет нужно осваивать новую зависимость, то просто представьте, как им будет работать.
Импакт на развитие карьеры. Если вместо решения проблемы вы тащите новую зависимость, то этого может хватать до поры до времени. Но для развития иногда стоит спуститься на уровень глубже. Это реально работает и вы будете удивлены, насколько написание своей реализацией может вас прокачать в профессиональном плане.
// MARK : - Выводы
Если бездумно тащить в проект всё подряд, иногда может случиться так, что вместо развития вашего проекта вы будете искать способ поддержки зависимости, которая внезапно перестала работать по неизвестной причине.
Это не рекомендация к изобретению велосипедов. Просто иногда стоит немного внимательнее спрашивать у коллег, или у себя самого — а нужна ли нам эта либа, не рациональнее ли будет использовать своё решение?
Больше мыслей по этому вопросу можно найти тут и тут.
@iOS Dev
7 982
🤔Неужели нам вернут стену?!
Правда, в Telegram.
🧑💻 В репозитории клиента, который является открытым, можно было заметить ряд изменений, которые подтверждают появление новостной ленты в Telegram.
Вероятнее всего, в одном из следующих апдейтов пользователям будет доступна возможность видеть посты из каналов, идущие подряд.
7 982
Разработчица поделилась своим опытом работы в Expedia
Ким рассказала в целом о своих впечатлениях, я же постарался вынести суть первой части — собеседования.
— Процесс собеседования был исключительно освежающим по сравнению с другими собеседованиями.
— Во время первого телефонного собеседования у Ким случился приступ паники, что привело к сильному затуманиванию мышления.
Скорее всего, больший опыт собеседований поможет справляться с этим лучше, но все ситуации довольно уникальны.
— Спросили об unwrapping optionals. Из-за пункта выше Ким немного поплыла, но интервьюер помог найти ответ. И это позволило рассказать о том, что можно было использовать для очистки вложенных операторов if в коде. Ким привела пример из своей работы.
Тут же Ким привела ремарку, что на других собеседованиях её бы просто сразу списали со счетов и собеседование могло окончиться.
— Последним этапом было очное собеседование, длившееся полдня, на котором Ким познакомили с командой, менеджером, затем был раунд вайтбординга. Далее сессия лайвкодинга и командный обед.
Про командный обед необычно, конечно.
Этот раунд был долгим, но оно преподало мощный урок о проведении собеседований, который Ким применяет с тех пор на всех должностях.
— Ни на одном этапе Ким не оставляли одну. Тот, кто проводил собес, помогал решать проблему. Если Ким застревала в рассуждениях, она могла задать вопросы и получить какие-то разъяснения.
Если можно было спросить о каких-то мыслях, которые могли помочь, это стоило делать.
— Ожидания были понятны на каждой итерации собеседования. Собеседование — занятие, где участвует два человека, для работы в паре. Важные слова: интервьюеру важно, как вы можете работать с ним в команде, а не только самостоятельно.
— Решение задач было важным пунктом. Но его нужно было пройти в том числе и для того, чтобы понять, что представляет из себя окружение в целом.
7 982
Понедельник, а мы опять про утечки памяти?!
Именно так! Отладка — важная часть в нашей с вами работе, так что материалы про неё вряд ли будут лишними.
Пару раз я делился материалами про retain cycles: тут, тут и вот здесь, например.
🛠 Решил вынести один из способов в статью здесь. Конечно, для многих он очевиден, и может возникнуть вопрос, зачем — это же и так понятно! Но кто-то может найти этот способ вполне рабочим.
7 982
DevToysMac
Как заявляют разработчики, это практически швейцарский нож для макоси.
💻Опенсорсный продукт с конвертерами, форматтерами, декодерами, чего там только нет.
Великолепная утилита, Уолтер. Просто охрененная, если я правильно понял. Надёжная, как швейцарские часы.
👍 Лайк, если угадали источник цитаты.
#opensource
7 982
Вариативные параметры (variadic parameters) позволяют передавать в функцию ноль или более значений определенного типа.
👍 Замечательная особенность Variadic Parameters заключается в том, что Swift обрабатывает преобразование одного значения в коллекцию значений. Мы можем сохранить наши API более читабельными, в то время как Swift позаботится о преобразовании.
📖 Давайте посмотрим, как это работает.
7 982
Структура памяти в Swift
Посмотрите, как Swift управляет, хранит и ссылается на различные типы данных и объекты, используя безопасный для памяти подход.
Материал состоит из двух больших частей:
- Схема памяти типов значений (value types) в Swift.
- Ссылочные типы (reference types).
Краткий вывод:
🛠 Короче говоря, retain cycles - отстой, но в большинстве случаев их можно избежать, просто используя правильное ключевое слово. Под капотом ARC делает отличную работу, за исключением нескольких крайних случаев, когда вам придется прервать цикл.
Swift - это безопасный для памяти язык программирования по своей конструкции.
Язык гарантирует, что каждый объект будет инициализирован, прежде чем вы сможете его использовать, а объекты, живущие в памяти, на которые больше нет ссылок, будут автоматически деаллоцированы.
Индексы массивов также проверяются на ошибки out-of-bounds. Это дает нам дополнительный уровень безопасности, за исключением случаев, когда вы пишете небезопасный Swift-код 🤔.
7 982
А может ну его всё, и в TikTok пойти?
🛠 Ладно-ладно, у нас технический канал, а вы о чём подумали?
Вот вам история о том, какие вопросы могут задать в крупных компаниях на собеседовании. Например, в TikTok. Пусть и не с хэппи-эндом, но история любопытная.
Кандидат прошёл два интервью по Zoom, каждое по 45 минут — в течение одной недели.
Первый этап состоял из двух частей.
- Термины iOS.
- Что нового в мажорной версии? На момент собеседования интервьюер хотел услышать про виджеты.
- Попросили оптимизировать небольшой участок кода.
- Спросили про разницу setNeedsLayout, layoutIfNeeded, layoutSubview.
- Проверили знание того, как найти краши при нехватке памяти без использования Crashlytics.
Во второй части попросили решить задачу, которая на скриншоте.
Второй этап
Целиком и полностью был посвящен проектированию. А также спросили про самый жёсткий баг, на поиски которого ушло больше всего времени.
📖 В конце статьи автор делится советами, как пройти собеседование, или хотя бы повысить шансы на успех.
7 982
Анализ HTTP-трафика с помощью стандартных инструментов Xcode
👨🎓 На прошлогоднем WWDC было множество полезных сессий, одна из недооценённых — объяснение работы с инструментом по анализу трафика.
Michael Abadi Santoso кратко сформулировал принципы для использования Instruments Network для записи и анализа HTTP-трафика вашего приложения.
Вот тут рассказывается, как исследовать и визуализировать поведение сеансов, задач и отдельных HTTP-запросов, чтобы обеспечить эффективную передачу данных и соблюдение конфиденциальности.
💻 Но можно и посмотреть картинки.
7 982
Сохранение конфиденциальных данных с помощью кейчейна в Swift
При разработке приложений для iOS часто возникает необходимость хранить конфиденциальные данные (пароль, токены, секретные ключи и т.д.) локально.
Для начинающих разработчиков первое, что приходит на ум, это хранить их с помощью UserDefaults. Однако, как мы все знаем, хранение конфиденциальных данных с помощью UserDefaults - очень плохая идея, потому что данные, хранящиеся с помощью UserDefaults, не шифруются и крайне небезопасны.
🏦 Для безопасного хранения конфиденциальных данных локально, мы должны использовать keychain (связку ключей), предоставляемую Apple. Это довольно старый фреймворк, поэтому, как вы увидите позже, его API недостаточно Swifty, как у других современных фреймворков Apple.
📖 В этой статье рассказывается, как создать универсальный хелпер, работающий как в iOS, так и в macOS, который сохраняет, обновляет, читает и удаляет данные с помощью keychain.
7 982
Три золотых правила для weak self
🙈 A strong-retained self не всегда retain cycle.
🐵 A weakly retained self никогда не будет retain cycle.
🙉 Обновите self до strong в верхней части замыканий для избежания странного поведения.
Chris Downie в своём разборе показывает, почему это действительно так на примерах.
Эти правила могут повторяться, но они приведут к более безопасному коду, о котором гораздо легче рассуждать.
😉А ещё эти правила проще заретейнить, бррр, простите, запомнить.
7 982
Ранее публиковал результаты исследования зарплат для iOS-разработчиков в РФ.
Сегодня прочитал о похожем отчёте в другом мире. Решил поделиться с вами структурированными цифрами по данным сайтов PayScale, Glassdoor, ZipRecruiter и Indeed.
А больше деталей, в том числе и по начальным зарплатам при входе в профессию, можно прочесть здесь.
7 982
Как подключиться к Wi-Fi в iOS с помощью Swift?
🛠 Для этого нужно добавить немного capabilities. Это "Hotspot Configuration" и "Network Extensions".
В коде мы создаём экземпляр нашего конфига, а затем подключаемся. Должен быть показан системный диалог, после которого и произойдет подключение. Иногда может занять несколько секунд.
#интересное
7 982
Как добавлять и обрабатывать действия для push и local notifications в iOS
Вероятно, вы знаете, что многие приложения предоставляют такую опцию для своих уведомлений.
💻 Делюсь с вами способом, как создавать такие действия для своих проектов.
😉Кстати, ранее писал о способе тестирования пуш-уведомлений на симуляторе.
7 982
Ещё один материал про поиск утечек памяти
Тема остаётся актуальной и сложной, поэтому по возможности продолжу делиться с вами найденной информацией.
В статье Vitor рассказывает не об одной, а сразу о трёх техниках для поиска утечек в iOS. Что ж, что-то из этого точно стоит взять на заметку!
👏 212
7 982
Разобрал структуру Swift Package.
Не исключаю, что многие уже несколько раз их создавали по тем или иным причинам.
🛠 Хочу верить, что остальным этот разбор может пригодиться или покажется любопытным.
7 982
Работа с файлами конфигурации Xcode
🛠 Узнайте, как управлять различными окружениями iOS с помощью файлов .xcconfig.
В прошлом руководстве можно ознакомиться со способом, использующим вкладку настроек Xcode для сборок develop, staging и release в нашем iOS-приложении.
В этой статье рассматривается альтернативный способ достижения тех же результатов — с помощью файлов конфигурации Xcode .xcconfig.
📖 Давайте почитаем.
Available now! Telegram Research 2025 — the year's key insights 
