Как работает модификатор aspectRatio
Aspect Ratio в SwiftUI часто работает не так, как от него ожидается. Чтобы разобраться в том, как именно его использование влияет на процесс лэйаута, автор проводит серию экспериментов.
Aspect Ratio в SwiftUI часто работает не так, как от него ожидается. Чтобы разобраться в том, как именно его использование влияет на процесс лэйаута, автор проводит серию экспериментов.
Курсы для начинающих айосеров от Apple
Apple решили собрать свой набор видеоуроков для тех, кто только вкатывается в iOS.
🎨SwiftUI: интерфейсы, навигация, управление стейтом, хранение данных, многопоточность
🧱UIKit: работа с коллекциями, анимации, системные фреймворки
🛠️Работа с сетью и тесты
В процессе прохождения курса разрабатывается несколько учебных проектов. Курс расчитан на 15 часов.
Apple решили собрать свой набор видеоуроков для тех, кто только вкатывается в iOS.
🎨SwiftUI: интерфейсы, навигация, управление стейтом, хранение данных, многопоточность
🧱UIKit: работа с коллекциями, анимации, системные фреймворки
🛠️Работа с сетью и тесты
В процессе прохождения курса разрабатывается несколько учебных проектов. Курс расчитан на 15 часов.
Если ИТ – это ваш конек, то Тинькофф ждет вас 23 января на катке в московском Парке Горького!
Ледовый ИТ-квест, нетворкинг, дискуссии со спикерами в теплом шатре и многое другое. Вечер точно будет насыщенным и приятным. За коньки не беспокойтесь — их выдадут бесплатно.
Не медлите, регистрируйтесь сами и зовите коллег — будет весело!
Ледовый ИТ-квест, нетворкинг, дискуссии со спикерами в теплом шатре и многое другое. Вечер точно будет насыщенным и приятным. За коньки не беспокойтесь — их выдадут бесплатно.
Не медлите, регистрируйтесь сами и зовите коллег — будет весело!
Как предоставлять Export Compliance Information
Помните тот вопрос, который App Store Connect задает каждый раз при заливе новой версии: «Does your app use encryption?» Держите максимально подробный гайд про то, как следует себя вести.
*️⃣В большинстве случаев, если вы не заполните self-classification report, ничего страшного не случится. Но формально это требуется обязательно, даже если вы просто используете https или встроенные в SDK криптографические алгоритмы.
*️⃣Для бесплатных приложений отчет требуется заполнять только один раз, для платных – каждый год. Заполнить и отправить отчет надо в промежуток с 1 января до 1 февраля.
*️⃣Сгенерировать отчет можно здесь. После этого его надо будет отправить на почты [email protected] и [email protected].
*️⃣Если вы не успели отправить отчеты – не критично. Подождите до следующего 1 января.
Перевод на русский язык
Помните тот вопрос, который App Store Connect задает каждый раз при заливе новой версии: «Does your app use encryption?» Держите максимально подробный гайд про то, как следует себя вести.
*️⃣В большинстве случаев, если вы не заполните self-classification report, ничего страшного не случится. Но формально это требуется обязательно, даже если вы просто используете https или встроенные в SDK криптографические алгоритмы.
*️⃣Для бесплатных приложений отчет требуется заполнять только один раз, для платных – каждый год. Заполнить и отправить отчет надо в промежуток с 1 января до 1 февраля.
*️⃣Сгенерировать отчет можно здесь. После этого его надо будет отправить на почты [email protected] и [email protected].
*️⃣Если вы не успели отправить отчеты – не критично. Подождите до следующего 1 января.
Перевод на русский язык
annual-self-classification-report.github.io
BIS Annual Self-Classification Report Generator
Fill in the form, and generate a report. Could it be any simpler?
This media is not supported in your browser
VIEW IN TELEGRAM
Коллекция SwiftUI анимаций
Большая подборка сниппетов с анимациями на SwiftUI. Некоторые из них повторяют поведение системных компонентов, а некоторые – уникальные.
Большая подборка сниппетов с анимациями на SwiftUI. Некоторые из них повторяют поведение системных компонентов, а некоторые – уникальные.
Подходы к тестированию в больших компаниях
Огромное обсуждение на форуме Mobile Native Foundation про то, как разные крупные компании подходят к организации тестирования. Ветка довольно старая, но в ней периодически появляются новые истории. Вот несколько интересных хайлайтов:
✨Испанцы Karumi выложили в опенсорс свои гайды по тестированию (скриншотные тесты, property-based тесты, HTTP стабы)
✨В Spotify 32.000 тестов разных видов.
✨Target получают большую часть полезного фидбэка не от тестов, а от программы Beta тестирования в TestFlight.
Если вы занимаетесь организацией процессов релизов или тестирования, то в любом случае рекомендую прочитать всю ветку.
Огромное обсуждение на форуме Mobile Native Foundation про то, как разные крупные компании подходят к организации тестирования. Ветка довольно старая, но в ней периодически появляются новые истории. Вот несколько интересных хайлайтов:
✨Испанцы Karumi выложили в опенсорс свои гайды по тестированию (скриншотные тесты, property-based тесты, HTTP стабы)
✨В Spotify 32.000 тестов разных видов.
✨Target получают большую часть полезного фидбэка не от тестов, а от программы Beta тестирования в TestFlight.
Если вы занимаетесь организацией процессов релизов или тестирования, то в любом случае рекомендую прочитать всю ветку.
GitHub
Testing strategies · MobileNativeFoundation/discussions · Discussion #6
I'm curious to hear from folks about their general testing strategies, automated or manual, and what has been the most useful over time for your apps.
7 февраля протухает WWDR сертификат для валидации покупок
🤔Кого затронет проблема:
Тех, кто валидирует покупки, не используя AppTransaction/Transaction API или серверную ручку verifyReceipt, а вместо этого хардкодит сертификат в приложении и проверяет покупку в клиентском коде.
💻Что делать:
- В идеале – отказаться от хардкода сертификата и выбрать один из рекомендуемых методов валидации.
- В худшем случае – обновить захардкоженный сертификат и вспомнить о проблеме снова через несколько лет.
Перевод на русский язык
🤔Кого затронет проблема:
Тех, кто валидирует покупки, не используя AppTransaction/Transaction API или серверную ручку verifyReceipt, а вместо этого хардкодит сертификат в приложении и проверяет покупку в клиентском коде.
💻Что делать:
- В идеале – отказаться от хардкода сертификата и выбрать один из рекомендуемых методов валидации.
- В худшем случае – обновить захардкоженный сертификат и вспомнить о проблеме снова через несколько лет.
Перевод на русский язык
Revenuecat
App Store receipt signing certificate changes in 2023
In February of 2023, your hardcoded WWDR intermediate certificate for App Store receipt signing will stop working. This is how you fix it
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 стоит ждать не раньше, чем через год.
Разработчики Swift стараются развивать язык, не ломая обратную совместимость на уровне исходников. Это значит, что код, компилируемый Swift 4, будет собираться и Swift 5. Для примера, появление Swift Concurrency ничего не сломало в старом коде.
В Swift 6 должно выкатиться много важных для языка изменений, ради которых готовы пожертвовать обратной совместимостью. Большая их часть касается одной из трех областей:
🏇Data-race safety by default
🏎️Performance predictability
🧱Package ecosystem scalability
В Swift 5.8 появится возможность включить часть из этих ломающих фичей, чтобы вы могли заранее подготовить свою кодовую базу к миграции. Но времени еще много, Swift 6 стоит ждать не раньше, чем через год.
Swift Forums
Design Priorities for the Swift 6 Language Mode
As Swift evolves, it gains new features and enhancements as govered by the Swift Evolution process. Once implemented, new features become available in new versions of the tools, e.g., async/await was first available in the Swift 5.5 tools, and one will need…
Обзор линкеров для iOS/macOS
- Линкинг – один из этапов билда, на который может уходить довольно много времени, особенно в случае больших приложений. Если вы оптимизируете скорость сборки, это один из кандидатов на улучшение.
- Apple долгое время не вкладывались в ускорение своего основного линкера, ld64. В 2020 году автор выпустил свой форк этого линкера, zld, который работал на 40% быстрее.
- С тех пор появился третий проект, lld, который в основном поддерживается Google и Meta. Кроме того, Apple существенно улучшили ld64, и постепенно набирает обороты быстрый коммерческий линкер sold.
- Сейчас, если вы хотите получить более быстрый линкинг, разумнее всего использовать lld. Это может вам дать ускорение на 50-80%. Обратите внимание – это верно для дебажных билдов, релизные лучше собирать стандартным линкером.
- В статье автор рассказывает, почему решил прекратить поддержку своего линкера, и насыпает много ссылок про технические детали.
Перевод на русский язык
- Линкинг – один из этапов билда, на который может уходить довольно много времени, особенно в случае больших приложений. Если вы оптимизируете скорость сборки, это один из кандидатов на улучшение.
- Apple долгое время не вкладывались в ускорение своего основного линкера, ld64. В 2020 году автор выпустил свой форк этого линкера, zld, который работал на 40% быстрее.
- С тех пор появился третий проект, lld, который в основном поддерживается Google и Meta. Кроме того, Apple существенно улучшили ld64, и постепенно набирает обороты быстрый коммерческий линкер sold.
- Сейчас, если вы хотите получить более быстрый линкинг, разумнее всего использовать lld. Это может вам дать ускорение на 50-80%. Обратите внимание – это верно для дебажных билдов, релизные лучше собирать стандартным линкером.
- В статье автор рассказывает, почему решил прекратить поддержку своего линкера, и насыпает много ссылок про технические детали.
Перевод на русский язык
Michael Eisel’s Blog
Faster Apple Builds with the lld Linker
Update: with the release of ld-prime, the new default linker, lld is no longer necessarily the fastest option
This media is not supported in your browser
VIEW IN TELEGRAM
Новые фичи автокомплита кода в Xcode 14
- Генерация предзаполненных инициализаторов для структур
- Генерация бойлерплейта для Codable
- Корректная обработка параметров структур, у которых есть дефолтное значение
- Автоподстановка аргументов в функцию map, основываясь на названии создаваемой переменной (как в гифке в заголовке)
- Автоматическое выравнивание кода в блоках
Это только часть изменений, все остальные – в статье. У Xcode куча проблем, но попробовать новые фичи все равно стоит – они могут упростить некоторые частве сценарии и сделать вашу жизнь чуть лучше.
Перевод на русский язык
- Генерация предзаполненных инициализаторов для структур
- Генерация бойлерплейта для Codable
- Корректная обработка параметров структур, у которых есть дефолтное значение
- Автоподстановка аргументов в функцию map, основываясь на названии создаваемой переменной (как в гифке в заголовке)
- Автоматическое выравнивание кода в блоках
Это только часть изменений, все остальные – в статье. У Xcode куча проблем, но попробовать новые фичи все равно стоит – они могут упростить некоторые частве сценарии и сделать вашу жизнь чуть лучше.
Перевод на русский язык
Как поддержать несколько разных виджетов в одном приложении
- Apple предлагает два подхода к поддержке нескольких виджетов: использовать widget bundle или создавать несколько разных widget extensions.
- У бандла есть ограничение на 10 виджетов внутри. Его теоретически можно обойти.
- Apple рекомендует в большинстве случаев использовать бандлы, а ко второму способу обращаться только в специфичных случаях. Например, когда только одному из них для работы требуется какой-то пермишн от пользователя.
Перевод на русский язык
- Apple предлагает два подхода к поддержке нескольких виджетов: использовать widget bundle или создавать несколько разных widget extensions.
- У бандла есть ограничение на 10 виджетов внутри. Его теоретически можно обойти.
- Apple рекомендует в большинстве случаев использовать бандлы, а ко второму способу обращаться только в специфичных случаях. Например, когда только одному из них для работы требуется какой-то пермишн от пользователя.
Перевод на русский язык
Способы выдать доступ к дебажному меню
*️⃣Показывать меню только пользователям TestFlight, проверяя App Store receipt URL.
*️⃣Показывать меню после серии специальных жестов. Минус в том, что такое меню могут легко обнаружить случайно.
*️⃣Показывать меню тем, кто откроет приложение с помощью специальной URL схемы.
*️⃣Если в приложении есть авторизация, то дебажное меню можно активировать только для определенных аккаунтов.
*️⃣Показывать меню тем, на чьих девайсах стоит специальный Configuration Profile.
Перевод на русский язык
*️⃣Показывать меню только пользователям TestFlight, проверяя App Store receipt URL.
*️⃣Показывать меню после серии специальных жестов. Минус в том, что такое меню могут легко обнаружить случайно.
*️⃣Показывать меню тем, кто откроет приложение с помощью специальной URL схемы.
*️⃣Если в приложении есть авторизация, то дебажное меню можно активировать только для определенных аккаунтов.
*️⃣Показывать меню тем, на чьих девайсах стоит специальный Configuration Profile.
Перевод на русский язык
blog.sidetrack.app
Securely debugging your app in production • Sidetrack
Some of the earliest known cheat codes and secret debug menus date back to the 1980s, but with today’s technology and security in mind - what option works best for your app?
Как организован доступ к дебажному меню вашего приложения?
Anonymous Poll
31%
Нужно совершить секретный жест или серию действий
3%
Активируется через Configuration Profile
40%
Вырезается из релизных сборок на #ifdef или другим способом
3%
Открывается URL схемой
7%
Доступно под определенными аккаунтами пользователей приложения
0%
Активируется особенным пуш-уведомлением
2%
Другой способ (рассказать в комментариях)
15%
Нет дебажного меню
22%
Посмотреть результаты
Плейлист докладов с конференции Swiftable
Для затравки несколько самых интересных:
🛗Elevated Swift от Soroush Khanlou: решение задачи Кнута о лифте
🧱Platformizing features at Spotify: про компонентную архитектуру огромного приложения
🎨Adopting SwiftUI at scale: про проблемы, которые встретил Bumble при миграции
Для затравки несколько самых интересных:
🛗Elevated Swift от Soroush Khanlou: решение задачи Кнута о лифте
🧱Platformizing features at Spotify: про компонентную архитектуру огромного приложения
🎨Adopting SwiftUI at scale: про проблемы, которые встретил Bumble при миграции
Питч по добавлению borrow и inout в Swift
- let и var при инициализации копируют значения. Часть копирований оптимизируется компилятором. Но иногда оставшиеся копирования могут повлечь за собой проблемы с производительностью.
- Кроме того, полноценный интероп Swift и C++ принесет новую проблему – нужно будет уметь работать с типами, которые вообще не поддерживают копирования.
- В питче предлагается добавить в язык два новых ключевика – borrow и inout, которые дадут возможность работать со ссылочными типами.
- По ссылке в заголовке – детальный разбор проблем и дизайн предлагаемого решения. Почитать обсуждение питча можно тут.
- let и var при инициализации копируют значения. Часть копирований оптимизируется компилятором. Но иногда оставшиеся копирования могут повлечь за собой проблемы с производительностью.
- Кроме того, полноценный интероп Swift и C++ принесет новую проблему – нужно будет уметь работать с типами, которые вообще не поддерживают копирования.
- В питче предлагается добавить в язык два новых ключевика – borrow и inout, которые дадут возможность работать со ссылочными типами.
- По ссылке в заголовке – детальный разбор проблем и дизайн предлагаемого решения. Почитать обсуждение питча можно тут.
Как читать ассемблерный код
Не знаю, зачем вам может пригодиться этот скилл, но вдруг. Автор разбирает два основных ассемблерных синтаксиса, структуру команд, значение регистров, и предлагает несколько простых мнемоник, чтобы вам было проще все запомнить.
Потренироваться и посмотреть на ассемблерный код программ на разных языках можно с помощью сервиса Compiler Explorer.
Перевод на русский язык
Не знаю, зачем вам может пригодиться этот скилл, но вдруг. Автор разбирает два основных ассемблерных синтаксиса, структуру команд, значение регистров, и предлагает несколько простых мнемоник, чтобы вам было проще все запомнить.
Потренироваться и посмотреть на ассемблерный код программ на разных языках можно с помощью сервиса Compiler Explorer.
Перевод на русский язык
Настройка интерактивных превью для SwiftUI вьюх со стейтом
В статье разбирается несколько способов, которыми можно подключить интерактивные превью в Xcode для вьюх, правильное отображение которых требует передачи стейта.
Основной способ, который рекомендует Apple – завернуть все в отдельную вьюху контейнер, которая будет содержать в себе требуемый стейт. Вот пример такого контейнера, который можно переиспользовать для всех таких случаев.
Перевод на русский язык
В статье разбирается несколько способов, которыми можно подключить интерактивные превью в Xcode для вьюх, правильное отображение которых требует передачи стейта.
Основной способ, который рекомендует Apple – завернуть все в отдельную вьюху контейнер, которая будет содержать в себе требуемый стейт. Вот пример такого контейнера, который можно переиспользовать для всех таких случаев.
Перевод на русский язык
Apple Developer
Structure your app for SwiftUI previews - WWDC20 - Videos - Apple Developer
When you use SwiftUI previews during development, you can quickly create apps that are more flexible and maintainable. Discover ways to...
DI библиотека от Pointfree
2023 только начался, а уже выпущена новая библиотека для dependency injection – swift-dependencies.
🎨Предназначена в первую очередь для SwiftUI, но может использоваться и во фреймворках или UIKit приложениях.
🛠️Дает возможность оверрайдить как весь граф зависимостей, так и скоуп конкретного модуля.
🧱Уже используется под капотом в ТСА.
GitHub
Документация
Перевод на русский язык
2023 только начался, а уже выпущена новая библиотека для dependency injection – swift-dependencies.
🎨Предназначена в первую очередь для SwiftUI, но может использоваться и во фреймворках или UIKit приложениях.
🛠️Дает возможность оверрайдить как весь граф зависимостей, так и скоуп конкретного модуля.
🧱Уже используется под капотом в ТСА.
GitHub
Документация
Перевод на русский язык
Книга «Software Engineering at Google» стала бесплатной
SWE at Google – довольно популярная книга про хорошие инженерные практики, применяемые на проектах большого масштаба. Я сам до сих пор ее так и не прочитал, но от друзей слышал много хороших рекомендаций. Вон, даже Брагилевский советует!
Так в чем новость – авторы книги решили сделать ее бесплатной, так что можете посмотреть оглавление и прочитать любую главу.
SWE at Google – довольно популярная книга про хорошие инженерные практики, применяемые на проектах большого масштаба. Я сам до сих пор ее так и не прочитал, но от друзей слышал много хороших рекомендаций. Вон, даже Брагилевский советует!
Так в чем новость – авторы книги решили сделать ее бесплатной, так что можете посмотреть оглавление и прочитать любую главу.