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

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

Размещение рекламы: @tanyasanovna
Download Telegram
Что происходит, когда вы переходите в браузере по ссылке

Один из старейших вопросов, которые задают на технических интервью – «Что происходит, когда вы вбиваете в браузере адрес сайта и нажимаете Enter?». Мобильщикам, конечно, его задают реже, чем фронтендерам и бэкендерам, но с какими-то его вариациями легко можно столкнуться.

Автор проекта решил подготовить ультимативный ответ на этот вопрос, и с помощью сообщества собрал максимально подробный гайд, в котором разбирается:

⌨️Как железо обрабатывает нажатия кнопок на клавиатуре
🔀Весь путь сетевого запроса, включая даже то, что происходит на свитче
🤔Детали того, как открываются сокеты

И куча других интересных вещей, часть из которых вам может пригодиться, а часть – просто расширит кругозор.

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

- Эти модификаторы можно использовать вместе с интерполяцией строк, что упрощает сбор строки с разными стилями.
- Текстовые модификаторы возвращают Text, а не some View, в отличие от обычных модификаторов.
- Если вам часто приходится комбинировать несколько текстовых модификаторов, то можно сделать код чище, вынеся их в отдельную extension функцию.

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

Pulse – большой продукт, построенный вокруг работы с логами для iOS/macOS приложений. Основная идея – записывать все логи и сетевые запросы и давать удобные инструменты их анализа и фильтрации. В Pulse входят сама библиотека и приложения под все платформы, даже под tvOS.

Основные изменения в новом релизе:

🎨Редизайн встраиваемого в приложение дебажного меню, с упором на более простую навигацию и удобную работу с текстовыми данными
🔒Новый API для фильтрации секьюрных данных на уровне логирования
⌚️Полностью переработанные watchOS и tvOS приложения

Перевод на русский язык
Туториал по make для Swift разработчиков

make – одна из древнейших билд систем, которая упрощает запуск сложных команд в консоли. Ее удобно использовать для автоматизации частых рутинных действий. В статье приводится несколько примеров того, как с помощью make автоматизировать различные задачи, связанные со сборкой, деплоем, тестированием и удалением Swift пакетов.

Перевод на русский язык
Серия статей про работу с внутренними покупками

Автор разбирает все аспекты работы с внутренними покупками на StoreKit, начиная от того, какие соглашения требуется принять, заканчивая разбором техник валидации покупок и возможных статусов ошибок.

Код примера на GitHub
Перевод на русский язык
This media is not supported in your browser
VIEW IN TELEGRAM
xcmonkey – инструмент для monkey-тестирования

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

xcmonkey – один из нескольких инструментов, реализующих такое поведение в iOS приложениях. У него есть доступ к иерархии вьюшек, поэтому он работает достаточно умно, имитируя действия не со случайными точками на экране, а с конкретными элементами. Умеет симулировать тачи, свайпы и другие жесты.
3 причины стать мобильным разработчиком на iOS

1. Реализовать свои идеи
Счётчик просмотренных фильмов или управление светом в холодильнике? Приложение можно создать под любую задачу.

2. «Пощупать» результат
iOS-разработчики видят результат своего кода на симуляторе устройства в среде разработки Xcode или на своём айфоне. Ещё с помощью приложений разработчики улучшают жизнь людей и видят отклик: всегда можно почитать отзывы о приложении в App Store.

3. Зарабатывать
По данным Хабр Карьеры, в среднем начинающие iOS-разработчики получают 52 000 ₽ в месяц, а опытные уровня middle — 142 000 ₽. Часто разработчики работают удалённо.

Если хотите попробовать себя в этой профессии, начните бесплатную вводную часть курса по iOS-разработке. Она делится на два уровня: начальный и для более подготовленных. Вы с первого урока учитесь на реальных задачах и погружаетесь в рабочую среду.

Познакомьтесь с языком Swift и напишите своё первое приложение бесплатно
Почему yaml – плохой формат

Скорее всего, до вас долетали обрывки споров про то, насколько хорошая идея использовать yaml для различных конфигов.

Все сводится к тому, что спецификация Yaml на порядок сложнее, чем JSON. Например, спека предусматривает 63 разных способа объявления multiline строк. Кроме того, она еще и значительно меняется от версии к версии.

Вот несколько примеров непредсказуемого поведения YAML конфигов:

*️⃣`- 22:22` в зависимости от версии парсера может быть прочитана как строка, а может – как число 1342.
*️⃣Некоторые символы считываются как строки, а некоторые оказываются зарезервированы под что-то еще. Например, - *.png – невалидный сниппет, так как * зарезервирована. А - !.git будет считан, как пустая строка.
*️⃣Если где-то в конфиге встретится строчка - no, она будет интерпретирована как false, а не как строка. У этого поведения есть даже свое имя – Norway problem, так как региональный код Норвегии, который часто можно встретить в таких конфигах, тоже no. Ах да, так ведет себя только самая новая версия yaml, что добавляет веселья.
*️⃣Не стоит использовать ~, так как это алиас для null.
История дебага странного поведения NSPredicate

Автор статьи столкнулся с интересной проблемой – подсчет записей в CoreData, отфильтрованных с помощью NSPredicate, выдавал неверный результат:
NSPredicate(format: "%K != %@", stringKey, value)

Как оказалось при дебаге, условие предиката не выполнялось для записей, значение в которых равно nil. Корни проблемы растут в не очень очевидное поведение SQL, а избежать его можно, только вручную отфильтровывая нулевые значения.

Перевод на русский язык
С чего начать путь в iOS-разработку?

🔹 24 января в 20:00 мск
приходите на вебинар специализации «iOS Developer» в OTUS! На занятии обсудят Swift Charts — новый фрейморк от компании Apple. Тема открытого урока: «Swift Charts — строим красивые графики из коробки».

Вместе с практикующим экспертом рассмотрят возможности API Swift Charts и с его помощью создадут красивые диаграммы для приложения. Продолжить изучение iOS-разработки вы сможете дальше на онлайн-курсе.

➡️ Для участия зарегистрируйтесь: https://otus.pw/Nxn7/
Количество новых приложений на React Native упало на 40 процентов

По данным AppFigures, которые анализируют используемые приложениями SDK, в 2022 году количество приложений, содержащих в себе зависимости React Native, упало на 43%. Важно понимать, что количество новых релизов в целом стало меньше на 8%, но это объясняет лишь маленькую часть падения.

При этом, до прошлого года React Native рос довольно бодренько.
Как использовать один и тот же код для Xcode Previews и снепшотного тестирования

В статье разбирается, как с помощью библиотеки PreviewSnapshots можно использовать один и тот же код для того, чтобы отображать его в Xcode Preview, и для того, чтобы генерировать вьюшку, которая может использоваться в XCTest ассертах. Идея в целом довольно разумная, и снепшотные тесты вы можете получить почти бесплатно.
Поиск спикеров в Podlodka iOS Crew

Программный комитет любимой конференции айосеров готовит новый сезон с фокусом на разную инфраструктуру – сборку, CI/CD, обеспечение качества, организацию аналитики и локализации.

Если вы решали какие-то интересные задачи по теме, то откликайтесь в форме. Вам подберут подходящий формат, помогут подготовить выступление и отсыпят кучу плюшек! Форма открыта до 3 февраля.

Если вы не готовы выступить сами, но готовы привести нам крутого спикера – мы дадим бесплатную проходку на сезон. Так что перекидывайте приглашение и зовите своих коллег!
Как работает Advanced Data Protection в iCloud

Обычно все ваши данные в iCloud шифруются ключом, который хранится на серверах Apple. В декабре Apple анонсировали несколько новых фичей, связанных с безопасностью. Одна из них – Advanced Data Protection, которая хранит ключи шифрования только на устройствах. По сути, это end-to-end шифрование из коробки для всех приложений, которые используют CloudKit. Но у этого есть несколько нюансов:

*️⃣Зашифрованные поля в данных не поддеррживают индексы, поэтому из нельзя включать в предикаты.
*️⃣Если вы выставляете publicPermission для какого-то из файлов, и он становится доступен по ссылке, ключи шифрования загрузятся на сервер Apple.
*️⃣Вы не можете знать, включен ли ADP у конкретного пользователя. Правильным будет расчитывать на то, что включен, и работать с приватной информацией черещ новый API.

Документация по encryptedValues API
Перевод на русский язык
Swift и Objective-C в одном XCFramework

С интеропом Swift и Objective-C нет проблем, но есть нюанс. Если вам нужен интероп внутри фреймворка, придется сделать интерфейс взаимодействия Swift<>Objective-C публичным, и он будет доступен всем пользователям фреймворка. Это подойдет не во всех случаях.

В статье разбирается два воркэраунда – для импорта Swift в Objective-C и наоборот.

Перевод на русский язык
Надо ли подаваться в App Store Small Business program каждый год

У App Store есть специальная программа для тех, кто зарабатывает меньше миллиона долларов в год на своих проектах – Small Business Program. Основная плюшка – вы платите 15% комиссии вместо 30%.

Недавно на почты многим разработчикам, участвующим в программе, пришло письмо с заголовком «You’re eligible for the Small Business Program». Если вы увидели такое же, не переживайте – саппорт пишет, что каждый год продлять программу не надо.
Обмен данными между iPhone и Apple Watch с помощью WatchConnectivity

WatchConnectivity – системный фреймворк, который дает простой API для передачи данных между телефоном и часами. Важно – он предназначен для передачи небольших объемов данных. Для того, чтобы передать что-то более значимое, Apple рекомендует запрашивать данные напрямую с сервера через URLSession.

WatchConnectivity дает три способа передачи данных:

1️⃣ApplicationContext, для синхронизации очень часто изменяющихся данных.
2️⃣transferUserInfo, для гарантированной передачи данных даже в том случае, если часы сейчас недоступны. Работает только с реальным девайсом.
3️⃣sendMessage, для двустороннего обмена данными тогда, когда оба девайса видят друг друга.

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