Retain Cycle in Swift (6 мин)
Еще раз про Retain Cycle, ARC, виды ссылок (strong, weak, unowned) с примерами как на картинке 😄
#memory
Еще раз про Retain Cycle, ARC, виды ссылок (strong, weak, unowned) с примерами как на картинке 😄
#memory
👍5👎1
Evolving SwiftUI Architecture for Client-Server Apps (5 мин)
В статье еще один способ организовать NetworkLayer в SwiftUI приложении и реализовать:
👉 Кеширование
👉 Сортировку
👉 Поиск
#swiftUI
В статье еще один способ организовать NetworkLayer в SwiftUI приложении и реализовать:
👉 Кеширование
👉 Сортировку
👉 Поиск
#swiftUI
👍3👎2
Пробовали ли вы SwiftUI в бою?
Anonymous Poll
40%
Да, писал приложение с нуля
14%
Да, интегрировал SwiftUI в UIKit приложение
46%
Нет, подожду iOS 20 🙈
👍4👎1
Integrating SwiftUI into UIKit project (6 мин)
В этой статье подробно описано как интегрировать SwiftUI в уже существующее приложение:
1️⃣ Используем дженерик протокол - UIHostingController, который обернет SwiftUI вьюшку
2️⃣ Создаем класс, который унаследуют протокол
3️⃣ Используем получившийся класс для навигации, как обычный UIVIewController
#swiftUI
В этой статье подробно описано как интегрировать SwiftUI в уже существующее приложение:
1️⃣ Используем дженерик протокол - UIHostingController, который обернет SwiftUI вьюшку
2️⃣ Создаем класс, который унаследуют протокол
3️⃣ Используем получившийся класс для навигации, как обычный UIVIewController
#swiftUI
👍6👎1
My Personal Takes from Using Combine (3 мин)
Плюсы Combine:
👉 Interfaces - соединяем потоки данных напрямую с UI компонентами, минуя делегаты, замыкания и вызовы функций
👉 The Async Challenge - асинхронное программирование считается челенджовым. Автор пишет, что подключение потоков данных напрямую к UI - значительное преимущество
👉 SwiftUI отлично сочетается с Combine
#reactive
Плюсы Combine:
👉 Interfaces - соединяем потоки данных напрямую с UI компонентами, минуя делегаты, замыкания и вызовы функций
👉 The Async Challenge - асинхронное программирование считается челенджовым. Автор пишет, что подключение потоков данных напрямую к UI - значительное преимущество
👉 SwiftUI отлично сочетается с Combine
#reactive
👍3👎1
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
Как работает компилятор 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ы и все, что могло мотивировать игроков потратить свои деньги и принести доход, параллельно работая над своими проектами и над проектами компании, в которой был геймдизайнером и решил поделиться с нами опытом в статье.
#оффтоп
Автор изучал способы монетизации игр, пробовал интегрировать рекламу, подписку, in-appы и все, что могло мотивировать игроков потратить свои деньги и принести доход, параллельно работая над своими проектами и над проектами компании, в которой был геймдизайнером и решил поделиться с нами опытом в статье.
#оффтоп
👍2👎1🤩1
Как я подключил Sign in with Apple — Apple авторизацию. Подробный гайд
Гайд по реализации Sign in with Apple:
👉 Добавляем import AuthenticationServices
👉 Создаем кнопку и накидываем на нее таргет
👉 Создаем экземпляр ASAuthorizationAppleIDProvider и request с помощью метода createRequest() экземпляра
👉 Создаем ASAuthorizationController, в инит закидываем request из прошлого шага
👉 Реализовываем методы делегата как на скрине
#swift
Гайд по реализации 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
Что таке 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'а с помощью
При этом в info.plist установить значение ключа "View controller-based status bar appearance" в YES или убрать ключ.
#ui
Два способа поменять цвет текста в статус баре:
👉 Для всего приложения: в 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
Основные выводы статьи:
👉 Не надо торопиться все переделывать, критиковать и пытаться сделать “как в больших современных компаниях”. Специалисты, которые работали до тебя, скорее всего чем-то руководствовались. Нужно уметь почерпнуть опыт предшественников.
👉 Лучше всего делать постепенный фейслифтинг и рефакторинг, делать промежуточные архитектуры, с которых можно будет с меньшими усилиям переехать на целевые
👉 У продуктовых команд должен быть выбор, какие платформенные инструменты им использовать для достижения своих целей
👉 Чаще лучше обещать меньше, но выполнить и быть героем, чем наообещать и сделать тот же самый объем
#management
👍6👎1
Давайте знакомиться! Меня зовут Розалия Амирова и уже несколько месяцев я веду @ios_broadcast (возможно вы видели мое имя в подписи к постам)
В iOS разработке 4 года, прошла путь от стажера до ведущего разработчика. Работаю в Тинькофф.Бизнес, а еще являюсь лидером профессии в компании. Иногда выступаю, менторю коллег, развиваю сообщество и делюсь новостями по iOS разработке.
Живу в Иннополисе уже 6 лет. Увлечений много, например, спорт, в особенности горные лыжи, путешествия, настолки, гитара.
В iOS разработке 4 года, прошла путь от стажера до ведущего разработчика. Работаю в Тинькофф.Бизнес, а еще являюсь лидером профессии в компании. Иногда выступаю, менторю коллег, развиваю сообщество и делюсь новостями по iOS разработке.
Живу в Иннополисе уже 6 лет. Увлечений много, например, спорт, в особенности горные лыжи, путешествия, настолки, гитара.
🔥58👏8👍5🤩4👎2
Собеседование iOS разработчика: вопросы и задания
В статье ответы на самые популярные вопросы, которые задают на интервью
👉 Что такое optional? Какие способы развернуть optional вы знаете?
👉 Что работает быстрее — поиск по NSArray или NSSet?
👉 Многопоточность - что такое GCD и когда надо использовать Dispatch Groups?
👉 Отличия frame и bounds
👉 Паттерны программирования
👉 Отличия структуры от класса
👉 Виды ссылок
👉 Жизненный цикл приложения
👉 Жизненный цикл ViewController
#interview
В статье ответы на самые популярные вопросы, которые задают на интервью
👉 Что такое 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
👉 Если вы собираетесь писать новый проект, то автор рекомендует этот фреймворк
👉 Если это старый проект, то можно переписать некоторые компоненты на UIKit, вынося их, для начала, в отдельные ViewController’ы, и добавляя с помощью addSubview в родительский VC, а после уже полностью переписывать на SUI и оборачивать в UIHostingController.
Сам по себе SwiftUI не страшен, но есть ещё неизведанные территории и редкие баги, с которыми можно справиться, если внимательно читать документацию. По скорости разработки SwiftUI по большей части обходит UIKit, хотя сначала нужно набить руку и познакомиться с фреймворком.
#ui
👍13👎6
Декларативный UI: определение, история и необходимость
Декларативное программирование — это парадигма программирования, в которой задаётся ожидаемый результат, а не способ его получения. Об истоках этой технологии, её отличиях от императивной парадигмы и удобстве её использования читайте в статье
#paradigms
Декларативное программирование — это парадигма программирования, в которой задаётся ожидаемый результат, а не способ его получения. Об истоках этой технологии, её отличиях от императивной парадигмы и удобстве её использования читайте в статье
#paradigms
👍8👎1
Регистрация аккаунта разработчика в Apple: что может пойти не так
История одной регистрации в Apple Developer Program, которая вместо двух недель затянулась на 3 месяца.
Бизнес-аналитик, который работал с этими задачами, дает пару практических советов:
👉 Получать D-U-N-S (ID компании для регистрации) лучше сразу через Apple
👉 Будет эффективнее не писать обращения в Apple, а заказывать обратные звонки. В телефонном разговоре проще решать все вопросы здесь и сейчас, а не ждать каждый раз ответа несколько дней
#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
Apple предоставляет библиотеку для синтеза речи во фреймворке AVFoundation. Реализовать можно с помощью двух классов AVSpeechUtterance and AVSpeechSynthesizer. Довольно просто 😎
#swift
👍17👎2
Window management in SwiftUI
В текущей итерации SwiftUI значительным изменением стало добавление API для управления окнами. Что нового:
👉 Поддержка нескольких окон проверяется с помощью переменной окружения
👉 Создание новое окно с помощью
👉 Создание группы с помощью
👉 Модицифицирование стиля с помощью windowStyle
👉 Создание menu bar app
#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:
👉 Tuple - типы значений, а значит при переприсвании они копируются
👉 Количество элементов в tuple можно узнать так:
#swift
Tuples предоставляют способ сгруппировать несколько значений вместе, чтобы представить их как единое. В статье представлена подробная информация о Tuple.
Что важно помнить:
👉 Empty tuple - () или всем знакомый Void
👉 Tuple как Type alias:
typealias PersonTuple = (String, Int)
👉 Tuple - типы значений, а значит при переприсвании они копируются
👉 Количество элементов в tuple можно узнать так:
Mirror(reflecting: tuple).children.count
#swift
🔥5👎1