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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Давайте знакомиться! Меня зовут Розалия Амирова и уже несколько месяцев я веду @ios_broadcast (возможно вы видели мое имя в подписи к постам) 

В iOS разработке 4 года, прошла путь от стажера до ведущего разработчика. Работаю в Тинькофф.Бизнес, а еще являюсь лидером профессии в компании. Иногда выступаю, менторю коллег, развиваю сообщество и делюсь новостями по iOS разработке.

Живу в Иннополисе уже 6 лет. Увлечений много, например, спорт, в особенности горные лыжи, путешествия, настолки, гитара.
🔥58👏8👍5🤩4👎2
Собеседование iOS разработчика: вопросы и задания

В статье ответы на самые популярные вопросы, которые задают на интервью
👉 Что такое optional? Какие способы развернуть optional вы знаете?
👉 Что работает быстрее — поиск по NSArray или NSSet?
👉 Многопоточность - что такое GCD и когда надо использовать Dispatch Groups?
👉 Отличия frame и bounds
👉 Паттерны программирования
👉 Отличия структуры от класса
👉 Виды ссылок
👉 Жизненный цикл приложения
👉 Жизненный цикл ViewController

#interview
👍13👎3
Стоит ли переходить с UIKit на SwiftUI? Опыт СберМаркета

👉 Если вы собираетесь писать новый проект, то автор рекомендует этот фреймворк
👉 Если это старый проект, то можно переписать некоторые компоненты на UIKit, вынося их, для начала, в отдельные ViewController’ы, и добавляя с помощью addSubview в родительский VC, а после уже полностью переписывать на SUI и оборачивать в UIHostingController.

Сам по себе SwiftUI не страшен, но есть ещё неизведанные территории и редкие баги, с которыми можно справиться, если внимательно читать документацию. По скорости разработки SwiftUI по большей части обходит UIKit, хотя сначала нужно набить руку и познакомиться с фреймворком. 

#ui
👍13👎6
А сегодня мы слушаем доклады, общаемся и вырываемся из рутины на Mobius
Небольшая хроника в Instagram @ro_am @krl_rzv
🔥10👎2👍1😁1
Декларативный UI: определение, история и необходимость

Декларативное программирование — это парадигма программирования, в которой задаётся ожидаемый результат, а не способ его получения. Об истоках этой технологии, её отличиях от императивной парадигмы и удобстве её использования читайте в статье

#paradigms
👍8👎1
Регистрация аккаунта разработчика в Apple: что может пойти не так

История одной регистрации в Apple Developer Program, которая вместо двух недель затянулась на 3 месяца.

Бизнес-аналитик, который работал с этими задачами, дает пару практических советов:
👉 Получать D-U-N-S (ID компании для регистрации) лучше сразу через Apple
👉 Будет эффективнее не писать обращения в Apple, а заказывать обратные звонки. В телефонном разговоре проще решать все вопросы здесь и сейчас, а не ждать каждый раз ответа несколько дней

#apple
👍3👎1
Speech Synthesis: Text To Speech in SwiftUI

Apple предоставляет библиотеку для синтеза речи во фреймворке AVFoundation. Реализовать можно с помощью двух классов AVSpeechUtterance and AVSpeechSynthesizer. Довольно просто 😎

#swift
👍17👎2
Window management in SwiftUI

В текущей итерации SwiftUI значительным изменением стало добавление API для управления окнами. Что нового:
👉 Поддержка нескольких окон проверяется с помощью переменной окружения @Environment(\.supportsMultipleWindows)
👉 Создание новое окно с помощью Window
👉 Создание группы с помощью WindowGroup
👉 Модицифицирование стиля с помощью windowStyle
👉 Создание menu bar app

#swiftUI
👍7👎1
What is a Tuple in Swift?

Tuples предоставляют способ сгруппировать несколько значений вместе, чтобы представить их как единое. В статье представлена подробная информация о Tuple.

Что важно помнить:
👉 Empty tuple - () или всем знакомый Void
👉 Tuple как Type alias: typealias PersonTuple = (String, Int)
👉  Tuple - типы значений, а значит при переприсвании они копируются
👉 Количество элементов в tuple можно узнать так: Mirror(reflecting: tuple).children.count

#swift
🔥5👎1
3 Agile Principles for a Productive and Progressive Life (with Examples!)

А что если применить правила Agile в повседневной жизни?🤔
В статье примеры из жизни и 3️⃣ основных правила:
👉 Планирование путем разбиения большой задачи на более мелкие задачи
👉 Если задача вошла в планирование, то другая должна выйти
👉 Если задача была просрочена, то обязательно нужно проанализировать почему именно она была сделана не в срок

#оффтоп
👍6👎1
Routing in SwiftUI

В статье представлены 2 вида routing’a в приложениях на SwiftUI:
1. Router With Trigger Views
Способ основан на маршрутизаторе, который возвращает вложенные экраны для всех возможных навигационных маршрутов. Такой фрагмент кода экрана или View будет содержать внутри модификатор NavigationLink или .sheet. Маршрутизатор запоминает открытый флоу благодаря биндингу @state. Показанные экраны не зависят от кода навигации и места назначения, только от протокола маршрутизатора

2. Router with type-erased modifiers
Экраны хранят @state маршрутизатора, который отслеживает текущее флоу, и выполняют навигацию, когда маршрутизатор изменит это состояние

#swiftUI
👍4👎1
Dependency Injection in Swift 5

UPD: О том, как реализовать DI с использованием Swift 5

Property wrapper'ы, которое упрощают Dependency Injection с помощью атрибута @Injected.
DI помогает писать менее связанный код без передачи параметров вручную, абстрагироваться от инициализации зависимостей и упростить тестирование

#swift
🔥6👎5👍1
The Chain of Responsibility Pattern in Swift (2 мин)

Цепочка ответчиков реализует возможность обработать запрос нескольким объектом. Отличным примером является концепция responder'ов.

UIKit запускается с элемента управления first responder, который активировал клавиатуру, а затем передает вызов вверх по цепочке до тех пор, пока компонент не сможет выполнить действие.

Шаблон цепочки ответчиков используется для достижения слабой связи при разработке программного обеспечения.

#patterns
🔥5👍2👎2
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