Что происходит, когда вы переходите в браузере по ссылке
Один из старейших вопросов, которые задают на технических интервью – «Что происходит, когда вы вбиваете в браузере адрес сайта и нажимаете Enter?». Мобильщикам, конечно, его задают реже, чем фронтендерам и бэкендерам, но с какими-то его вариациями легко можно столкнуться.
Автор проекта решил подготовить ультимативный ответ на этот вопрос, и с помощью сообщества собрал максимально подробный гайд, в котором разбирается:
⌨️Как железо обрабатывает нажатия кнопок на клавиатуре
🔀Весь путь сетевого запроса, включая даже то, что происходит на свитче
🤔Детали того, как открываются сокеты
И куча других интересных вещей, часть из которых вам может пригодиться, а часть – просто расширит кругозор.
Перевод на русский язык
Один из старейших вопросов, которые задают на технических интервью – «Что происходит, когда вы вбиваете в браузере адрес сайта и нажимаете Enter?». Мобильщикам, конечно, его задают реже, чем фронтендерам и бэкендерам, но с какими-то его вариациями легко можно столкнуться.
Автор проекта решил подготовить ультимативный ответ на этот вопрос, и с помощью сообщества собрал максимально подробный гайд, в котором разбирается:
⌨️Как железо обрабатывает нажатия кнопок на клавиатуре
🔀Весь путь сетевого запроса, включая даже то, что происходит на свитче
🤔Детали того, как открываются сокеты
И куча других интересных вещей, часть из которых вам может пригодиться, а часть – просто расширит кругозор.
Перевод на русский язык
Text modifiers в SwiftUI
- Эти модификаторы можно использовать вместе с интерполяцией строк, что упрощает сбор строки с разными стилями.
- Текстовые модификаторы возвращают Text, а не some View, в отличие от обычных модификаторов.
- Если вам часто приходится комбинировать несколько текстовых модификаторов, то можно сделать код чище, вынеся их в отдельную extension функцию.
Перевод на русский язык
- Эти модификаторы можно использовать вместе с интерполяцией строк, что упрощает сбор строки с разными стилями.
- Текстовые модификаторы возвращают Text, а не some View, в отличие от обычных модификаторов.
- Если вам часто приходится комбинировать несколько текстовых модификаторов, то можно сделать код чище, вынеся их в отдельную extension функцию.
Перевод на русский язык
Релиз Pulse 3
Pulse – большой продукт, построенный вокруг работы с логами для iOS/macOS приложений. Основная идея – записывать все логи и сетевые запросы и давать удобные инструменты их анализа и фильтрации. В Pulse входят сама библиотека и приложения под все платформы, даже под tvOS.
Основные изменения в новом релизе:
🎨Редизайн встраиваемого в приложение дебажного меню, с упором на более простую навигацию и удобную работу с текстовыми данными
🔒Новый API для фильтрации секьюрных данных на уровне логирования
⌚️Полностью переработанные watchOS и tvOS приложения
Перевод на русский язык
Pulse – большой продукт, построенный вокруг работы с логами для iOS/macOS приложений. Основная идея – записывать все логи и сетевые запросы и давать удобные инструменты их анализа и фильтрации. В Pulse входят сама библиотека и приложения под все платформы, даже под tvOS.
Основные изменения в новом релизе:
🎨Редизайн встраиваемого в приложение дебажного меню, с упором на более простую навигацию и удобную работу с текстовыми данными
🔒Новый API для фильтрации секьюрных данных на уровне логирования
⌚️Полностью переработанные watchOS и tvOS приложения
Перевод на русский язык
Туториал по make для Swift разработчиков
make – одна из древнейших билд систем, которая упрощает запуск сложных команд в консоли. Ее удобно использовать для автоматизации частых рутинных действий. В статье приводится несколько примеров того, как с помощью make автоматизировать различные задачи, связанные со сборкой, деплоем, тестированием и удалением Swift пакетов.
Перевод на русский язык
make – одна из древнейших билд систем, которая упрощает запуск сложных команд в консоли. Ее удобно использовать для автоматизации частых рутинных действий. В статье приводится несколько примеров того, как с помощью make автоматизировать различные задачи, связанные со сборкой, деплоем, тестированием и удалением Swift пакетов.
Перевод на русский язык
Серия статей про работу с внутренними покупками
Автор разбирает все аспекты работы с внутренними покупками на StoreKit, начиная от того, какие соглашения требуется принять, заканчивая разбором техник валидации покупок и возможных статусов ошибок.
Код примера на GitHub
Перевод на русский язык
Автор разбирает все аспекты работы с внутренними покупками на StoreKit, начиная от того, какие соглашения требуется принять, заканчивая разбором техник валидации покупок и возможных статусов ошибок.
Код примера на GitHub
Перевод на русский язык
Medium
In-App Purchases in iOS. Part 1: Creating purchases and adding them to the project
Hi everyone! My name is Sergey. I’ve been working as iOS Team Lead at Futurra Group for more than six years.
This media is not supported in your browser
VIEW IN TELEGRAM
xcmonkey – инструмент для monkey-тестирования
Monkey-тестирование – это рандомные или псевдорандомные действия с интерфейсом приложения, задача которых – спровоцировать креши или другие проблемы, на которые не наткнулись разработчики или тестировщики.
xcmonkey – один из нескольких инструментов, реализующих такое поведение в iOS приложениях. У него есть доступ к иерархии вьюшек, поэтому он работает достаточно умно, имитируя действия не со случайными точками на экране, а с конкретными элементами. Умеет симулировать тачи, свайпы и другие жесты.
Monkey-тестирование – это рандомные или псевдорандомные действия с интерфейсом приложения, задача которых – спровоцировать креши или другие проблемы, на которые не наткнулись разработчики или тестировщики.
xcmonkey – один из нескольких инструментов, реализующих такое поведение в iOS приложениях. У него есть доступ к иерархии вьюшек, поэтому он работает достаточно умно, имитируя действия не со случайными точками на экране, а с конкретными элементами. Умеет симулировать тачи, свайпы и другие жесты.
Swift Evolution дайджест за декабрь
✅Принятые пропозалы:
- SE-0374: Add sleep(for:) to Clock
👀Пропозалы в ревью:
- SE-0378: Package Registry Authentication
- SE-0379: Swift Opt-In Reflection Metadata
- SE-0380: `if` andft Evolutiexpressions
- SE-0381: DiscardingTaskGroups
Автор дайджеста на простых примерах разбирает каждый из перечисленных пропозалов, поэтому почитайте, если хотите разобраться, что ждать в следующих версиях Swift.
Перевод на русский язык
✅Принятые пропозалы:
- SE-0374: Add sleep(for:) to Clock
👀Пропозалы в ревью:
- SE-0378: Package Registry Authentication
- SE-0379: Swift Opt-In Reflection Metadata
- SE-0380: `if` andft Evolutiexpressions
- SE-0381: DiscardingTaskGroups
Автор дайджеста на простых примерах разбирает каждый из перечисленных пропозалов, поэтому почитайте, если хотите разобраться, что ждать в следующих версиях Swift.
Перевод на русский язык
Substack
Swift Evolution Monthly: December '22
Registry auth, Opt-In Reflection, if-switch Expressions, Vision documents, DiscardingTaskGroups, and Foundation rewrite.
3 причины стать мобильным разработчиком на iOS
1. Реализовать свои идеи
Счётчик просмотренных фильмов или управление светом в холодильнике? Приложение можно создать под любую задачу.
2. «Пощупать» результат
iOS-разработчики видят результат своего кода на симуляторе устройства в среде разработки Xcode или на своём айфоне. Ещё с помощью приложений разработчики улучшают жизнь людей и видят отклик: всегда можно почитать отзывы о приложении в App Store.
3. Зарабатывать
По данным Хабр Карьеры, в среднем начинающие iOS-разработчики получают 52 000 ₽ в месяц, а опытные уровня middle — 142 000 ₽. Часто разработчики работают удалённо.
Если хотите попробовать себя в этой профессии, начните бесплатную вводную часть курса по iOS-разработке. Она делится на два уровня: начальный и для более подготовленных. Вы с первого урока учитесь на реальных задачах и погружаетесь в рабочую среду.
Познакомьтесь с языком Swift и напишите своё первое приложение бесплатно →
1. Реализовать свои идеи
Счётчик просмотренных фильмов или управление светом в холодильнике? Приложение можно создать под любую задачу.
2. «Пощупать» результат
iOS-разработчики видят результат своего кода на симуляторе устройства в среде разработки Xcode или на своём айфоне. Ещё с помощью приложений разработчики улучшают жизнь людей и видят отклик: всегда можно почитать отзывы о приложении в App Store.
3. Зарабатывать
По данным Хабр Карьеры, в среднем начинающие iOS-разработчики получают 52 000 ₽ в месяц, а опытные уровня middle — 142 000 ₽. Часто разработчики работают удалённо.
Если хотите попробовать себя в этой профессии, начните бесплатную вводную часть курса по iOS-разработке. Она делится на два уровня: начальный и для более подготовленных. Вы с первого урока учитесь на реальных задачах и погружаетесь в рабочую среду.
Познакомьтесь с языком Swift и напишите своё первое приложение бесплатно →
Яндекс Практикум
Курс «iOS‑разработчик» — онлайн-обучение разработке мобильных приложений
Онлайн-курс «iOS-разработчик» от сервиса Яндекс Практикум. 12 месяцев обучения разработке мобильных приложений на iOS для начинающих (с нуля). Научитесь программировать на Swift, создадите командный дипломный проект, повторяющий рабочие условия. Дипломом…
Почему yaml – плохой формат
Скорее всего, до вас долетали обрывки споров про то, насколько хорошая идея использовать yaml для различных конфигов.
Все сводится к тому, что спецификация Yaml на порядок сложнее, чем JSON. Например, спека предусматривает 63 разных способа объявления multiline строк. Кроме того, она еще и значительно меняется от версии к версии.
Вот несколько примеров непредсказуемого поведения YAML конфигов:
*️⃣`- 22:22` в зависимости от версии парсера может быть прочитана как строка, а может – как число 1342.
*️⃣Некоторые символы считываются как строки, а некоторые оказываются зарезервированы под что-то еще. Например,
*️⃣Если где-то в конфиге встретится строчка
*️⃣Не стоит использовать
Скорее всего, до вас долетали обрывки споров про то, насколько хорошая идея использовать yaml для различных конфигов.
Все сводится к тому, что спецификация Yaml на порядок сложнее, чем JSON. Например, спека предусматривает 63 разных способа объявления multiline строк. Кроме того, она еще и значительно меняется от версии к версии.
Вот несколько примеров непредсказуемого поведения YAML конфигов:
*️⃣`- 22:22` в зависимости от версии парсера может быть прочитана как строка, а может – как число 1342.
*️⃣Некоторые символы считываются как строки, а некоторые оказываются зарезервированы под что-то еще. Например,
- *.png
– невалидный сниппет, так как * зарезервирована. А - !.git
будет считан, как пустая строка.*️⃣Если где-то в конфиге встретится строчка
- no,
она будет интерпретирована как false, а не как строка. У этого поведения есть даже свое имя – Norway problem, так как региональный код Норвегии, который часто можно встретить в таких конфигах, тоже no. Ах да, так ведет себя только самая новая версия yaml, что добавляет веселья.*️⃣Не стоит использовать
~,
так как это алиас для null.Ruudvanasseldonk
The yaml document from hell
As a data format, yaml is extremely complicated and it has many footguns. In this post I explain some of those pitfalls by means of an example, and I suggest a few simpler and safer yaml alternatives.
История дебага странного поведения NSPredicate
Автор статьи столкнулся с интересной проблемой – подсчет записей в CoreData, отфильтрованных с помощью NSPredicate, выдавал неверный результат:
Как оказалось при дебаге, условие предиката не выполнялось для записей, значение в которых равно nil. Корни проблемы растут в не очень очевидное поведение SQL, а избежать его можно, только вручную отфильтровывая нулевые значения.
Перевод на русский язык
Автор статьи столкнулся с интересной проблемой – подсчет записей в CoreData, отфильтрованных с помощью NSPredicate, выдавал неверный результат:
NSPredicate(format: "%K != %@", stringKey, value)
Как оказалось при дебаге, условие предиката не выполнялось для записей, значение в которых равно nil. Корни проблемы растут в не очень очевидное поведение SQL, а избежать его можно, только вручную отфильтровывая нулевые значения.
Перевод на русский язык
Douglas Hill
NSPredicate: an old API with new surprises
Discovering an inconsistency in how NSPredicate handles matching inequality with nil values, and implementing something better.
С чего начать путь в iOS-разработку?
🔹 24 января в 20:00 мск приходите на вебинар специализации «iOS Developer» в OTUS! На занятии обсудят Swift Charts — новый фрейморк от компании Apple. Тема открытого урока: «Swift Charts — строим красивые графики из коробки».
Вместе с практикующим экспертом рассмотрят возможности API Swift Charts и с его помощью создадут красивые диаграммы для приложения. Продолжить изучение iOS-разработки вы сможете дальше на онлайн-курсе.
➡️ Для участия зарегистрируйтесь: https://otus.pw/Nxn7/
🔹 24 января в 20:00 мск приходите на вебинар специализации «iOS Developer» в OTUS! На занятии обсудят Swift Charts — новый фрейморк от компании Apple. Тема открытого урока: «Swift Charts — строим красивые графики из коробки».
Вместе с практикующим экспертом рассмотрят возможности API Swift Charts и с его помощью создадут красивые диаграммы для приложения. Продолжить изучение iOS-разработки вы сможете дальше на онлайн-курсе.
➡️ Для участия зарегистрируйтесь: https://otus.pw/Nxn7/
Otus
Специализация iOS Developer
Специализация iOS Developer в OTUS
Количество новых приложений на React Native упало на 40 процентов
По данным AppFigures, которые анализируют используемые приложениями SDK, в 2022 году количество приложений, содержащих в себе зависимости React Native, упало на 43%. Важно понимать, что количество новых релизов в целом стало меньше на 8%, но это объясняет лишь маленькую часть падения.
При этом, до прошлого года React Native рос довольно бодренько.
По данным AppFigures, которые анализируют используемые приложениями SDK, в 2022 году количество приложений, содержащих в себе зависимости React Native, упало на 43%. Важно понимать, что количество новых релизов в целом стало меньше на 8%, но это объясняет лишь маленькую часть падения.
При этом, до прошлого года React Native рос довольно бодренько.
Как использовать один и тот же код для Xcode Previews и снепшотного тестирования
В статье разбирается, как с помощью библиотеки PreviewSnapshots можно использовать один и тот же код для того, чтобы отображать его в Xcode Preview, и для того, чтобы генерировать вьюшку, которая может использоваться в XCTest ассертах. Идея в целом довольно разумная, и снепшотные тесты вы можете получить почти бесплатно.
В статье разбирается, как с помощью библиотеки PreviewSnapshots можно использовать один и тот же код для того, чтобы отображать его в Xcode Preview, и для того, чтобы генерировать вьюшку, которая может использоваться в XCTest ассертах. Идея в целом довольно разумная, и снепшотные тесты вы можете получить почти бесплатно.
Поиск спикеров в Podlodka iOS Crew
Программный комитет любимой конференции айосеров готовит новый сезон с фокусом на разную инфраструктуру – сборку, CI/CD, обеспечение качества, организацию аналитики и локализации.
Если вы решали какие-то интересные задачи по теме, то откликайтесь в форме. Вам подберут подходящий формат, помогут подготовить выступление и отсыпят кучу плюшек! Форма открыта до 3 февраля.
Если вы не готовы выступить сами, но готовы привести нам крутого спикера – мы дадим бесплатную проходку на сезон. Так что перекидывайте приглашение и зовите своих коллег!
Программный комитет любимой конференции айосеров готовит новый сезон с фокусом на разную инфраструктуру – сборку, CI/CD, обеспечение качества, организацию аналитики и локализации.
Если вы решали какие-то интересные задачи по теме, то откликайтесь в форме. Вам подберут подходящий формат, помогут подготовить выступление и отсыпят кучу плюшек! Форма открыта до 3 февраля.
Если вы не готовы выступить сами, но готовы привести нам крутого спикера – мы дадим бесплатную проходку на сезон. Так что перекидывайте приглашение и зовите своих коллег!
Google Docs
Хочу быть спикером iOS Crew#11
Тема недели "Инфраструктура"
Даты: 27 февраля – 3 марта
Ожидаемые темы докладов сезона
Хостинг CI: Облачные решения (Xcode Cloud, MacStadium, виртуализация?) / Своё железо (организация фермы с mac mini)
Управление CI пайплайнами: Gitlab CI, CircleCI, Travis…
Даты: 27 февраля – 3 марта
Ожидаемые темы докладов сезона
Хостинг CI: Облачные решения (Xcode Cloud, MacStadium, виртуализация?) / Своё железо (организация фермы с mac mini)
Управление CI пайплайнами: Gitlab CI, CircleCI, Travis…
Как работает Advanced Data Protection в iCloud
Обычно все ваши данные в iCloud шифруются ключом, который хранится на серверах Apple. В декабре Apple анонсировали несколько новых фичей, связанных с безопасностью. Одна из них – Advanced Data Protection, которая хранит ключи шифрования только на устройствах. По сути, это end-to-end шифрование из коробки для всех приложений, которые используют CloudKit. Но у этого есть несколько нюансов:
*️⃣Зашифрованные поля в данных не поддеррживают индексы, поэтому из нельзя включать в предикаты.
*️⃣Если вы выставляете publicPermission для какого-то из файлов, и он становится доступен по ссылке, ключи шифрования загрузятся на сервер Apple.
*️⃣Вы не можете знать, включен ли ADP у конкретного пользователя. Правильным будет расчитывать на то, что включен, и работать с приватной информацией черещ новый API.
Документация по encryptedValues API
Перевод на русский язык
Обычно все ваши данные в iCloud шифруются ключом, который хранится на серверах Apple. В декабре Apple анонсировали несколько новых фичей, связанных с безопасностью. Одна из них – Advanced Data Protection, которая хранит ключи шифрования только на устройствах. По сути, это end-to-end шифрование из коробки для всех приложений, которые используют CloudKit. Но у этого есть несколько нюансов:
*️⃣Зашифрованные поля в данных не поддеррживают индексы, поэтому из нельзя включать в предикаты.
*️⃣Если вы выставляете publicPermission для какого-то из файлов, и он становится доступен по ссылке, ключи шифрования загрузятся на сервер Apple.
*️⃣Вы не можете знать, включен ли ADP у конкретного пользователя. Правильным будет расчитывать на то, что включен, и работать с приватной информацией черещ новый API.
Документация по encryptedValues API
Перевод на русский язык
Tact technology blog
What Advanced Data Protection for iCloud means for Tact and other apps that use CloudKit
In December 2022, Apple announced Advanced Data Protection for iCloud that covers user data in iCloud with end-to-end encryption under certain conditions. This post examines the topic in more detail.
Swift и Objective-C в одном XCFramework
С интеропом Swift и Objective-C нет проблем, но есть нюанс. Если вам нужен интероп внутри фреймворка, придется сделать интерфейс взаимодействия Swift<>Objective-C публичным, и он будет доступен всем пользователям фреймворка. Это подойдет не во всех случаях.
В статье разбирается два воркэраунда – для импорта Swift в Objective-C и наоборот.
Перевод на русский язык
С интеропом 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». Если вы увидели такое же, не переживайте – саппорт пишет, что каждый год продлять программу не надо.
У 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️⃣
2️⃣
3️⃣
Перевод на русский язык
WatchConnectivity – системный фреймворк, который дает простой API для передачи данных между телефоном и часами. Важно – он предназначен для передачи небольших объемов данных. Для того, чтобы передать что-то более значимое, Apple рекомендует запрашивать данные напрямую с сервера через URLSession.
WatchConnectivity дает три способа передачи данных:
1️⃣
ApplicationContext
, для синхронизации очень часто изменяющихся данных.2️⃣
transferUserInfo
, для гарантированной передачи данных даже в том случае, если часы сейчас недоступны. Работает только с реальным девайсом.3️⃣
sendMessage
, для двустороннего обмена данными тогда, когда оба девайса видят друг друга.Перевод на русский язык