Как организован доступ к дебажному меню вашего приложения?
Anonymous Poll
31%
Нужно совершить секретный жест или серию действий
3%
Активируется через Configuration Profile
40%
Вырезается из релизных сборок на #ifdef или другим способом
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 при миграции
Для затравки несколько самых интересных:
🛗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, которые дадут возможность работать со ссылочными типами.
- По ссылке в заголовке – детальный разбор проблем и дизайн предлагаемого решения. Почитать обсуждение питча можно тут.
- let и var при инициализации копируют значения. Часть копирований оптимизируется компилятором. Но иногда оставшиеся копирования могут повлечь за собой проблемы с производительностью.
- Кроме того, полноценный интероп Swift и C++ принесет новую проблему – нужно будет уметь работать с типами, которые вообще не поддерживают копирования.
- В питче предлагается добавить в язык два новых ключевика – borrow и inout, которые дадут возможность работать со ссылочными типами.
- По ссылке в заголовке – детальный разбор проблем и дизайн предлагаемого решения. Почитать обсуждение питча можно тут.
🤡34💅14🤔6🤬3🔥2❤1👍1🌭1
Как читать ассемблерный код
Не знаю, зачем вам может пригодиться этот скилл, но вдруг. Автор разбирает два основных ассемблерных синтаксиса, структуру команд, значение регистров, и предлагает несколько простых мнемоник, чтобы вам было проще все запомнить.
Потренироваться и посмотреть на ассемблерный код программ на разных языках можно с помощью сервиса Compiler Explorer.
Перевод на русский язык
Не знаю, зачем вам может пригодиться этот скилл, но вдруг. Автор разбирает два основных ассемблерных синтаксиса, структуру команд, значение регистров, и предлагает несколько простых мнемоник, чтобы вам было проще все запомнить.
Потренироваться и посмотреть на ассемблерный код программ на разных языках можно с помощью сервиса Compiler Explorer.
Перевод на русский язык
🔥27💅9☃1🌭1
Настройка интерактивных превью для 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...
💅18👍4🤡1🌭1
DI библиотека от Pointfree
2023 только начался, а уже выпущена новая библиотека для dependency injection – swift-dependencies.
🎨Предназначена в первую очередь для SwiftUI, но может использоваться и во фреймворках или UIKit приложениях.
🛠️Дает возможность оверрайдить как весь граф зависимостей, так и скоуп конкретного модуля.
🧱Уже используется под капотом в ТСА.
GitHub
Документация
Перевод на русский язык
2023 только начался, а уже выпущена новая библиотека для dependency injection – swift-dependencies.
🎨Предназначена в первую очередь для SwiftUI, но может использоваться и во фреймворках или UIKit приложениях.
🛠️Дает возможность оверрайдить как весь граф зависимостей, так и скоуп конкретного модуля.
🧱Уже используется под капотом в ТСА.
GitHub
Документация
Перевод на русский язык
🤡27❤18👍2💅2👎1🌭1
Книга «Software Engineering at Google» стала бесплатной
SWE at Google – довольно популярная книга про хорошие инженерные практики, применяемые на проектах большого масштаба. Я сам до сих пор ее так и не прочитал, но от друзей слышал много хороших рекомендаций. Вон, даже Брагилевский советует!
Так в чем новость – авторы книги решили сделать ее бесплатной, так что можете посмотреть оглавление и прочитать любую главу.
SWE at Google – довольно популярная книга про хорошие инженерные практики, применяемые на проектах большого масштаба. Я сам до сих пор ее так и не прочитал, но от друзей слышал много хороших рекомендаций. Вон, даже Брагилевский советует!
Так в чем новость – авторы книги решили сделать ее бесплатной, так что можете посмотреть оглавление и прочитать любую главу.
🔥35👍8💅4🤡1🌭1
Что происходит, когда вы переходите в браузере по ссылке
Один из старейших вопросов, которые задают на технических интервью – «Что происходит, когда вы вбиваете в браузере адрес сайта и нажимаете Enter?». Мобильщикам, конечно, его задают реже, чем фронтендерам и бэкендерам, но с какими-то его вариациями легко можно столкнуться.
Автор проекта решил подготовить ультимативный ответ на этот вопрос, и с помощью сообщества собрал максимально подробный гайд, в котором разбирается:
⌨️Как железо обрабатывает нажатия кнопок на клавиатуре
🔀Весь путь сетевого запроса, включая даже то, что происходит на свитче
🤔Детали того, как открываются сокеты
И куча других интересных вещей, часть из которых вам может пригодиться, а часть – просто расширит кругозор.
Перевод на русский язык
Один из старейших вопросов, которые задают на технических интервью – «Что происходит, когда вы вбиваете в браузере адрес сайта и нажимаете Enter?». Мобильщикам, конечно, его задают реже, чем фронтендерам и бэкендерам, но с какими-то его вариациями легко можно столкнуться.
Автор проекта решил подготовить ультимативный ответ на этот вопрос, и с помощью сообщества собрал максимально подробный гайд, в котором разбирается:
⌨️Как железо обрабатывает нажатия кнопок на клавиатуре
🔀Весь путь сетевого запроса, включая даже то, что происходит на свитче
🤔Детали того, как открываются сокеты
И куча других интересных вещей, часть из которых вам может пригодиться, а часть – просто расширит кругозор.
Перевод на русский язык
👍35💅12😱2🤡2🗿2🌭1
Text modifiers в SwiftUI
- Эти модификаторы можно использовать вместе с интерполяцией строк, что упрощает сбор строки с разными стилями.
- Текстовые модификаторы возвращают Text, а не some View, в отличие от обычных модификаторов.
- Если вам часто приходится комбинировать несколько текстовых модификаторов, то можно сделать код чище, вынеся их в отдельную extension функцию.
Перевод на русский язык
- Эти модификаторы можно использовать вместе с интерполяцией строк, что упрощает сбор строки с разными стилями.
- Текстовые модификаторы возвращают Text, а не some View, в отличие от обычных модификаторов.
- Если вам часто приходится комбинировать несколько текстовых модификаторов, то можно сделать код чище, вынеся их в отдельную extension функцию.
Перевод на русский язык
👍17💅5🔥3🌭1
Релиз Pulse 3
Pulse – большой продукт, построенный вокруг работы с логами для iOS/macOS приложений. Основная идея – записывать все логи и сетевые запросы и давать удобные инструменты их анализа и фильтрации. В Pulse входят сама библиотека и приложения под все платформы, даже под tvOS.
Основные изменения в новом релизе:
🎨Редизайн встраиваемого в приложение дебажного меню, с упором на более простую навигацию и удобную работу с текстовыми данными
🔒Новый API для фильтрации секьюрных данных на уровне логирования
⌚️Полностью переработанные watchOS и tvOS приложения
Перевод на русский язык
Pulse – большой продукт, построенный вокруг работы с логами для iOS/macOS приложений. Основная идея – записывать все логи и сетевые запросы и давать удобные инструменты их анализа и фильтрации. В Pulse входят сама библиотека и приложения под все платформы, даже под tvOS.
Основные изменения в новом релизе:
🎨Редизайн встраиваемого в приложение дебажного меню, с упором на более простую навигацию и удобную работу с текстовыми данными
🔒Новый API для фильтрации секьюрных данных на уровне логирования
⌚️Полностью переработанные watchOS и tvOS приложения
Перевод на русский язык
👍38💅3🤡2❤🔥1🔥1🌭1
Туториал по make для Swift разработчиков
make – одна из древнейших билд систем, которая упрощает запуск сложных команд в консоли. Ее удобно использовать для автоматизации частых рутинных действий. В статье приводится несколько примеров того, как с помощью make автоматизировать различные задачи, связанные со сборкой, деплоем, тестированием и удалением Swift пакетов.
Перевод на русский язык
make – одна из древнейших билд систем, которая упрощает запуск сложных команд в консоли. Ее удобно использовать для автоматизации частых рутинных действий. В статье приводится несколько примеров того, как с помощью make автоматизировать различные задачи, связанные со сборкой, деплоем, тестированием и удалением Swift пакетов.
Перевод на русский язык
🔥25💅13🤡10👎2👍1🌭1
Серия статей про работу с внутренними покупками
Автор разбирает все аспекты работы с внутренними покупками на 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.
🌭11👍8🔥3💅1
This media is not supported in your browser
VIEW IN TELEGRAM
xcmonkey – инструмент для monkey-тестирования
Monkey-тестирование – это рандомные или псевдорандомные действия с интерфейсом приложения, задача которых – спровоцировать креши или другие проблемы, на которые не наткнулись разработчики или тестировщики.
xcmonkey – один из нескольких инструментов, реализующих такое поведение в iOS приложениях. У него есть доступ к иерархии вьюшек, поэтому он работает достаточно умно, имитируя действия не со случайными точками на экране, а с конкретными элементами. Умеет симулировать тачи, свайпы и другие жесты.
Monkey-тестирование – это рандомные или псевдорандомные действия с интерфейсом приложения, задача которых – спровоцировать креши или другие проблемы, на которые не наткнулись разработчики или тестировщики.
xcmonkey – один из нескольких инструментов, реализующих такое поведение в iOS приложениях. У него есть доступ к иерархии вьюшек, поэтому он работает достаточно умно, имитируя действия не со случайными точками на экране, а с конкретными элементами. Умеет симулировать тачи, свайпы и другие жесты.
🤔24👍11🔥4❤🔥1🌭1💅1
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.
👍10❤1🌭1💅1
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, создадите командный дипломный проект, повторяющий рабочие условия. Дипломом…
🤡106💅22👎10👍3🌭3
Почему 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.
🤯37👍6👎4🤡2🌭1
История дебага странного поведения 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.
👍12💅7🌭1
С чего начать путь в 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
🤡64💅4👍1🌭1