Малоизвестные возможности цветовой палитры в Xcode
- Палитру можно вызывать не только через меню инструментов, но и через цветовые литералы прямо из кода
- Можно создавать свои палитры цветов и переиспользовать их между проектами
- Цветам в палитре можно задавать названия и использовать их как литералы
- Можно прямо в Xcode сгенерировать свою цветовую палитру на основе любого изображения
- Палитру можно вызывать не только через меню инструментов, но и через цветовые литералы прямо из кода
- Можно создавать свои палитры цветов и переиспользовать их между проектами
- Цветам в палитре можно задавать названия и использовать их как литералы
- Можно прямо в Xcode сгенерировать свою цветовую палитру на основе любого изображения
👍24🔥4❤🔥1
Как работать с типом Measurement в Swift Charts
Foundation предоставляет удобный тип для работы с любым типом измерений – Measurement. Но по умолчанию он пока что не работает со Swift Charts. В статье рассматривается несколько вариантов, как решить эту проблему.
Foundation предоставляет удобный тип для работы с любым типом измерений – Measurement. Но по умолчанию он пока что не работает со Swift Charts. В статье рассматривается несколько вариантов, как решить эту проблему.
👍1
TableView: reload vs reconfigure
Начиная с iOS 15 в UITableView и UICollectionView появился метод reconfigure. В отличие от reload он не пересоздает ячейку с нуля, а обновляет существующую. По ссылке можно прочитать детали про алгоритм его работы.
Начиная с iOS 15 в UITableView и UICollectionView появился метод reconfigure. В отличие от reload он не пересоздает ячейку с нуля, а обновляет существующую. По ссылке можно прочитать детали про алгоритм его работы.
Twitter
iOS 15 introduces a new way for you to conveniently update content displayed in existing cells in UICollectionView and UITableView: reconfigure.
When and why should you use reconfigure? How is it different from reloading an item or row?
Let’s dive in with…
When and why should you use reconfigure? How is it different from reloading an item or row?
Let’s dive in with…
👍51🌭6🔥5🤡4🤔3🤬1
Советы по тестированию кастомных Codable инициализаторов
- Кастомную сериализацию нужно тестировать так же, как и другую бизнес-логику
- Кастомный codable init лучше объявлять в экстеншне, чтобы не потерять memberwise init, генерируемый компилятором
- Проверочный объект создаете вручную через memberwise init, а проверяемый – на основе JSON
- Чтобы получить полезный аутпут теста о том, что конкретно отличается в объектах, попробуйте библиотеку Difference
- Кастомную сериализацию нужно тестировать так же, как и другую бизнес-логику
- Кастомный codable init лучше объявлять в экстеншне, чтобы не потерять memberwise init, генерируемый компилятором
- Проверочный объект создаете вручную через memberwise init, а проверяемый – на основе JSON
- Чтобы получить полезный аутпут теста о том, что конкретно отличается в объектах, попробуйте библиотеку Difference
👍19🔥2👎1
Как включить Stage Manager в iPad симуляторе
Стандартный ответ на вопрос – внести правки в .GlobalPreferences.plist на симуляторе, что не очень удобно. Но есть вариант попроще:
Стандартный ответ на вопрос – внести правки в .GlobalPreferences.plist на симуляторе, что не очень удобно. Но есть вариант попроще:
xcrun simctl spawn booted defaults write -g SBChamoisWindowingEnabled -bool true.
👍3🕊2❤1
Loco – линтер для Localization.strings
Линтер умеет делать следующие проверки:
- Непереведенные строки в Swift коде
- Пропущенные ключи в каких-то из локализаций
- Ключи-дубликаты
- Неиспользуемые ключи
Линтер умеет делать следующие проверки:
- Непереведенные строки в Swift коде
- Пропущенные ключи в каких-то из локализаций
- Ключи-дубликаты
- Неиспользуемые ключи
🔥98👍12👎2
Подробный пост про Grids в SwiftUI
👀Сравнение разных типов контейнеров
☎️Разбор настройки Spacing, Alignment, Width/Height
✡️Реализация шестиугольных ячеек
💻Семпловый проект Grid Trainer, в котором можно поиграться самостоятельно со всеми настройками
👀Сравнение разных типов контейнеров
☎️Разбор настройки Spacing, Alignment, Width/Height
✡️Реализация шестиугольных ячеек
💻Семпловый проект Grid Trainer, в котором можно поиграться самостоятельно со всеми настройками
🔥30
Когда вы интегрируете рекламные SDK в приложение, готовьтесь: будет много проблем. Не всегда очевидных. Но всегда сильно раздражающих.
Ребята из FUNCORP подготовили список таких «граблей» — а заодно объяснили, как работает реклама в приложениях под капотом. Бонус: в статье есть код, который решает самые бесячие проблемы.
Читать здесь.
Ребята из FUNCORP подготовили список таких «граблей» — а заодно объяснили, как работает реклама в приложениях под капотом. Бонус: в статье есть код, который решает самые бесячие проблемы.
Читать здесь.
👍18👎1
Лайфхак для тестирования готовности приложения к интернационализации строк
Если вы укажете
Есть еще несколько способов включить этот режим:
- Scheme Editor -> Application Language -> Double Length Pseudolanguage
- Interface Builder -> Preview Assistant Editor -> Double Length
Если вы укажете
NSDoubleLocalizedStrings
в качестве Launch Argument, все строки в приложении автоматически продублируются. Благодаря этому можно посмотреть, как приложение справляется с более длинными строками.Есть еще несколько способов включить этот режим:
- Scheme Editor -> Application Language -> Double Length Pseudolanguage
- Interface Builder -> Preview Assistant Editor -> Double Length
🔥69👍13🤡7🤯3
This media is not supported in your browser
VIEW IN TELEGRAM
Туториал по реализации клона Apple Calculator на SwiftUI
- Разбор того, как правильно декомпозировать калькулятор на View слое
- Поэтапная реализация всех компонентов калькулятора
- Исходники на GitHub
- Разбор того, как правильно декомпозировать калькулятор на View слое
- Поэтапная реализация всех компонентов калькулятора
- Исходники на GitHub
👍21😁4🤡4🔥1
Пошаговая реализация анимации с melting эффектом
Разбор сложных анимаций – это всегда интересно. В этой статье рассказывается, как сделать анимацию перехода между экранами с «плавящим» эффектом.
Разбор сложных анимаций – это всегда интересно. В этой статье рассказывается, как сделать анимацию перехода между экранами с «плавящим» эффектом.
🔥21🤔6🤡3👍1👎1
SwiftUI не нужен MVVM
Автор сравнивает возможности SwiftUI с майрософтовским WPF, из чего делает вывод, что в SwiftUI ViewModel в большинстве случаев лишняя сущность.
Автор сравнивает возможности SwiftUI с майрософтовским WPF, из чего делает вывод, что в SwiftUI ViewModel в большинстве случаев лишняя сущность.
👎43👍17🤡10😁3🤬2🔥1
Неочевидные особенности разработки Live Activity
- Для запуска Live Activity из приложения не требуется явное подтверждение пользователя
- Приложение должно находиться в foreground для старта Activity
- Чтобы Activity обновлялась, нужно либо держать приложение в бэкграунде, либо использовать пуши
- Нет способа подстроить внешний вид и цветовую палитру под обои
- Анимации почти не кастомизируются
- Для запуска Live Activity из приложения не требуется явное подтверждение пользователя
- Приложение должно находиться в foreground для старта Activity
- Чтобы Activity обновлялась, нужно либо держать приложение в бэкграунде, либо использовать пуши
- Нет способа подстроить внешний вид и цветовую палитру под обои
- Анимации почти не кастомизируются
🔥17👎5🤡5👍2❤🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
ReMafoX – инструмент для простой локализации текстов
- ReMafoX – GUI для уже существующей CLI утилиты BartyCrouch
- Новые строки в Localizable.strings добавляются сразу же при определении их в Swift-файле
- Автоматический перевод строк на 40 языков
- Линтинг на тот случай, если какой-то ключ все-таки не перевелся
- Упрощенная работа с pluralized – их тоже можно определять и переводить, не закрывая исходный файл кода
- Скачать текущую актуальную версию можно здесь
- ReMafoX – GUI для уже существующей CLI утилиты BartyCrouch
- Новые строки в Localizable.strings добавляются сразу же при определении их в Swift-файле
- Автоматический перевод строк на 40 языков
- Линтинг на тот случай, если какой-то ключ все-таки не перевелся
- Упрощенная работа с pluralized – их тоже можно определять и переводить, не закрывая исходный файл кода
- Скачать текущую актуальную версию можно здесь
🔥49😱2👎1
SQLite – структуры данных под капотом
SQLite – одна из самых простых и благодаря этому надежных баз данных. В статье подробно рассматриваются алгоритмы кодирования данных в ней, используемые структуры данных и алгоритмы поиска по ним.
SQLite – одна из самых простых и благодаря этому надежных баз данных. В статье подробно рассматриваются алгоритмы кодирования данных в ней, используемые структуры данных и алгоритмы поиска по ним.
👍19
Успеть за 60 секунд
У вашего приложения есть 60 секунд на то, чтобы стартовать, иначе системный watchdog его убьет. Посмотрите на интересный кейс со стектрейсом – приложение не успевает запуститься за выделенное время, потому что система не выделяет ему на это ресурсы и занимает CPU чем-то другим.
У вашего приложения есть 60 секунд на то, чтобы стартовать, иначе системный watchdog его убьет. Посмотрите на интересный кейс со стектрейсом – приложение не успевает запуститься за выделенное время, потому что система не выделяет ему на это ресурсы и занимает CPU чем-то другим.
👍16
Content transition в SwiftUI
В последней версии SwiftUI появился встроенный механизм анимаций для изменений контента вьюшки. Например, текста или прозрачности TextView. Чтобы это заработало, достаточно просто использовать view modifier .contentTransition.
В последней версии SwiftUI появился встроенный механизм анимаций для изменений контента вьюшки. Например, текста или прозрачности TextView. Чтобы это заработало, достаточно просто использовать view modifier .contentTransition.
Swift with Majid
Content transition in SwiftUI
View transitions are available from the very first version of the SwiftUI framework. The framework can apply a particular transition whenever the view is removed or added to the view hierarchy. The latest iteration of the SwiftUI framework brings us a new…
🕊22👍13👎2🔥1
Воркшоп по KMM
Оптимальный способ использования KMM – взять бизнес-логику, уже реализованную в Android, и конвертировать ее в общий модуль, который будет работать и в iOS. 16 августа в 20:00 мск, Анна Жаркова расскажет, как конкретно Android код адаптируется для работы в iOS, про общую кроссплафторменную архитектуру и про то, какие подводные камни могут встретиться при реализации.
Вебинар пройдет в рамках специализации «iOS Developer» на онлайн-платформе OTUS.
Оптимальный способ использования KMM – взять бизнес-логику, уже реализованную в Android, и конвертировать ее в общий модуль, который будет работать и в iOS. 16 августа в 20:00 мск, Анна Жаркова расскажет, как конкретно Android код адаптируется для работы в iOS, про общую кроссплафторменную архитектуру и про то, какие подводные камни могут встретиться при реализации.
Вебинар пройдет в рамках специализации «iOS Developer» на онлайн-платформе OTUS.
👎19😁19👍6😢4
Проверка безопасности приложения на CI
- MobSF – коллекция инструментов для автоматизированных проверок безопасности
- Среди них есть mobsfscan, который проходит по всей кодовой базе и выдает отчет с уязвимостями
- Его можно запускать на CI и использовать результаты проверок как блокеры на PR
- Это решение не даст 100% гарантий безопасности, но поможет не допустить уже известные ошибки
- MobSF – коллекция инструментов для автоматизированных проверок безопасности
- Среди них есть mobsfscan, который проходит по всей кодовой базе и выдает отчет с уязвимостями
- Его можно запускать на CI и использовать результаты проверок как блокеры на PR
- Это решение не даст 100% гарантий безопасности, но поможет не допустить уже известные ошибки
Benoit Pasquier
Security Application Static Analysis applied to iOS and Gitlab CI
Security is a big topic in software engineering but how does it apply to mobile development? We care about user experience or mobile performance, security issues are rarely prioritized. This week, I’ll share how to integrate security tools into your CI pipeline…
👎3🤡3