Исследуем Dynamic Island и ActivityKit
Написали пост пост с краткой инструкцией по Dynamic Island, основанный на документации Apple. Недавно вышел гайд на русском языке.
#iOS16
Написали пост пост с краткой инструкцией по Dynamic Island, основанный на документации Apple. Недавно вышел гайд на русском языке.
#iOS16
👍4👎2
Save Time With User Breakpoints in Xcode
Облегчаем дебаггинг с помощью User Breakpoints:
🔥 Дефолтные значения в рантайме
Добавляем breakpoint, жмем правой кнопкой мыши, ставим галочку "Automatically continue after evaluating actions", чтобы исполнение не останавливалось. Затем нажимаем "Add action" и добавляем желаемое действие. Примеры на 1, 2, 3 скринах
🔥 Добавить принты в рантайме
Все аналогично пункту 1, для принта используем po, как на последнем скрине
#xcode
Облегчаем дебаггинг с помощью User Breakpoints:
🔥 Дефолтные значения в рантайме
Добавляем breakpoint, жмем правой кнопкой мыши, ставим галочку "Automatically continue after evaluating actions", чтобы исполнение не останавливалось. Затем нажимаем "Add action" и добавляем желаемое действие. Примеры на 1, 2, 3 скринах
🔥 Добавить принты в рантайме
Все аналогично пункту 1, для принта используем po, как на последнем скрине
#xcode
👍8🔥1
Build to latest iOS device without upgrading to latest Xcode (1 мин)
Как собирать проект на последней версии iOS без обновления Xcode?
👉 Скачайте файл для поддержки последней версии iOS здесь
👉 Затем поместить его в папку
👉 Перезапустите Xcode
👉 Включите Developer Mode (Settings > Privacy & Security > Developer Mode)
#xcode
Как собирать проект на последней версии iOS без обновления Xcode?
👉 Скачайте файл для поддержки последней версии iOS здесь
👉 Затем поместить его в папку
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
👉 Перезапустите Xcode
👉 Включите Developer Mode (Settings > Privacy & Security > Developer Mode)
#xcode
🔥4
Introducing The AppIntents Framework — A New Way to Integrate App’s Functionality Into the System
App Intents позволяет сделать доступными для системы контент и фичи ваших приложений. Можно реализовать поиск времени следующей встречи, получать информацию о том, где сейчас заказ или передать данные вашему приложению без его запуска, например, добавить событие в календарь. А затем использовать эти фичи в Shortcuts, Spotlight, Focus filters и Siri.
Intent состоит из:
👉 Metadata - информация об intent'е. Например, название в shortcuts
👉 Parameters - входные данные для intent'а (текст с клавиатуры, слова от Siri и т.д.)
👉 Perform method - для запуска функциональности intent'а
В качестве примера на скрине реализовали учет расходов.
#iOS16
App Intents позволяет сделать доступными для системы контент и фичи ваших приложений. Можно реализовать поиск времени следующей встречи, получать информацию о том, где сейчас заказ или передать данные вашему приложению без его запуска, например, добавить событие в календарь. А затем использовать эти фичи в Shortcuts, Spotlight, Focus filters и Siri.
Intent состоит из:
👉 Metadata - информация об intent'е. Например, название в shortcuts
👉 Parameters - входные данные для intent'а (текст с клавиатуры, слова от Siri и т.д.)
👉 Perform method - для запуска функциональности intent'а
В качестве примера на скрине реализовали учет расходов.
#iOS16
👍4👎1
Create a Scalable SwiftUI MVVM Project
MVVM состоит из следующих компонентов:
👉 View - компонент, который отображает свойства ViewModel, а также отлавливает взаимодействия с пользователям, вызывая ViewModel
👉 View Model инкапсулирует логику, включая вызовы API, обработку событий и данных, а также хранит важные свойства
👉 Model - представление данных. Объекты, созданные из результатов вызовов API
В статье более подробно описано то, как создать настоящий проект на данной архитектуре
#architecture
MVVM состоит из следующих компонентов:
👉 View - компонент, который отображает свойства ViewModel, а также отлавливает взаимодействия с пользователям, вызывая ViewModel
👉 View Model инкапсулирует логику, включая вызовы API, обработку событий и данных, а также хранит важные свойства
👉 Model - представление данных. Объекты, созданные из результатов вызовов API
В статье более подробно описано то, как создать настоящий проект на данной архитектуре
#architecture
❤3👎1
SwiftUI Lifecycle: How to Use SwiftUI for Optimal Performance
Жизненный цикл приложения на SwiftUI делится на следующие этапы:
👉 Инициализация - создание AppDelegate и scene, инициализация вью. Исполняется код, необходимый для старта приложения. Например, загрузка данных от API или создание БД
👉 Layout - определяется расположение вью на экране и их внешний вид. Также здесь можно задать анимации
👉 Рендеринг - на этой фазе определяется взаимодействие вьюшек с пользователем
Используя разные этапы жизненного цикла, вы можете оптимизировать перфоманс вашего приложения
#swiftUI
Жизненный цикл приложения на SwiftUI делится на следующие этапы:
👉 Инициализация - создание AppDelegate и scene, инициализация вью. Исполняется код, необходимый для старта приложения. Например, загрузка данных от API или создание БД
👉 Layout - определяется расположение вью на экране и их внешний вид. Также здесь можно задать анимации
👉 Рендеринг - на этой фазе определяется взаимодействие вьюшек с пользователем
Используя разные этапы жизненного цикла, вы можете оптимизировать перфоманс вашего приложения
#swiftUI
👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Fade the First and Last Elements in a UICollectionView
Как создать fade анимацию для UICollectionView нужно:
👉 В ячейке сделать функцию с анимированным fade'ом
👉 Во viewController'е реализуем
где получаем видимые ячейки
а затем проверяем, видимы ли они целиком
Если нет, то активируем анимацию в ячейке
#UI
Как создать fade анимацию для UICollectionView нужно:
👉 В ячейке сделать функцию с анимированным fade'ом
func updateCell(faded: Bool, animated: Bool = true)
👉 Во viewController'е реализуем
func scrollViewDidScroll(_ scrollView: UIScrollView)
,где получаем видимые ячейки
self.collectionView.indexPathsForVisibleItems
а затем проверяем, видимы ли они целиком
collectionView.bounds.contains(cellRect)
Если нет, то активируем анимацию в ячейке
#UI
❤3👎1
New in SwiftUI 4: Share Sheet with ShareLink
Учимся показывать ShareSheet по кнопке с превью на SwiftUI
#swiftUI
Учимся показывать ShareSheet по кнопке с превью на SwiftUI
#swiftUI
👍2
По случаю пятницы обзор статей о "токсичной продуктивности" в мире IT.
👉 Обязан ли разработчик развиваться? Популярно мнение, что разработчик обязан иметь блог, пет проект и выучить 10 языков программирования. Синдром самозванца и выгорание стали основой индустрии.
Вы не обязаны развиваться. Учиться, развиваться нужно вдумчиво и постепенно — умеренность защитит вашу психику и приведёт к лучшим результатам. Если вы уже выгорели — прекратите заниматься развитием и потратьте свои ресурсы на восстановление.
👉 Разработчики: не перерабатывайте. Люди, которые работают сверхурочно, — идеалисты. Они верят в систему. Оппортунисты, которые заполняют пробелы в способности компании зарабатывать деньги, в конечном итоге получают более высокие зарплаты и карьерный рост.
👉 Правило 3-х часов: Сколько нужно работать в день. Автор предлагает выделять 3 часа концентрации и внимания на работу, как ключ к победе над выгоранием
#softskills
👉 Обязан ли разработчик развиваться? Популярно мнение, что разработчик обязан иметь блог, пет проект и выучить 10 языков программирования. Синдром самозванца и выгорание стали основой индустрии.
Вы не обязаны развиваться. Учиться, развиваться нужно вдумчиво и постепенно — умеренность защитит вашу психику и приведёт к лучшим результатам. Если вы уже выгорели — прекратите заниматься развитием и потратьте свои ресурсы на восстановление.
👉 Разработчики: не перерабатывайте. Люди, которые работают сверхурочно, — идеалисты. Они верят в систему. Оппортунисты, которые заполняют пробелы в способности компании зарабатывать деньги, в конечном итоге получают более высокие зарплаты и карьерный рост.
👉 Правило 3-х часов: Сколько нужно работать в день. Автор предлагает выделять 3 часа концентрации и внимания на работу, как ключ к победе над выгоранием
#softskills
🔥6👍1
Пишем библиотеку для запроса оценки в AppStore
В продвижении приложения очень важную роль играет рейтинг приложения в AppStore. Показ запроса на оценку возможен только три раза в год, при условии что изменилась версия приложения и пользователь не отключил запрос оценки в настройках iOS.
Поэтому очень важно не потратить заветные три попытки впустую. В статье детали реализации модуля для удобного отображения запроса на оценку: ссылка на GitHub
#tools #appStore
В продвижении приложения очень важную роль играет рейтинг приложения в AppStore. Показ запроса на оценку возможен только три раза в год, при условии что изменилась версия приложения и пользователь не отключил запрос оценки в настройках iOS.
Поэтому очень важно не потратить заветные три попытки впустую. В статье детали реализации модуля для удобного отображения запроса на оценку: ссылка на GitHub
#tools #appStore
👍4👎1
Логи в iOS, эпизод 1: os_log
Console.app - специальное приложение для логов, встроенное в MacOS. Для поиска логов по приложению, в правом верхнем углу введите название приложения. В фильтрах указываем Library, тип матчинга Equals.
В Console.app не будут попадать принты. Их нужно заменить на os_log(), с уровнем логгирования, отличным от .debug. По уровню также можно настраивать фильтры. На скрине пример логирования с указанием модуля, файла и строчки.
#tools
Console.app - специальное приложение для логов, встроенное в MacOS. Для поиска логов по приложению, в правом верхнем углу введите название приложения. В фильтрах указываем Library, тип матчинга Equals.
В Console.app не будут попадать принты. Их нужно заменить на os_log(), с уровнем логгирования, отличным от .debug. По уровню также можно настраивать фильтры. На скрине пример логирования с указанием модуля, файла и строчки.
#tools
👍3👎1
WebView: забыть нельзя интегрировать
При разработке мобильного приложения iOS или Android рано или поздно может встать вопрос: «Реализовать фичу на WebView или же нативно?».
Плюсы:
👉 Сокращение общих затрат на разработку и TTM
👉 Синхронный Update на пользователей
👉 Возможности для команд без нативных разработчиков
Минусов довольно много, вот некоторые из них:
👉 Нет офлайн режима и продолжительность загрузки
👉 Проблемы с локальным хранением данных и работой в фоне
👉 Неконсистентность дизайна, проблемы с UI и навигацией
👉 Проблемы интеграции, версионирования, UI-тестирования
Когда использование WebView может быть уместно
👉 MVP и эксперимент
👉 Техническая невозможность реализовать иначе
👉 Фича максимально обособлена
👉 Простая задача
#разработка
При разработке мобильного приложения iOS или Android рано или поздно может встать вопрос: «Реализовать фичу на WebView или же нативно?».
Плюсы:
👉 Сокращение общих затрат на разработку и TTM
👉 Синхронный Update на пользователей
👉 Возможности для команд без нативных разработчиков
Минусов довольно много, вот некоторые из них:
👉 Нет офлайн режима и продолжительность загрузки
👉 Проблемы с локальным хранением данных и работой в фоне
👉 Неконсистентность дизайна, проблемы с UI и навигацией
👉 Проблемы интеграции, версионирования, UI-тестирования
Когда использование WebView может быть уместно
👉 MVP и эксперимент
👉 Техническая невозможность реализовать иначе
👉 Фича максимально обособлена
👉 Простая задача
#разработка
👍3👎1
How to create Rounded Corners Button in UIKit
В iOS 15, появились новые способы задать скругления кнопки через UIButton.Configuration:
👉 Через встроенный стиль со скругленными углами UIButton.Configuration.filled()
👉 Если дефолтное скругление не устраивает, можно задать cornerStyle у UIButton.Configuration (примеры на скрине)
👉 Если нужно задать определенное значение скругления, используйте configuration.background.cornerRadius, а затем установите configuration.cornerStyle в .fixed
#UI
В iOS 15, появились новые способы задать скругления кнопки через UIButton.Configuration:
👉 Через встроенный стиль со скругленными углами UIButton.Configuration.filled()
👉 Если дефолтное скругление не устраивает, можно задать cornerStyle у UIButton.Configuration (примеры на скрине)
👉 Если нужно задать определенное значение скругления, используйте configuration.background.cornerRadius, а затем установите configuration.cornerStyle в .fixed
#UI
👎3👍2
How to check if String is Number in Swift
Способы проверить, что строка является числом:
👉 Символы 0-9 через
👉 Больше символов: (๑๒๓, например)
👉 Еще больше символов ("⅚", "㊈"):
#swift
Способы проверить, что строка является числом:
👉 Символы 0-9 через
CharacterSet(charactersIn: self).isSubset(of: digitsCharacters)
, либо регулярку "^[0-9]*$"
👉 Больше символов: (๑๒๓, например)
CharacterSet(charactersIn: "искомая строка").isSubset(of: CharacterSet.decimalDigits)
👉 Еще больше символов ("⅚", "㊈"):
"искомая строка".allSatisfy { character in character.isNumber }
#swift
👎4🔥2
Replacing if let in Swift 5.7
В Swift 5.7 был упрощен синтаксис выражений if let и guard let. Теперь так:
В статье регулярка для быстрого рефакторинга
#swift
В Swift 5.7 был упрощен синтаксис выражений if let и guard let. Теперь так:
var
name: String? = "Linda"
if let name {
print("Hello, \(name)!")
}
В статье регулярка для быстрого рефакторинга
#swift
👍5👎2
Build Time Optimizations (Xcode)
Авторы статьи смогли сократить время билда на 21%. Приведем их советы по оптимизации кода:
1. Используйте "let", где возможно
2. Добавляйте final к классам
3. Явно объявляйте тип и избейгайте инициалзации через вызов
4. Делайте extension'ы приватными
5. Используете объявление кейсов перечислений с типом
6. Разбивайте сложные выражения на части
7. Избегайте лишних кастингов
8. Предпочтитайте if let вместо разворачивания через ??
#optimization
Авторы статьи смогли сократить время билда на 21%. Приведем их советы по оптимизации кода:
1. Используйте "let", где возможно
2. Добавляйте final к классам
3. Явно объявляйте тип и избейгайте инициалзации через вызов
.init
4. Делайте extension'ы приватными
5. Используете объявление кейсов перечислений с типом
6. Разбивайте сложные выражения на части
7. Избегайте лишних кастингов
8. Предпочтитайте if let вместо разворачивания через ??
#optimization
👍7👎1