Fastlane Magic in iOS (3 мин)
Если в вашем проекте еще не используется Fastlane, эта статья напомнит о его преимуществах в автоматизации:
📸 Снятие скриншотов
👩✈️ Дистрибуция бета-версий в TestFlight
🚀 Дистрибуция в App Store
🛠 Ручная конфигурация FastLane File для автоматизации ваших задач
#автоматизация
Если в вашем проекте еще не используется Fastlane, эта статья напомнит о его преимуществах в автоматизации:
📸 Снятие скриншотов
👩✈️ Дистрибуция бета-версий в TestFlight
🚀 Дистрибуция в App Store
🛠 Ручная конфигурация FastLane File для автоматизации ваших задач
#автоматизация
👍5👎2
An iOS Engineer learns about Android’s Jetpack Compose and loves it (7 мин)
Cамое время серьезно подумать о том, чтобы стать горизонтальным мобильным разработчиком и вот почему:
👉 объединение экспертизы между разработчиками Android и iOS позволяет писать лучшие приложения
👉 Jetpack Compose и SwiftUI - обновление своих императивных предшественников. Оба декларативны, являются state-driven и реактивны
👉 Kotlin несложно освоить для разработчиков Swift
Кривые обучения ускорились, и, поскольку обе платформы имеют схожие принципы, их легче освоить. Это отличный способ закрепить свой набор навыков в будущем, потому что давайте посмотрим правде в глаза: популярность любой из доминирующих мобильных платформ не гарантируется навсегда.
#crossplatform
Cамое время серьезно подумать о том, чтобы стать горизонтальным мобильным разработчиком и вот почему:
👉 объединение экспертизы между разработчиками Android и iOS позволяет писать лучшие приложения
👉 Jetpack Compose и SwiftUI - обновление своих императивных предшественников. Оба декларативны, являются state-driven и реактивны
👉 Kotlin несложно освоить для разработчиков Swift
Кривые обучения ускорились, и, поскольку обе платформы имеют схожие принципы, их легче освоить. Это отличный способ закрепить свой набор навыков в будущем, потому что давайте посмотрим правде в глаза: популярность любой из доминирующих мобильных платформ не гарантируется навсегда.
#crossplatform
👍6👎1
Внедрение Allure (отчётность) в UI-тесты (swift, XCTest)
Преимущества связки xcresults с Allure (фреймворк для отчётности) при автоматизации UI тестов:
👉 процентное соотношение пройденных, проваленных, скипнутых и др. тестов
👉 таймлайн
👉 графики с количественной статистикой по статусам, длительности, ретраям и др.
👉 подробная информация по каждому тесту (название теста, ссылка на кейс, шаги, скриншот, длительность теста и каждого шага, ретраи, уровень критичности и др.)
👉 Allure используется при автоматизации других направлений (web, API)
#testing
Преимущества связки xcresults с Allure (фреймворк для отчётности) при автоматизации UI тестов:
👉 процентное соотношение пройденных, проваленных, скипнутых и др. тестов
👉 таймлайн
👉 графики с количественной статистикой по статусам, длительности, ретраям и др.
👉 подробная информация по каждому тесту (название теста, ссылка на кейс, шаги, скриншот, длительность теста и каждого шага, ретраи, уровень критичности и др.)
👉 Allure используется при автоматизации других направлений (web, API)
#testing
🔥2👎1
Внедрение iOS 16 идет быстрее iOS 15, но медленнее iOS 14
По данным Mixpanel, внедрение iOS 16 происходит немного быстрее, чем iOS 15. После 24 часов доступности iOS 16 установили 6.71% пользователей по сравнению 6.48% у первого дня iOS 15. Оба обновления отстают от iOS 14, которую загрузили 9.22% пользователей в первый день ее доступности.
Это неудивительно, поскольку iOS 14 была первым обновлением, которое позволило больше настраивать домашний экран iPhone. На домашнем экране появились виджеты, что даже породило свою новую отдельную категорию приложений.
#iOS
По данным Mixpanel, внедрение iOS 16 происходит немного быстрее, чем iOS 15. После 24 часов доступности iOS 16 установили 6.71% пользователей по сравнению 6.48% у первого дня iOS 15. Оба обновления отстают от iOS 14, которую загрузили 9.22% пользователей в первый день ее доступности.
Это неудивительно, поскольку iOS 14 была первым обновлением, которое позволило больше настраивать домашний экран iPhone. На домашнем экране появились виджеты, что даже породило свою новую отдельную категорию приложений.
#iOS
👍4👎1
Исследуем 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