iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT
12.4K subscribers
654 photos
63 videos
3.95K links
Самые интересные статьи, видео и новости, связанные с iOS разработкой. Не больше трёх материалов в день.

Лучшее iOS сообщество в Телеге: @iosgt

Размещение рекламы: @tanyasanovna
Download Telegram
Результаты большого опроса Developer Ecosystem по iOS разработчикам

🍹У 85% опрошенных в проектах есть и Swift, и Objective-C. У подавляющего большинства большинство кода на Swift.
🐞2/3 разработчиков не пишут юнит тесты. UI тесты пишет кще меньше, всего 20%.
🧱70% опрошенных используют CocoaPods, 47% – SwiftPM, 12% – Carthage. При этом половина использующих поды планирует переезд на SwiftPM.
☁️13% опрошенных делают что-то на Swift для сервера.
30 постов про работу с Metal

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

Вот несколько постов для затравки:

🎨Рисование в 2D
💧Работа с глубиной
️Источники и направление света
️Рендеринг, основанный на физике
3D шахматы на SwiftUI и RealityKit

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

Автор статьи рассказывает, как довольно просто запилить трехмерные шахматы в AR. Хороший проект, чтобы потренироваться в разных базовых штуках вроде работы со светом.

Перевод на русский язык
Как ускорить protocol conformance check

- Protocol conformance check каждый раз при выполнении в рантайме проходится по всем ProtocolConformanceDescriptor, содержащимся в бинарнике. Чем больше у вас протоколов, тем медленнее выполняется эта операция.
- В iOS 16 завезли улучшение за счет использования специального кэша, который хранит в себе посчитанные заранее результаты соответствия протоколов. Но есть ряд кейсов, в которых эта фича не работает, в частности при первом запуске приложения, когда кеши еще не заполнены, при отсутствии результатов проверки соответствия или на старых версиях iOS.
- В статье рассказывается, как с помощью специально настроенных order файлов, которые объясняют линкеру, как правильно группировать код, можно улучшить скорость во всех описанных сценариях.
- Авторы статьи в своих тестах получили прирост на 20% на iPhone 7 с iOS 15.

Перевод на русский язык
Релиз MarkdownUI 2.0

MarkdownUI – библиотека для работы с маркдауном в SwiftUI. Умеет рендерить изображения, заголовки, списки, цитаты, таблицы, код и многое другое.

На этой неделе вышла новая версия либы, куда завезли нативный SwiftUI рендеринг, кастомизацию через стили и темы, и полную поддержку GitHub Flavored Markdown.

Перевод на русский язык
За Swift concurrency – будущее многопоточки в iOS. Если вы еще не вкатились, то начало года – самое время, чтобы начать подтягивать свои знания и экспериментировать с новыми API. Первые шаги вы можете сделать уже послезавтра, на воркшопе от Ексея Пантелеева.

— Устройство многопоточности на уровне iOS
— Новую структурированную многопоточность переход от GCD и основную проблему GCD
— Реальные примеры на async/await
— Использование Actors в продакшене
— Перспективы развития новой многопоточности

Вебинар является частью большого онлайн-курса «iOS Developer. Professional» от OTUS.
Дата: 2 февраля, 20:00

👉Для регистрации пройдите вступительный тест: https://otus.pw/9Syy/
Sketch теперь импортирует файлы из Figma

Очень-очень радостная новость. Если вы любите использовать Sketch, и сидите в Figma только из-за предпочтений дизайнеров или кого-то еще в команде, теперь вы сможете легко импортнуть .fig в Sketch.
Как экономить на GitHub Actions

Раннеры на macOS стоят в 10 раз дороже, чем на Linux, поэтому думать об оптимизации расходов точно имеет смысл. В статье предлагается несколько техник:

🛠️Пересмотрите все задачи, которые гоняются на macOS, и вынесите независимые от операционки на Linux. Например, можно вынести прогон SwiftLint или SwiftFormat.
🫰Настройте фильтры, чтобы не гонять билды при изменениях в README или других ресурсах.
🏎️Запускать только одну джобу в моменте, и дать возможность свежим джобам убивать уже запущенные.

Перевод на русский язык
Большое исследование тимлидов и руководителей разработки

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

🤔Какие навыки для руководителей самые важные
💰По каким критериям оценивают их работу
💻Сколько времени уходит на написание кода
👋Как попадают в профессию, и куда из нее уходят
📚Полезные для развития каналы, курсы и книги

👉Пройти опрос
Пропозал по добавлению в Swift `package` – нового модификатора видимости

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

В пропозале предлагается добавить в Swift новый модификатор видимости – package. Он делает символы публичными в рамках текущего пакета, но при этом они не доступны его внешним пользователям. В первую очередь фича будет полезна авторам библиотек, поэтому, если среди вас такие есть, залетайте в обсуждение и накидывайте на вентилятор – продлится оно до 8 февраля.
Доступ к командной строке из XCTest

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

📱Дергать недоступные через XCTest API фичи симулятора – отправку пушей, подмену локации, захват экрана
🎁Настраивать полноценный внешний мок-сервер
💻Выполнять любые действия с macOS через AppleScript

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

Перевод на русский язык
Как работает очистка URLCache

В документации нигде не рассказано, как URLCache ведет себя при достижении лимита по памяти. Очевидное предположение о том, что под капотом используется LRU алгоритм неверно – на практике URLCache удаляет вообще все закешированное, как только упрется в лимит.

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

Перевод на русский язык
Ускорение старта приложения DoorDash

DoorDash оптимизировали время старта приложения на 60% с помощью следующего:

🖌️Переезд со String(describing:) на ObjectIdentifier – это помогло избавиться от подкапотных protocol conformance checks.
🤷‍♂️Отказ от использования AnyHashable в пользу все того же ObjectIdentifier.
👀Аудит сторонних фреймворков, и перенос инициализации на время после вызова main().

Перевод на русский язык
Как следить за позицией скролла в SwiftUI

ScrollView в SwiftUI, в отличие от UIScrollView из UIKit, не дает простого способа следить за изменением позиции скролла. В статье разбирается, как с помощью GeometryReader можно получать текущий фрейм content view, а потом переводить его в нужную нам систему координат. Как бонус – вспомните, как вообще под капотом работает скролл!

Перевод на русский язык