iOS Broadcast
3.31K subscribers
1.69K photos
84 videos
971 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Exploring Rendering in SwiftUI (4 мин)

SwiftUI перерисовывает компоненты, когда меняются их свойства, а не state.
View является структурой: иммутабельным value типом. Благодаря этому легче отследить изменения.
Если изменяются свойства View, мы должны пересоздать его, что и происходит в body. Таким образом, мы словно говорим рантайму: "Мы создали новую view. Нарисуешь его?” 😄

#swiftUI
👍6👎1
How 5 iOS apps could improve their startup time by an average of 28%

Проанализировали время загрузки популярных приложений с помощью Emerge Performance Analysis на iPhone SE iOS 15.4.1 и вот что получилось:

United Airlines - 2.05 сек, можно улучшить на 40%
Chipotle - 0.57 сек, можно улучшить на 33%
Curb - 0.8 сек, можно улучшить на 22%
Walmart - 0.67 сек, можно улучшить на 33%
Zoom - 0.27 сек, можно улучшить на 15%

Из интересных наблюдений, United Airlines тратит 48 мс на JSONDecoder.decode(), что либо стоит делать в бекграунде, либо использовать более быстрые решения, а еще 677 мс на загрузку CoreData на main потоке.
Walmart тратит 20 мс на принты😅.
Zoom's просто засыпает на 41 мс на main потоке.

#performance
👍3👎1😢1
How To Boost Your iOS Code Performance: Reduce Searching In Array

Поиск в массиве имеет сложность O(n), но на практике бывает нужно использовать вложенные циклы, таким образом сложность вырастает до O(n²) и сильнее.
На скринах два примера, как оптимизировать код с помощью Set или Dictionary и улучшить перфоманс

#performance
👍5👎2
Fastlane Magic in iOS (3 мин)

Если в вашем проекте еще не используется 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
👍6👎1
Внедрение Allure (отчётность) в UI-тесты (swift, XCTest)

Преимущества связки 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
👍4👎1
Исследуем Dynamic Island и ActivityKit

Написали пост пост с краткой инструкцией по 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
👍8🔥1
Build to latest iOS device without upgrading to latest Xcode (1 мин)

Как собирать проект на последней версии 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
👍4👎1
Create a Scalable SwiftUI MVVM Project

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
👍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'ом
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
👍2