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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Understanding Swift Compiler (3 мин)

Как работает компилятор Swift по фазам преобразования в машинный код:
👉 Парсинг. Исходный код парсится в токены и помещается в абстрактное синтаксическое дерево (AST). Выводятся ошибки и предупреждения с указанием места проблемы в коде
👉 Семантический анализ - проверка типов данных
👉 Clang Import. Модули Clang импортируются и мапят C или Objective-C API в Swift API.
👉 SILGen (Swift Intermediate Language). Происходит оптимизация Swift кода. AST превращается в RAW SIL
👉 SIL Guaranteed Transformations. Проверка потоков данных (например, использование неинициализированных переменных). Результат - Canonical SIL
👉 SIL оптимизатор - специфичные для Swift оптимизации. Например, применение dispatch rules и специализация generic
👉 LLVM IR генератор. SIL превращается LLVL’s intermediate representation (IR), которое уже не специфично для Swift
👉 LLVM. IR оптимизируется и превращается в машинные инструкции для целевых платформ

#swift
👍5👎1
Ничего не умею, но хочу зарабатывать на играх

Автор изучал способы монетизации игр, пробовал интегрировать рекламу, подписку, in-appы и все, что могло мотивировать игроков потратить свои деньги и принести доход, параллельно работая над своими проектами и над проектами компании, в которой был геймдизайнером и решил поделиться с нами опытом в статье.

#оффтоп
👍2👎1🤩1
Как я подключил Sign in with Apple — Apple авторизацию. Подробный гайд

Гайд по реализации Sign in with Apple:
👉 Добавляем import AuthenticationServices
👉 Создаем кнопку и накидываем на нее таргет
👉 Создаем экземпляр ASAuthorizationAppleIDProvider и request с помощью метода createRequest() экземпляра
👉 Создаем ASAuthorizationController, в инит закидываем request из прошлого шага
👉 Реализовываем методы делегата как на скрине

#swift
👍2👎1
Result builders in Swift explained with code examples

Что таке Result builder?
🏗 Result builder'ы позволяют создавать результат с помощью "строительных блоков", выстроенных друг за другом. Например, когда верстаете с помощью SwiftUI, создавая вьюшку за вьшкой внутри body

В статье подробно описано, как и когда стоит создавать свой кастомный builder:
👉 Как? Создайте кастомную структуру, добавьте аннотацию @resultBuilder и переопределите нужные вам методы - готово 🔥
👉 Когда? Всякий раз, когда вы видите кусок кода, который построен из нескольких условных элементов и превращен в один общий элемент типа return, вы можете подумать о написании Result builder'a. Однако делайте это только в том случае, если вы знаете, что вам придется писать их чаще

#swift
👍3👎1
How to change Status Bar text color in iOS (2 мин)

Два способа поменять цвет текста в статус баре:
👉 Для всего приложения: в Info.plist добавить ключ "Status bar style" и задать значение "Light Content" или "Dark Content", затем добавить ключ "View controller-based status bar appearance" и установить значение "NO"

👉 Для отдельного view controller'а с помощью
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
При этом в info.plist установить значение ключа "View controller-based status bar appearance" в YES или убрать ключ.

#ui
👍6👎1
Как построить большое мобильное приложение в проекте… который был уже несколько раз потрачен до тебя

Основные выводы статьи:
👉 Не надо торопиться все переделывать, критиковать и пытаться сделать “как в больших современных компаниях”. Специалисты, которые работали до тебя, скорее всего чем-то руководствовались. Нужно уметь почерпнуть опыт предшественников.
👉 Лучше всего делать постепенный фейслифтинг и рефакторинг, делать промежуточные архитектуры, с которых можно будет с меньшими усилиям переехать на целевые
👉 У продуктовых команд должен быть выбор, какие платформенные инструменты им использовать для достижения своих целей
👉 Чаще лучше обещать меньше, но выполнить и быть героем, чем наообещать и сделать тот же самый объем

#management
👍6👎1
Давайте знакомиться! Меня зовут Розалия Амирова и уже несколько месяцев я веду @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