Your Multiplatform Kaptain has Arrived - Careem делятся деталями о использовании Kotlin Multiplatform.
25k строк расшаренного кода, год в продакшене на Android и 7 месяцев на iOS. 5 iOS и 11 Android разработчиков в команде.
Решились на переписывание бизнес-логики, на Kotlin, на новой архитектуре (MVI).
Сначала попробовали добавление iOS платформы через переписывание kotlin в swift код, но это не удалось поддерживать в дальнейшем, поэтому пошли в KMP.
Что поняли:
1. Нужно избегать Android Driven Development (iOS разработчики должны так же принимать участие в разработке общей логики, чтобы лучше понимать что и как делается в приложении и получать оптимальный для обеих платформ API);
2. Общение команд Android и iOS должно быть плотнее, чем при чистой нативной разработке, мерж реквесты должны проверяться представителями обеих платформ, большие фичи должны обсуждаться сообща;
3. Разработка общей библиотеки требует иного понимания разработки приложения.
4. Шарить между платформами то, что комфортно шарить для обеих платформ.
Так же упомянуты некоторые технические особенности, например изменение имен классов при дублировании, экспорт классов из зависимостей в фреймворк. А так же что потерялось из-за интеропа с ObjC, вместо Swift.
В конце зачитан стих посвященный kotlin mpp, это надо видеть :)
Не только конец надо видеть, а все выступление - оно достаточно информативное.
#videos
25k строк расшаренного кода, год в продакшене на Android и 7 месяцев на iOS. 5 iOS и 11 Android разработчиков в команде.
Решились на переписывание бизнес-логики, на Kotlin, на новой архитектуре (MVI).
Сначала попробовали добавление iOS платформы через переписывание kotlin в swift код, но это не удалось поддерживать в дальнейшем, поэтому пошли в KMP.
Что поняли:
1. Нужно избегать Android Driven Development (iOS разработчики должны так же принимать участие в разработке общей логики, чтобы лучше понимать что и как делается в приложении и получать оптимальный для обеих платформ API);
2. Общение команд Android и iOS должно быть плотнее, чем при чистой нативной разработке, мерж реквесты должны проверяться представителями обеих платформ, большие фичи должны обсуждаться сообща;
3. Разработка общей библиотеки требует иного понимания разработки приложения.
4. Шарить между платформами то, что комфортно шарить для обеих платформ.
Так же упомянуты некоторые технические особенности, например изменение имен классов при дублировании, экспорт классов из зависимостей в фреймворк. А так же что потерялось из-за интеропа с ObjC, вместо Swift.
В конце зачитан стих посвященный kotlin mpp, это надо видеть :)
Не только конец надо видеть, а все выступление - оно достаточно информативное.
#videos
YouTube
Aud 12
KotlinConf live from Copenhagen!
Schedule:
8:37 Building Progressive Web Apps in Kotlin - Erik Hellman
1:13:07 Kotless - Kotlin Serverless Framework - Vladislav Tankov
2:57:00 Coroutines Case Study - Cleaning Up An Async API - Tom Hanley
3:55:00 Bridge the…
Schedule:
8:37 Building Progressive Web Apps in Kotlin - Erik Hellman
1:13:07 Kotless - Kotlin Serverless Framework - Vladislav Tankov
2:57:00 Coroutines Case Study - Cleaning Up An Async API - Tom Hanley
3:55:00 Bridge the…
I walk the line - What parts of an app should be in Kotlin/Native - and what parts shouldn't? - опыт разработки небольшого проекта с шарингом кода между Android и iOS.
В выступлении:
- Чем отличается Kotlin от обычной кроссплатформы;
- Выбор архитектуры;
- Интеграция с swift ui;
- Генерация цветов из общего описания для android и iOS ресурсов;
- Мнение когда имеет смысл использовать Kotlin/Native.
Код проекта доступен на github. Действительно интересная была часть про генерацию цветов и про стык с swift ui (но там немного).
#videos
В выступлении:
- Чем отличается Kotlin от обычной кроссплатформы;
- Выбор архитектуры;
- Интеграция с swift ui;
- Генерация цветов из общего описания для android и iOS ресурсов;
- Мнение когда имеет смысл использовать Kotlin/Native.
Код проекта доступен на github. Действительно интересная была часть про генерацию цветов и про стык с swift ui (но там немного).
#videos
YouTube
Aud 12
KotlinConf live from Copenhagen!
Schedule:
7:28 I Walk The Line: What Parts Of An App Should be in Kotlin Native - and What Parts Shouldn't? - Ellen Shapiro
1:07:34 Using Kotlin for Data Science - Roman Belov
2:54:22 Keep insisting! - Amanda Hinchman-Dominguez…
Schedule:
7:28 I Walk The Line: What Parts Of An App Should be in Kotlin Native - and What Parts Shouldn't? - Ellen Shapiro
1:07:34 Using Kotlin for Data Science - Roman Belov
2:54:22 Keep insisting! - Amanda Hinchman-Dominguez…
Kotlin in Space - использование kotlin в новом проекте JetBrains - Space. Kotlin там везде.
В выступлении:
- Kotlin на мобилках, фронте, бекенде, плагинах к IDEA;
- Шарили data model, view model, валидацию, утилсы и т.д.;
- Не шарили UI и Storage;
- Exposed для работы с DB;
- Ktor для client-server взаимодействия;
- WebSocket RPC на базе Ktor;
- Документирование Rest API;
- Kotlin-React для фронта;
- Тесты;
- Система автоматизации (заявленная поддержка kotlin-script для своих кастомных операций в Space).
Стоит посмотреть, чтобы увидеть возможности kotlin multiplatform в масштабном проекте.
#videos
В выступлении:
- Kotlin на мобилках, фронте, бекенде, плагинах к IDEA;
- Шарили data model, view model, валидацию, утилсы и т.д.;
- Не шарили UI и Storage;
- Exposed для работы с DB;
- Ktor для client-server взаимодействия;
- WebSocket RPC на базе Ktor;
- Документирование Rest API;
- Kotlin-React для фронта;
- Тесты;
- Система автоматизации (заявленная поддержка kotlin-script для своих кастомных операций в Space).
Стоит посмотреть, чтобы увидеть возможности kotlin multiplatform в масштабном проекте.
#videos
YouTube
Aud 12
KotlinConf live from Copenhagen!
Schedule:
7:28 I Walk The Line: What Parts Of An App Should be in Kotlin Native - and What Parts Shouldn't? - Ellen Shapiro
1:07:34 Using Kotlin for Data Science - Roman Belov
2:54:22 Keep insisting! - Amanda Hinchman-Dominguez…
Schedule:
7:28 I Walk The Line: What Parts Of An App Should be in Kotlin Native - and What Parts Shouldn't? - Ellen Shapiro
1:07:34 Using Kotlin for Data Science - Roman Belov
2:54:22 Keep insisting! - Amanda Hinchman-Dominguez…
Завершение цикла постов о KotlinConf:
Going Native - опыт разработки мультиплатформенного игрового приложения.
В выступлении:
- Демо самой игры;
- Что ушло в общий код;
- Архитектура с множеством математических игр на двух платформах;
- Сравнение API между платформами;
- Рисование через общий код;
- Примеры утечек памяти;
- Особенности на стыке Kotlin и Swift (синглтоны, списки).
Sharing is caring - intro to kotlin multiplatform - погружение в мультиплатформу. В целом ничего нового и выделяющегося в выступлении не было.
"Share only what you want when you want" - хорошее выражение силы kotlin multiplatform.
И из последних новостей:
Вышла новая версия Kotlinx.coroutines 1.3.3 с обновлением kotlin до 1.3.61, рядом багфиксов, поддержкой watchOS, tvOS. В новом релизе пока нет поддержки многопоточности для Native (все еще в разработке).
#videos #libs
Going Native - опыт разработки мультиплатформенного игрового приложения.
В выступлении:
- Демо самой игры;
- Что ушло в общий код;
- Архитектура с множеством математических игр на двух платформах;
- Сравнение API между платформами;
- Рисование через общий код;
- Примеры утечек памяти;
- Особенности на стыке Kotlin и Swift (синглтоны, списки).
Sharing is caring - intro to kotlin multiplatform - погружение в мультиплатформу. В целом ничего нового и выделяющегося в выступлении не было.
"Share only what you want when you want" - хорошее выражение силы kotlin multiplatform.
И из последних новостей:
Вышла новая версия Kotlinx.coroutines 1.3.3 с обновлением kotlin до 1.3.61, рядом багфиксов, поддержкой watchOS, tvOS. В новом релизе пока нет поддержки многопоточности для Native (все еще в разработке).
#videos #libs
YouTube
Aud 15
KotlinConf live from Copenhagen!
Schedule:
6:40 The Compose Runtime, Demystified - Leland Richardson
1:07:15 Failure is not an Option - error handling strategies for Kotlin programs - Nat Pryce, Duncan McGregor
2:53:05 Testing with Coroutines - Sean McQuillan…
Schedule:
6:40 The Compose Runtime, Demystified - Leland Richardson
1:07:15 Failure is not an Option - error handling strategies for Kotlin programs - Nat Pryce, Duncan McGregor
2:53:05 Testing with Coroutines - Sean McQuillan…
Kotlin Multiplatform iOS frameworks dependencies - описание как подключить нативный iOS framework в Kotlin/Native.
Разобрано подключение FirebaseML Vision, с использованием cocoapods плагина и cinterop (из-за subspec'ов).
В простых случаях достаточно cocoapods-gradle plugin (раздел Interop в документации Kotlin/Native).
Для тех кому интересна тема подключения нативных библиотек в Kotlin/Native есть пример FirestoreKMP.
#posts #libs
Разобрано подключение FirebaseML Vision, с использованием cocoapods плагина и cinterop (из-за subspec'ов).
В простых случаях достаточно cocoapods-gradle plugin (раздел Interop в документации Kotlin/Native).
Для тех кому интересна тема подключения нативных библиотек в Kotlin/Native есть пример FirestoreKMP.
#posts #libs
Medium
Kotlin Multiplatform iOS frameworks dependencies
How to add iOS frameworks to Kotlin Multiplatform Library using cocoapods and cinteropt.
Forwarded from Egor Tolstoy
Всем привет! Мы стартанули новое исследование, в этот раз – про то, насколько понятны различные аспекты работы с мемори моделью в Kotlin/Native. В опросе – 10 сниппетов кода, для каждого из которых нужно ответить на два вопроса – согласны ли вы с результатом выполнения кода и понимаете ли, почему он работает именно так. Мы ждем ответов и от опытных пользователей, и от новичков.
Ваше участие сильно поможет нам в понимании текущих проблем и поиске решений для них.
https://surveys.jetbrains.com/s3/kotlin-native-memory-model-research
Ваше участие сильно поможет нам в понимании текущих проблем и поиске решений для них.
https://surveys.jetbrains.com/s3/kotlin-native-memory-model-research
Jetbrains
Kotlin/Native Memory Model Research
Kotlin/Native Memory Model Research.
Насколько Kotlin Multiplatform готов для эффективной разработки мобильных приложений - выступление с митапа Leroy Merlin. Спикер из Kaspersky Lab рассказал:
* Как шарят код между платформами в Kaspersky;
* Основы Kotlin Multiplatform;
* Немного болей Kotlin/Native;
* Свою историю реализации фуллстек kotlin multiplatform приложения;
* Стоимость перехода на Kotlin Multiplatform;
* Сравнение с Flutter.
#videos
* Как шарят код между платформами в Kaspersky;
* Основы Kotlin Multiplatform;
* Немного болей Kotlin/Native;
* Свою историю реализации фуллстек kotlin multiplatform приложения;
* Стоимость перехода на Kotlin Multiplatform;
* Сравнение с Flutter.
#videos
YouTube
Новогодний kotlin: Эффективная мультиплатформа и статический анализ кода
7:03 — Первый доклад: "Готов ли Kotlin Multiplatform для эффективной разработки мобильных приложений?"
Андрей Берюхов из Kaspersky Lab расскажет о базовых принципах работы с Kotlin Multiplatform (MPP) и проблемах, которые приходится решать; поделится своими…
Андрей Берюхов из Kaspersky Lab расскажет о базовых принципах работы с Kotlin Multiplatform (MPP) и проблемах, которые приходится решать; поделится своими…
А еще в нашем чатике @kotlinmppchats ребята из JetBrains ждут ваш фидбек по проблемам отладки в kotlin multiplatform
Forwarded from Liliia Abdulina
Всем привет! И снова команда mobile multiplatform на связи, и снова нужна ваша помощь :)
На этот раз дебаг, сейчас я составляю базовые сценарии его использования. Скажите, пожалуйста, когда/для чего вы чаще всего запускаете дебаггер? Тесты, юай, упоротый алгоритм, шальная переменная, что-то иное? Какие из функций дебаггера (степпинг, evaluate, etc.) — ваши любимые и заставляют особенно грустить, если они не работают? Что, на ваш взгляд, ну точно должно работать в дебаггере?
Отвечать можно на все вопросы, на какой-либо из заданных или на тот, что не прозвучал, но важен для debug experience :)
На этот раз дебаг, сейчас я составляю базовые сценарии его использования. Скажите, пожалуйста, когда/для чего вы чаще всего запускаете дебаггер? Тесты, юай, упоротый алгоритм, шальная переменная, что-то иное? Какие из функций дебаггера (степпинг, evaluate, etc.) — ваши любимые и заставляют особенно грустить, если они не работают? Что, на ваш взгляд, ну точно должно работать в дебаггере?
Отвечать можно на все вопросы, на какой-либо из заданных или на тот, что не прозвучал, но важен для debug experience :)
Наши разработчики поучаствовали в подкасте про Kotlin Multiplatform
https://twitter.com/andro_broadcast/status/1207941822510698496?s=21
https://twitter.com/andro_broadcast/status/1207941822510698496?s=21
Twitter
Android Broadcast
В новом выпуске подкаста поговорили о выходе за рамки Kotlin + Android для Android разработчика и создание приложения с использованием Kotlin Multiplatform для Android + iOS! Гости из компании IceRock: @tetraquark_v, @AndreyUsichenko, @nprokopishin https…
Powering Worldwide Learning with Kotlin Multiplatform - выступление о внедрении Kotlin Multiplatform в Quizlet (статья с их историей уже была в канале). Перевели сложную бизнес-логику в общий код сначала на JS, а потом на Kotlin Multiplatform (с шарингом на android, ios, web).
Practical Kotlin Native Concurrency Part 3 - новая часть разбора многопоточности в Kotlin/Native от Touchlab.
Разобрано актуальное состояние - превью многопоточных coroutines, библиотеки coroutineWorker и reaktive. На примерах показано как библиотеки решают вопрос многопоточности, когда происходит заморозка объектов и какие последствия заморозки можно встретить.
А так же разобраны Atomc'и.
#videos #posts
Practical Kotlin Native Concurrency Part 3 - новая часть разбора многопоточности в Kotlin/Native от Touchlab.
Разобрано актуальное состояние - превью многопоточных coroutines, библиотеки coroutineWorker и reaktive. На примерах показано как библиотеки решают вопрос многопоточности, когда происходит заморозка объектов и какие последствия заморозки можно встретить.
А так же разобраны Atomc'и.
#videos #posts
Kotlin Multiplatform in 2020 - обзорная статья про Kotlin Multiplatform и чего можно ожидать в 2020 году.
Braincup - игровое приложение для тренировки памяти и навыков по математике, фокусировке, сделано с общим кодом и реализует UI на Jetpack Compose, SwiftUI.
PeopleInSpace - небольшой проект пример с общим кодом на Kotlin Multiplatform и реализацией UI на Jetpack Compose и SwiftUI.
KInsight Alpha Capture - пример проекта с множеством платформ - iOS, MacOS, WatchOS (SwiftUI), Android (phone and Wear OS), JVM Web Server.
moko-geo - библиотека предсотавляющая доступ к трекингу геолокации из общего кода.
#posts #libs #samples
Braincup - игровое приложение для тренировки памяти и навыков по математике, фокусировке, сделано с общим кодом и реализует UI на Jetpack Compose, SwiftUI.
PeopleInSpace - небольшой проект пример с общим кодом на Kotlin Multiplatform и реализацией UI на Jetpack Compose и SwiftUI.
KInsight Alpha Capture - пример проекта с множеством платформ - iOS, MacOS, WatchOS (SwiftUI), Android (phone and Wear OS), JVM Web Server.
moko-geo - библиотека предсотавляющая доступ к трекингу геолокации из общего кода.
#posts #libs #samples
Big Nerd Ranch
Kotlin Multiplatform in 2020
The case for Kotlin Multiplatform and what to expect for Kotlin Multiplatform in 2020.
Building an iOS Fat Framework for a Kotlin Multiplatform Project - статья поможет настроить сборку iOS framework с архитектурами arm64 и x64, что позволит дальше распространять framework как готовую библиотеку через CocoaPods / Carthage. Может быть полезно тем, у кого не монореп и iOS часть собирается независимо от общего кода.
#posts
#posts
Medium
Building an iOS Fat Framework for a Kotlin Multiplatform Project
We don’t want no skinny frameworks
Всем привет в новом году. Праздники кончились и канал возвращается к своему обычному расписанию.
Начем год с статьи Maximizing Code Sharing between Android and iOS with Kotlin Multiplatform - она может быть интересна не только новичкам в kotlin multiplatform.
В статье есть:
- Краткий разбор что такое kotlin multiplatform и как он работает;
- Примеры что может находиться в общем коде, а что на платформах останется;
- Как настроить проект с нуля (с корректным переносом android ресурсов и манифеста в
- Пример реализации сетевого запроса (как обычно ktor-client + serialization);
- Пример реализации
- Пример проброса на iOS-swift сторону
- Настройка CocoaPods интеграции с iOS проектом;
- Набор ссылок на другие полезные ресурсы (все они уже были упомянуты в канале).
#posts
Начем год с статьи Maximizing Code Sharing between Android and iOS with Kotlin Multiplatform - она может быть интересна не только новичкам в kotlin multiplatform.
В статье есть:
- Краткий разбор что такое kotlin multiplatform и как он работает;
- Примеры что может находиться в общем коде, а что на платформах останется;
- Как настроить проект с нуля (с корректным переносом android ресурсов и манифеста в
androidMain
);- Пример реализации сетевого запроса (как обычно ktor-client + serialization);
- Пример реализации
ViewModel
с использованием AndroidArchitectureComponents на android (как в moko-mvvm);- Пример проброса на iOS-swift сторону
Flow
(обход стирания suspend функций при компиляции в iOS framework);- Настройка CocoaPods интеграции с iOS проектом;
- Набор ссылок на другие полезные ресурсы (все они уже были упомянуты в канале).
#posts
DEV Community
Maximizing Code Sharing between Android and iOS with Kotlin Multiplatform
This article aims to discuss code sharing between Android and iOS using Kotlin Multiplatform. You may...
Summer - kotlin multiplatform библиотека, предоставляющая компоненты для построения приложения с MVP подходом.
В библиотеке есть следующие компоненты:
- View
- Presenter
- UseCase
- Router
View является составной - это два интерфейса, один это State и другой - Methods.
Сразу предоставляются IDE шаблоны для быстрого создания основы.
#libs
В библиотеке есть следующие компоненты:
- View
- Presenter
- UseCase
- Router
View является составной - это два интерфейса, один это State и другой - Methods.
Сразу предоставляются IDE шаблоны для быстрого создания основы.
#libs
GitHub
GitHub - adevone/summer
Contribute to adevone/summer development by creating an account on GitHub.
Kotlin Multiplatform — MVVM & Clean Architecture - статья-пример реализации мобильных приложений по подходам MVVM и чистой архитектуры.
В примере использовались библиотеки kodein (для внедрения зависимостей), ktor-client, serialization, coroutines, moko-mvvm
И дополнение к предыдущему посту про библиотеку Summer, от автора библиотеки:
iOS часть в процессе тестирования на реальном проекте и возможны небольшие изменения АПИ библиотеки. А так же на момент публикации не было ссылок на плагин и базовые классы для iOS, но сейчас они уже указаны в readme.
#posts #libs
В примере использовались библиотеки kodein (для внедрения зависимостей), ktor-client, serialization, coroutines, moko-mvvm
И дополнение к предыдущему посту про библиотеку Summer, от автора библиотеки:
iOS часть в процессе тестирования на реальном проекте и возможны небольшие изменения АПИ библиотеки. А так же на момент публикации не было ссылок на плагин и базовые классы для iOS, но сейчас они уже указаны в readme.
#posts #libs
Medium
Kotlin Multiplatform — MVVM & Clean Architecture
During the KotlinConf 2019 there were several talks about Kotlin Multiplatform, in one of them Alexander talked about different libraries…
Using Gradle Metadata for a Kotlin multiplatform project - статья описывающая как Gradle Metadata позволяет упростить работу с зависимостями multiplatform проектов.
Детальнее про управление зависимостями можно прочитать в документации, а так же послушать в выступлении Ильи Матвеева - Мультиплатформенные проекты и Gradle.
Если интересно как устроены метаданные в деталях - можно ознакомиться на сайте gradle.
#posts #videos
Детальнее про управление зависимостями можно прочитать в документации, а так же послушать в выступлении Ильи Матвеева - Мультиплатформенные проекты и Gradle.
Если интересно как устроены метаданные в деталях - можно ознакомиться на сайте gradle.
#posts #videos
blog.data2viz.io
Using Gradle Metadata for a Kotlin multiplatform project
Data2viz is a Kotlin multimodule/multiplatform library. That means a lot of dependencies
and artifacts. Let’s see how Gradle Metadata simplifies the
dependencies management.
Before Gradle Metadata :
Android project
dependencies {
...
api "io.d…
and artifacts. Let’s see how Gradle Metadata simplifies the
dependencies management.
Before Gradle Metadata :
Android project
dependencies {
...
api "io.d…
Kotlin Multiplatform Android/iOS: Testing - статья о написании тестов на общий код.
На примере тестирования класса репозитория разобрано как можно создавать mock в общем коде, тестировать coroutines и проверять результат асинхронной операции без coroutine.
#posts
На примере тестирования класса репозитория разобрано как можно создавать mock в общем коде, тестировать coroutines и проверять результат асинхронной операции без coroutine.
#posts
Medium
Kotlin Multiplatform Android/iOS: Testing
How to write tests within Kotlin Multiplatform
Разбиение приложения на отдельные модули – типовая задача разработки. И разработка на kotlin multiplatform не исключение.
В статье Building an App with Kotlin Multiplatform: Structuring our app разобран кейс разделения приложения на модули, с учетом имеющихся ограничений. Описанное приложение доступно на github.
Так же для разработки многомодульного приложения можете использовать moko-template (шаблон с заложенной многомодульностью).
#posts
В статье Building an App with Kotlin Multiplatform: Structuring our app разобран кейс разделения приложения на модули, с учетом имеющихся ограничений. Описанное приложение доступно на github.
Так же для разработки многомодульного приложения можете использовать moko-template (шаблон с заложенной многомодульностью).
#posts
Joe Birch
Building an App with Kotlin Multiplatform: Structuring our app
Over the past few months I've been seeing more and more talk of Kotlin multiplatform online. With this rise in conversations on the topic, I naturally became more and more curious about the technology. I recently started planning out one of my next side-projects…
В Twitter запущен тред по сбору информации о использовании Kotlin Multiplatform в мобильной разработке. Можете присоединиться и рассказать о своем приложении, а так же можно прочитать о том что у других.
Выборка:
- Tpaga - платежное приложение, использует KMP, пока доступно только на android;
- WalpyApp - коллекция wallpapers, использует KMP, пока доступно только на android;
- Commit 2019 - приложение для конференции, использует KMP, доступно на android и ios, opensource;
- Eneco - приложение контроля и оплаты энергии, использует KMP, доступно на android и ios;
- Clue - приложение для женщин, использует KMP, доступно на android и ios.
И помимо выбранных есть еще ряд кейсов использования KMP для шаринга кода, в пока не опубликованных проектах либо приватных. Рекомендую почитать тред самим и, если есть чем поделиться, сообщить свой кейс.
#posts
Выборка:
- Tpaga - платежное приложение, использует KMP, пока доступно только на android;
- WalpyApp - коллекция wallpapers, использует KMP, пока доступно только на android;
- Commit 2019 - приложение для конференции, использует KMP, доступно на android и ios, opensource;
- Eneco - приложение контроля и оплаты энергии, использует KMP, доступно на android и ios;
- Clue - приложение для женщин, использует KMP, доступно на android и ios.
И помимо выбранных есть еще ряд кейсов использования KMP для шаринга кода, в пока не опубликованных проектах либо приватных. Рекомендую почитать тред самим и, если есть чем поделиться, сообщить свой кейс.
#posts
Twitter
Kotlin
📣Call for #kotlinmultiplatform use cases! Have you tried Kotlin Multiplatform for your mobile app? Please tell us about it. We are looking for people who are up for a short, use-case interview. If you’re interested, please reply to this tweet with the name…
Forwarded from Anastasiia Zakharova
Используете ли вы флаг -Xobjc-generics в своих проектах?
Anonymous Poll
37%
Использую
63%
Не использую