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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
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
Coordinator pattern with Tab Bar Controller

Как настроить навигацию в iOS приложении, где есть различные флоу и UITabBarController?

👉 Создаем AppCoordinator - это главный координатор приложения. Он должен быть строго один❗️
👉 AppCoordinator будет открывать и хранить в childCoordinators основные флоу. Например, Login и TabBar
👉 Каждый последующий флоу может иметь собственный координатор, открывать новые флоу и сохранять их в свои childCoordinators
👉 Каждый координатор в методе start() открывает новый флоу на родительском, а в методе finish() - закрывает и говорит родительскому координатору взять на себя управление после закрытия
👉 TabBarCoordinator открывает несколько флоу одновременно для каждого таба и умеет переключать эти табы

#ui
12
This media is not supported in your browser
VIEW IN TELEGRAM
clipped() не оказывает влияния на проверку касаний

Модификатор clipped() в SwiftUI обрезает вью до своих(модификатора) границ, скрывая все, что выходит за пределы этих границ. Но обратите внимание, что обрезание не влияет на проверку касаний (hit testing); обрезанный вью по-прежнему принимает тапы / клики за пределами видимой области.

#ui
👍8👎2
AppCode 2022.3 Release and End of Sales and Support

Вышел релиз AppCode 2022.3, совместимый с macOS 13 и Xcode 14.2. Также было объявлено о завершении проекта. На 14 декабря прекращена продажа и обновление подписок AppCode.

#tools
😢15😁5👍1👎1
Удаляем фон у фото используя CoreML

В статье описан опыт внедрения модели U2Net в приложение для создания коллажа. Исторически, обрезание фона происходило на устройстве силами библиотеки GPUImage, но результат оставлял желать лучшего. U2Net справляется с задачей на отлично, при этом light версия модели весит 4.6 мб, full - 175.9 мб и грузится в фоне.

#ml #swift
👍8👎1
Как устроено приложение Калькулятор на iPhone

Приложение маленькое, но сделано на сценах.
Ширину лейбла внутри контейнера с полем для ввода пересчитывают при каждом вводе новой цифры или операции. На вью добавили 3 жеста - свайп, лонг-пресс и тап.
В портретном режиме скрытых UIView нет. Значит, при повороте устройства, новые кнопки добавляются и расставляются на лету. Кнопки из портретного режима сохраняются между поворотами.
Приложение поддерживает Voice Over и Voice Control для всех интерактивных элементов.

#ios
👍13👎1
Stack Overflow: 74% of developers are open to new jobs

Зарплата - основной мотиватор сменить работу для ~54% опрошенных. Другими причинами респонденты называли возможности для роста (~38%), желание поработать с новыми технологиями (~35%) и баланс работы и отдыха (23%).
Причины, которые делают компанию более привлекательной: developer experience (42%), продукт (35%) и обучение у разработчиков за пределами команды (34%).

#оффтоп
👍8👎1
Understand Swift Autoclosures (4 мин)

Autoclosure оборачивает аргумент функции в closure. При вызове autoclosure, возвращается результат выражения, обернутого в него.
Довольно часто мы вызываем функции, которые используют autoclosure (например, метод assert в тестах), но редко пишем их сами. В некоторых случаях autoclosure может синтаксически улучшить код.

#swift
👍9😁1