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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Исследуем 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
По случаю пятницы обзор статей о "токсичной продуктивности" в мире IT.

👉 Обязан ли разработчик развиваться? Популярно мнение, что разработчик обязан иметь блогпет проект и выучить 10 языков программирования. Синдром самозванца и выгорание стали основой индустрии.
Вы не обязаны развиваться. Учиться, развиваться нужно вдумчиво и постепенно — умеренность защитит вашу психику и приведёт к лучшим результатам. Если вы уже выгорели — прекратите заниматься развитием и потратьте свои ресурсы на восстановление. 

👉 Разработчики: не перерабатывайте. Люди, которые работают сверхурочно, — идеалисты. Они верят в систему. Оппортунисты, которые заполняют пробелы в способности компании зарабатывать деньги, в конечном итоге получают более высокие зарплаты и карьерный рост.

👉 Правило 3-х часов: Сколько нужно работать в день. Автор предлагает выделять 3 часа концентрации и внимания на работу, как ключ к победе над выгоранием

#softskills
🔥6👍1
Пишем библиотеку для запроса оценки в AppStore

В продвижении приложения очень важную роль играет рейтинг приложения в AppStore. Показ запроса на оценку возможен только три раза в год, при условии что изменилась версия приложения и пользователь не отключил запрос оценки в настройках iOS.
Поэтому очень важно не потратить заветные три попытки впустую. В статье детали реализации модуля для удобного отображения запроса на оценку: ссылка на GitHub

#tools #appStore
👍4👎1
Логи в iOS, эпизод 1: os_log

Console.app - специальное приложение для логов, встроенное в MacOS. Для поиска логов по приложению, в правом верхнем углу введите название приложения. В фильтрах указываем Library, тип матчинга Equals.
В Console.app не будут попадать принты. Их нужно заменить на os_log(), с уровнем логгирования, отличным от .debug. По уровню также можно настраивать фильтры. На скрине пример логирования с указанием модуля, файла и строчки.

#tools
👍3👎1
WebView: забыть нельзя интегрировать

При разработке мобильного приложения 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
👎3👍2
How to check if String is Number in 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. Теперь так:
var name: String? = "Linda"
if let name {
print("Hello, \(name)!")
}
В статье регулярка для быстрого рефакторинга

#swift
👍5👎2
Build Time Optimizations (Xcode)

Авторы статьи смогли сократить время билда на 21%. Приведем их советы по оптимизации кода:
1. Используйте "let", где возможно
2. Добавляйте final к классам
3. Явно объявляйте тип и избейгайте инициалзации через вызов .init 
4. Делайте extension'ы приватными
5. Используете объявление кейсов перечислений с типом
6. Разбивайте сложные выражения на части
7. Избегайте лишних кастингов
8. Предпочтитайте if let вместо разворачивания через ??

#optimization
👍7👎1