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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Make swift ‘contains()’ and ‘filter()’ ready for iOS Development

Полезные расширения для поиска строк в массиве:
👉 partiallyContains() / partiallyContainsFilter() для поиска по части строки в массиве строк (‘arr’ в [‘array’])
👉 relaxedOrderContains() / relaxedOrderFilter()
для, например, ‘world hello’ on [“hello world”]
👉 flexibleFilter() для реализации "поиска по контактам", например "wo" в ["world", "hello world"]

#swift
🔥7👎2
Как Xcode 14 непреднамеренно увеличивает размер приложения

Среди других функций Xcode 14 по умолчанию отключил биткод - альтернативный способ упаковки приложения, при котором часть процесса сборки остается на стороне Apple после его отправки в App Store.
Простое объяснение заключается в том, что битовый код оптимизирует производственные сборки, частично за счет удаления двоичных символов. Без включения битового кода настройки сборки Xcode необходимо изменить, чтобы удалять двоичные символы.

Как удалить двоичные символы без биткода:
👉 Используя настройки сборки Xcode
👉 Используя скрипт

#xcode
👍6
Как настроить Charles

Приложение Charles Proxy - большой помощник и тестировщику, и разработчику. Для меня бывает особенно полезно, когда нужно подменить данные с бэка или подебажить приложение. Об установке, настройке и интерфейсе читайте в статье

#tools
👍8
Как устроено приложение Календарь в iPhone

Разбор реализации календаря. Навигация, экраны, Accessibility

#iOS
👍9👎1
Обзор новых API навигации в SwiftUI

SwiftUI имеет новые API-интерфейсы навигации в iOS 16 и macOS 13 на основе стека и по нескольким столбцам:
👉 NavigationStack состоит из корневого вью, у которого могут быть дополнительные вью, “накладываемые” поверх него, тем самым создавая стек. Обычно используем для приложений, работающих на iPhone
👉 Программная навигация в NavigationStack. Создаем переменную State, содержащую путь навигации, и передаем привязку к ней в NavigationStack
👉 NavigationSplitView. Обычно это боковая панель слева, где пользователь может выбирать элементы, которые будут отображаться в подробном виде справа. Используем для iPad или Mac
👉 NavigationSplitView с тремя колонками

#swiftUI
👍5👎1
Жизненный цикл UIViewController

Вспомним и закрепим еще раз с наглядной схемой:
👉 init
👉 loadView - создание view
👉 viewDidLoad - viewController создан, Outlets на месте
👉 viewWillAppear - view будет добавлено в иерархию отображения
👉 viewWillLayoutSubViews - каждый раз, когда изменяется frame
👉 viewDidLayoutSubviews - view только что разместило свои subview
👉 viewDidAppear - после того, как ViewController появляется на экране
👉 viewWillDisappear - до того, как viewController будет удален с экрана
👉viewDidDisappear - после удаления viewController'a с экрана
👉 deinit

#ui
🔥19👎2👍1
Bottom sheet: Navigation

В статье описано, как создать полноценную навигацию в рамках bottom sheet отображения, основанного на autolayout, а не на неудобном ручном расчёте высоты. Повторили анимации навигационных переходов. Добавили navigation bar как нативный способ управления навигацией.

#ui
👍10👎2
Apple ускоряет разработку гарнитуры смешанной реальности

По словам Bloomberg, компания планирует представить гарнитуру уже в следующем году вместе со специальной операционной системой и магазином приложений.
Ожидается, что его первое устройство в этой области будет намного дороже, чем существующие основные конкуренты, и будет включать в себя экраны сверхвысокого разрешения для виртуальной реальности и несколько внешних камер для обработки элементов дополненной реальности. Оно также будет иметь возможности отслеживания рук и работать на процессоре на базе чипа M2 — компонента, представленного в последних компьютерах Mac компании.

#слухи
🔥7👎2🤔2😱1
Делаем плавный скролл в нагруженных таблицах

Способы оптимизации таблицы, рассмотренные в статье:
👉 Повторное использование ячеек/хедеров и футеров — первый и важный шаг оптимизации
👉 Уменьшить общее время загрузки и вычислений, их перевод в Background-очереди — значит упростить объем подсчетов
👉 Использование стандартных компонентов Core Animation для отрисовки ячеек позволит существенно ускорить процесс отображения и повысить производительность
👉 Кеширование данных для ячеек
👉 Нет ничего плохого в комбинации Auto Layout и ручного подсчета. Там, где не хватает производительности — использовать ручной подсчет

#optimization
👍93👎2🤔1😢1
The Ultimate How-to: Build a Bluetooth Swift App With Hardware in 20 Minutes

👉 Добавляем import CoreBluetooth
👉 Создайте классы CBCentralManager, сервис для работы с Bluetooth 
и CBPeripheral для отслеживания работы уже подключеннного устройства, чтобы узнать, что устройство, например, отсоединилось
👉 Имплементируем протоколы их делегатов CBPeripheralDelegate и CBCentralManagerDelegate
👉 Реализуем основной метод
func centralManagerDidUpdateState(_ central: CBCentralManager) чтобы узнать влючен ли Bluetooth на устройстве
👉 Дальше через созданный менеджер ищем устройства с помощью метода scanForPeripheralsWithServices❗️Не забудьте после найденного результата прекратить поиск с помощью метода stopScan
👉 Осталось только запомнить найденное устройства в методе centralManagerdidDiscover и ❗️обязательно сохранить его сильной ссылкой иначе подключение прервется

#swift
👍11
How We Centrally Manage UITabBar in Our iOS Apps
(4 мин)

Иногда бывает нужно скрыть UITabBar. Авторы делятся опытом реализации и дают следующие советы по управлению UITabBar:
👉 Единый метод для показа/скрытия UITabBar вместо hidesBottomBarWhenPushedtabbar.isHidden или tabbar.frame
👉 Управление показом/скрытием в одном месте. MainTabBarNavigationManager: UINavigationControllerDelegate и задать его делегатом для всех navigation controller'ов

#ui
👍4👎1
Управление загрузками в Xcode

Начиная с Xcode 14, симуляторы для watchOS и tvOS доступны в виде отдельных загрузок. Данное решение позволяет значительно уменьшать размер загрузки приложения, однако теперь вам придется самостоятельно управлять этими большими (3-4 ГБ) компонентами.
Автор сэкономил 32ГБ дискового пространства, подробнее в статье

#optimization
👍5
Советы по отладке при работе над проектами Swift

👉 Настройте свой .lldbinit. Например, чтобы поменять язык или добавить дополнительные возможности к отладчику
👉 Используйте переменные фрейма: frame variable или v для сохраненных свойств вместо po
👉 Наблюдайте за системой. Брейкпоинты могут быть использованы для многих вещей, от изменения входных данных по умолчанию в поля (например, формы входа) до использования команд отладчика для создания цепочек символических брейкпоинтов
👉 Используйте
watchpoint set variable self.homeViewController
как брейкпоинт при изменении переменной

#tools
👍8
Как провести эффективное тестирование мобильных приложений? Стратегия пятиуровневой пирамиды тестов

Взяв за основу тестовую пирамиду Мартина Фаулера, авторы создали свой вариант пирамиды, состоящий из 5 уровней. Двигаясь от нижнего к верхнему уровню, все меньше зависимостей должно быть заменено моками и все сильнее растет стоимость реализации теста (вторая картинка).

#testing
👍6👎1
Простые метрики по качеству: как их вести и зачем они нужны

👉 Зачем? Это поможет увидеть общую картину того, как обстоят дела с качеством на проекте, и на каком этапе у нас основные проблемы. Кроме того, это может помочь в отслеживании динамики качества, но важно понимать, что качество проекта — это суммарная работа всей команды, а не только QA отдела.
👉 Как? Для того, чтобы вести такую статистику, не нужно много ресурсов — это может сделать один человек, уделяя этой задаче ~1-4 часа в неделю. Однако для того, чтобы увидеть глобальную картину, может потребоваться около полугода, поскольку статистика — это переменная, изменяющаяся во времени.
Примеры метрик: баги после релиза, баги во время регресса

#qa
👍6
The Future of Foundation

Новый open source Foundation:
👉 Благодаря нативной реализации Foundation больше не несет затраты на конвертацию между C и Swift, что приводит к повышению производительности
👉 Более мелкие и гранулированные пакеты Foundation. FoundationEssentials предоставит наиболее важные типы без системных зависимостей. FoundationInternationalization для работы с локализованным контентом. Другие пакеты будут продолжать обеспечивать поддержку XML и работу с сетью. Новый пакет FoundationObjCCompatibility будет содержать устаревшие API.
👉 Множественные реализации любого API чреваты различиями в поведении и, в конечном счете, ошибками при перемещении кода между платформами. Новый пакет Foundation будет служить ядром единой канонической реализации, независимо от платформы.
👉 Новый открытый процесс внесения изменений в API Foundation

#swift
👍7
Не обманывайте себя: вы не «исправите это потом»

Шансы на то, что «костыль» будет исправлен, неуклонно снижаются с течением времени и вот почему:
👉 Преимущества от усовершенствования кода не перевешивают риска что-нибудь испортить
👉 Чем дольше с чем-нибудь живешь, тем сильнее привыкаешь к такому положению вещей
👉 На одной чаше весов исправление, связанное с большими рисками и малыми преимуществами. На другой – что-нибудь из нового, что мы хотели бы реализовать или доработать
👉 Новый код завязан на «плохом» фрагменте и, вероятно, выйдет из строя, если в этом фрагменте что-то изменим

Чаще всего выбор звучит так: «исправить сейчас» или «смириться с тем, что не исправим никогда».
Исходя из этого осознания мы можем точнее расставлять приоритеты и лучше выстроить процессы.

#softskills
👍11👎2
Вышла Lottie 4.0 для iOS с поддержкой Core Animation

Lottie — это кроссплатформенная библиотека Airbnb с открытым исходным кодом для рендеринга векторной анимированной графики.
В Lottie 4.0  значительно улучшена производительность всех анимаций благодаря совершенно новому движку рендеринга на базе Core Animation.
В предыдущих версиях один раз за кадр код выполнялся в основном потоке для продвижения анимации и повторного рендеринга ее содержимого, а значит потреблялось от 5 до 20%+ CPU во время воспроизведения, оставляя меньше циклов процессора доступным для остальной части приложения.

#animation
🔥11👍1👎1
Apple to Allow Outside App Stores in Overhaul Spurred by EU Laws

Apple может разрешить сторонние магазины приложений для iPhone и iPad для соблюдения требований Евросоюза.
Важно отметить, что эти изменения коснутся только Европы, однако могут быть распространены на другие страны при принятии аналогичных законов.

#слухи
🔥11👎5