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

Регистрация в РКН: https://gosuslugi.ru/snet/67b464d698a28c4e866d827a

Размещение рекламы: @tanyasanovna
Download Telegram
Подходы к тестированию в больших компаниях

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

Испанцы Karumi выложили в опенсорс свои гайды по тестированию (скриншотные тесты, property-based тесты, HTTP стабы)
В Spotify 32.000 тестов разных видов.
Target получают большую часть полезного фидбэка не от тестов, а от программы Beta тестирования в TestFlight.

Если вы занимаетесь организацией процессов релизов или тестирования, то в любом случае рекомендую прочитать всю ветку.
👍14🤡3💅1
7 февраля протухает WWDR сертификат для валидации покупок

🤔Кого затронет проблема:

Тех, кто валидирует покупки, не используя AppTransaction/Transaction API или серверную ручку verifyReceipt, а вместо этого хардкодит сертификат в приложении и проверяет покупку в клиентском коде.

💻Что делать:

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

Перевод на русский язык
💅31👍1
Breaking changes в Swift 6

Разработчики Swift стараются развивать язык, не ломая обратную совместимость на уровне исходников. Это значит, что код, компилируемый Swift 4, будет собираться и Swift 5. Для примера, появление Swift Concurrency ничего не сломало в старом коде.

В Swift 6 должно выкатиться много важных для языка изменений, ради которых готовы пожертвовать обратной совместимостью. Большая их часть касается одной из трех областей:

🏇Data-race safety by default
🏎️Performance predictability
🧱Package ecosystem scalability

В Swift 5.8 появится возможность включить часть из этих ломающих фичей, чтобы вы могли заранее подготовить свою кодовую базу к миграции. Но времени еще много, Swift 6 стоит ждать не раньше, чем через год.
👍30💅14😱5🤡1
Обзор линкеров для iOS/macOS

- Линкинг – один из этапов билда, на который может уходить довольно много времени, особенно в случае больших приложений. Если вы оптимизируете скорость сборки, это один из кандидатов на улучшение.
- Apple долгое время не вкладывались в ускорение своего основного линкера, ld64. В 2020 году автор выпустил свой форк этого линкера, zld, который работал на 40% быстрее.
- С тех пор появился третий проект, lld, который в основном поддерживается Google и Meta. Кроме того, Apple существенно улучшили ld64, и постепенно набирает обороты быстрый коммерческий линкер sold.
- Сейчас, если вы хотите получить более быстрый линкинг, разумнее всего использовать lld. Это может вам дать ускорение на 50-80%. Обратите внимание – это верно для дебажных билдов, релизные лучше собирать стандартным линкером.
- В статье автор рассказывает, почему решил прекратить поддержку своего линкера, и насыпает много ссылок про технические детали.

Перевод на русский язык
👍33💅72🗿2
This media is not supported in your browser
VIEW IN TELEGRAM
Новые фичи автокомплита кода в Xcode 14

- Генерация предзаполненных инициализаторов для структур
- Генерация бойлерплейта для Codable
- Корректная обработка параметров структур, у которых есть дефолтное значение
- Автоподстановка аргументов в функцию map, основываясь на названии создаваемой переменной (как в гифке в заголовке)
- Автоматическое выравнивание кода в блоках

Это только часть изменений, все остальные – в статье. У Xcode куча проблем, но попробовать новые фичи все равно стоит – они могут упростить некоторые частве сценарии и сделать вашу жизнь чуть лучше.

Перевод на русский язык
35💅7🤯5👍4🔥2😱1
Как поддержать несколько разных виджетов в одном приложении

- Apple предлагает два подхода к поддержке нескольких виджетов: использовать widget bundle или создавать несколько разных widget extensions.
- У бандла есть ограничение на 10 виджетов внутри. Его теоретически можно обойти.
- Apple рекомендует в большинстве случаев использовать бандлы, а ко второму способу обращаться только в специфичных случаях. Например, когда только одному из них для работы требуется какой-то пермишн от пользователя.

Перевод на русский язык
💅13👍5
Способы выдать доступ к дебажному меню

*️⃣Показывать меню только пользователям TestFlight, проверяя App Store receipt URL.
*️⃣Показывать меню после серии специальных жестов. Минус в том, что такое меню могут легко обнаружить случайно.
*️⃣Показывать меню тем, кто откроет приложение с помощью специальной URL схемы.
*️⃣Если в приложении есть авторизация, то дебажное меню можно активировать только для определенных аккаунтов.
*️⃣Показывать меню тем, на чьих девайсах стоит специальный Configuration Profile.

Перевод на русский язык
💅24👍6
Как организован доступ к дебажному меню вашего приложения?
Anonymous Poll
31%
Нужно совершить секретный жест или серию действий
3%
Активируется через Configuration Profile
3%
Открывается URL схемой
7%
Доступно под определенными аккаунтами пользователей приложения
0%
Активируется особенным пуш-уведомлением
2%
Другой способ (рассказать в комментариях)
15%
Нет дебажного меню
22%
Посмотреть результаты
💅34🗿2👍1🙏1
Плейлист докладов с конференции Swiftable

Для затравки несколько самых интересных:

🛗Elevated Swift от Soroush Khanlou: решение задачи Кнута о лифте
🧱Platformizing features at Spotify: про компонентную архитектуру огромного приложения
🎨Adopting SwiftUI at scale: про проблемы, которые встретил Bumble при миграции
👍9💅5🔥1
Питч по добавлению borrow и inout в Swift

- let и var при инициализации копируют значения. Часть копирований оптимизируется компилятором. Но иногда оставшиеся копирования могут повлечь за собой проблемы с производительностью.
- Кроме того, полноценный интероп Swift и C++ принесет новую проблему – нужно будет уметь работать с типами, которые вообще не поддерживают копирования.
- В питче предлагается добавить в язык два новых ключевика – borrow и inout, которые дадут возможность работать со ссылочными типами.
- По ссылке в заголовке – детальный разбор проблем и дизайн предлагаемого решения. Почитать обсуждение питча можно тут.
🤡34💅14🤔6🤬3🔥21👍1🌭1
Как читать ассемблерный код

Не знаю, зачем вам может пригодиться этот скилл, но вдруг. Автор разбирает два основных ассемблерных синтаксиса, структуру команд, значение регистров, и предлагает несколько простых мнемоник, чтобы вам было проще все запомнить.

Потренироваться и посмотреть на ассемблерный код программ на разных языках можно с помощью сервиса Compiler Explorer.

Перевод на русский язык
🔥27💅91🌭1
Настройка интерактивных превью для SwiftUI вьюх со стейтом

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

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

Перевод на русский язык
💅18👍4🤡1🌭1
DI библиотека от Pointfree

2023 только начался, а уже выпущена новая библиотека для dependency injection – swift-dependencies.

🎨Предназначена в первую очередь для SwiftUI, но может использоваться и во фреймворках или UIKit приложениях.
🛠️Дает возможность оверрайдить как весь граф зависимостей, так и скоуп конкретного модуля.
🧱Уже используется под капотом в ТСА.

GitHub
Документация
Перевод на русский язык
🤡2718👍2💅2👎1🌭1
Книга «Software Engineering at Google» стала бесплатной

SWE at Google – довольно популярная книга про хорошие инженерные практики, применяемые на проектах большого масштаба. Я сам до сих пор ее так и не прочитал, но от друзей слышал много хороших рекомендаций. Вон, даже Брагилевский советует!

Так в чем новость – авторы книги решили сделать ее бесплатной, так что можете посмотреть оглавление и прочитать любую главу.
🔥35👍8💅4🤡1🌭1
Что происходит, когда вы переходите в браузере по ссылке

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

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

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

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

Перевод на русский язык
👍35💅12😱2🤡2🗿2🌭1
Text modifiers в SwiftUI

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

Перевод на русский язык
👍17💅5🔥3🌭1
Релиз Pulse 3

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

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

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

Перевод на русский язык
👍38💅3🤡2❤‍🔥1🔥1🌭1
Туториал по make для Swift разработчиков

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

Перевод на русский язык
🔥25💅13🤡10👎2👍1🌭1