diff --git a/docusaurus.config.js b/docusaurus.config.js index 97efc315d..e7539de0b 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -2,7 +2,7 @@ const isProd = process.env.NODE_ENV === 'production'; /** @type {import('@docusaurus/types').DocusaurusConfig} */ module.exports = { - title: 'Kotlin Multiplatform Mobile', + title: 'Kotlin Multiplatform', tagline: 'Материалы для изучения от IceRock Development', url: process.env.CONFIG_URL || 'https://kmm.icerock.dev', baseUrl: process.env.CONFIG_BASE_URL || '/', @@ -113,7 +113,7 @@ module.exports = { title: 'More', items: [ { - label: 'Kotlin Multiplatform Mobile', + label: 'Kotlin Multiplatform', href: 'https://kotlinlang.org/lp/mobile', }, { diff --git a/learning/concurrency.md b/learning/concurrency.md index a4719e180..21e7025ee 100644 --- a/learning/concurrency.md +++ b/learning/concurrency.md @@ -11,7 +11,7 @@ sidebar_position: 20 - [kotlinlang docs - Coroutines guide](https://kotlinlang.org/docs/coroutines-guide.html) - [kotlinlang docs - Immutability in Kotlin/Native](https://kotlinlang.org/docs/native-immutability.html) - [kotlinlang docs - Concurrency in Kotlin/Native](https://kotlinlang.org/docs/native-concurrency.html) -- [kotlinlang docs - Concurrent mutability](https://kotlinlang.org/docs/mobile/concurrent-mutability.html) +- [kotlinlang docs - Concurrent mutability](https://kotlinlang.org/docs/multiplatform-mobile-concurrent-mutability.html) - [kotlinlang docs - Shared mutable state and concurrency](https://kotlinlang.org/docs/shared-mutable-state-and-concurrency.html) - [kotlinlang docs - Native memory manager](https://kotlinlang.org/docs/native-memory-manager.html) - [Многопоточность и Kotlin в Яндекс.Картах: как не допустить падения новых фич на iOS](https://habr.com/ru/company/yandex/blog/575846/) @@ -103,7 +103,7 @@ launch { } ``` -Используй для организации pipeline: несколько корутин обрабатывают данные через общий канал. В KMM — один из немногих shareable-примитивов для обмена данными между потоками. +Используй для организации pipeline: несколько корутин обрабатывают данные через общий канал. В KMP — один из немногих shareable-примитивов для обмена данными между потоками. ### Flow / StateFlow / SharedFlow diff --git a/learning/gradle/intro-gradle.md b/learning/gradle/intro-gradle.md index 71b7f2e46..9fbdda918 100644 --- a/learning/gradle/intro-gradle.md +++ b/learning/gradle/intro-gradle.md @@ -4,7 +4,7 @@ sidebar_position: 0 # Введение в Gradle -Работая с Kotlin Multiplatform Mobile для iOS разработчика главным испытанием становится не изучение +Работая с Kotlin Multiplatform, для iOS разработчика главным испытанием становится не изучение Kotlin, а изучение билд системы Gradle, которая собирает мультиплатформенную библиотеку. В данном разделе разобрано что есть Gradle с перспективы iOS разработчиков. @@ -27,7 +27,7 @@ Gradle написан на java и является JVM (Java Virtual Machine) использования требуется установленная на исполняемой машине JDK (Java Development Kit). Наиболее стабильная версия JDK - Oracle JDK (рекомендуется к скачиванию [Oracle JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) для -работы с KMM). +работы с KMP). Gradle имеет обширную, подробную документацию, доступную [тут](https://docs.gradle.org/current/userguide/userguide.html). @@ -199,7 +199,7 @@ android.useAndroidX=true # отключение предупреждения о том что используется ios шорткат для настройки таргетов ios mobile.multiplatform.iosTargetWarning=false -# путь до xcode проекта или воркспейса, используется Kotlin Multiplatform Mobile плагином для Android Studio чтобы запускать ios приложение с отладчиком +# путь до xcode проекта или воркспейса, используется Kotlin Multiplatform плагином для Android Studio, чтобы запускать ios приложение с отладчиком # Подробнее https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform-mobile xcodeproj=./sample/ios-app ``` diff --git a/learning/intro.md b/learning/intro.md index c06b0a298..a3cb251fd 100644 --- a/learning/intro.md +++ b/learning/intro.md @@ -4,6 +4,6 @@ sidebar_position: 1 # О разделе -Данный раздел является базой знаний по мобильной разработке с использованием Kotlin Multiplatform Mobile. +Данный раздел является базой знаний по мобильной разработке с использованием Kotlin Multiplatform. Здесь можно найти информацию про процесс сборки приложений, детали про Kotlin и Multiplatform разработку, а также платформенно специфичные детали про Android и iOS. diff --git a/learning/kotlin-multiplatform/how-to-start.md b/learning/kotlin-multiplatform/how-to-start.md index 179aef4aa..12a2e51a7 100644 --- a/learning/kotlin-multiplatform/how-to-start.md +++ b/learning/kotlin-multiplatform/how-to-start.md @@ -6,9 +6,9 @@ sidebar_position: 1 ## Материалы для изучения Kotlin Multiplatform -1. [Портал Kotlin Multiplatform Mobile](https://kotlinlang.org/lp/mobile/) - общее описание технологии, кейсы использования, информация о сообществе; -1. [Документация по Kotlin Multiplatform Mobile](https://kotlinlang.org/docs/mobile/home.html) - гайды по выполнению типовых задач, примеры, туториалы; +1. [Портал Kotlin Multiplatform](https://kotlinlang.org/docs/multiplatform/kmp-overview.html) - Что такое Kotlin Multiplatform? Почему компании выбирают KMP; +1. [Документация по Kotlin Multiplatform](https://kotlinlang.org/case-studies/?type=multiplatform) - примеры из практики; 1. [Видео для начинающих от JetBrains](https://www.youtube.com/playlist?list=PLlFc5cFwUnmy_oVc9YQzjasSNoAk4hk_C); -1. [Книга Kotlin Multiplatform Mobile with Ktor](https://michaelstromer.nyc/books/kotlin-multiplatform-mobile/introduction) - текстовый материал курса обучения по [KMM на Udemy](https://www.udemy.com/course/kotlin-multiplatform-mobile/); -1. Книга [Kotlin Multiplatform for iOS Developers от Touchlab](https://touchlab.co/kotlin-multiplatform-for-ios-developers-touchlab-kit/); -1. [Официальный FAQ](https://kotlinlang.org/docs/mobile/faq.html). +1. Курс [Kotlin Multiplatform на Udemy](https://www.udemy.com/course/kotlin-multiplatform-mobile/) - текстовый материал для обучения; +1. [Официальный FAQ](https://kotlinlang.org/docs/multiplatform/faq.html). + \ No newline at end of file diff --git a/learning/kotlin-multiplatform/kmm-reasons.md b/learning/kotlin-multiplatform/kmp-reasons.md similarity index 86% rename from learning/kotlin-multiplatform/kmm-reasons.md rename to learning/kotlin-multiplatform/kmp-reasons.md index 9b8c3ea5a..97410f4c6 100644 --- a/learning/kotlin-multiplatform/kmm-reasons.md +++ b/learning/kotlin-multiplatform/kmp-reasons.md @@ -2,7 +2,7 @@ sidebar_position: 1 --- -# Почему выбирают Kotlin Multiplatform Mobile? +# Почему выбирают Kotlin Multiplatform? В сообществе [MobileNativeFoundation](https://github.com/MobileNativeFoundation) представитель Touchlab [рассказал их наблюдения о том почему компании выбирают Kotlin Multiplatform](https://github.com/MobileNativeFoundation/discussions/discussions/43#discussioncomment-476363). @@ -35,4 +35,4 @@ sidebar_position: 1 > * [Slack moves away from C++](https://slack.engineering/client-consistency-at-slack-beyond-libslack/) > * [Dropbox moves away from C++](https://dropbox.tech/mobile/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android) -А также на сайте [Kotlin Multiplatform Mobile](https://kotlinlang.org/lp/mobile/) в разделе [Case Studies](https://kotlinlang.org/lp/mobile/case-studies/) можно прочитать детально о опыте использованя технологии в разных компаниях. Уже сейчас там есть компании VMWare, Autodesk, Yandex, Square, Philips, Netflix и другие, включая и нас, IceRock. \ No newline at end of file +А также на сайте [Kotlin Multiplatform](https://kotlinlang.org/multiplatform/) в разделе [Case Studies](https://kotlinlang.org/case-studies/?type=multiplatform) можно прочитать детально о опыте использованя технологии в разных компаниях. Уже сейчас там есть компании VMWare, Autodesk, Yandex, Square, Philips, Netflix и другие, включая и нас, IceRock. diff --git a/learning/kotlin-native/size_impact.md b/learning/kotlin-native/size_impact.md index 9fae50d84..0b298446b 100644 --- a/learning/kotlin-native/size_impact.md +++ b/learning/kotlin-native/size_impact.md @@ -12,7 +12,7 @@ sidebar_position: 2 > My .framework is around ~15 mb. For a pretty small sdk with a couple of standard dependencies like ktor. > I am fine with that, but you know...customers complains. So I must check if there are anything to do with binary sizes. > I tried "internalizing" all I could. And there were a pretty nice effect. I actually saw a reduction of ~500 kb after doing that on a bunch of data classes. Wonder if there are anything else that can help to downsize. -> @kpgalligan I remember you were talking about KMM team working on K\N - Swift interoperability which should reduce the size. Wondering if there are any progress on that. I read somewhere that this work was frozen. +> @kpgalligan I remember you were talking about KMP team working on K\N - Swift interoperability which should reduce the size. Wondering if there are any progress on that. I read somewhere that this work was frozen. > > Kevin Galligan > Well, again, to measure the actual size, you need to either push it to the app store and let apples servers crunch numbers, or run local size estimates with Xcode. The size on your dev disk is not wha the actual app size will be. I don't remember how I presented it in that talk (and I have a talk today that I'm really not prepared for, so I don't have a lot of time to reply here...), but raw numbers on disk don't really tell the story. For KaMP Kit, which has ktor, sqldelight, and a few others, our sizes were ~1.5m as a final size increase on real devices. I assume local disk size was much larger, but it's been a while. diff --git a/learning/kotlin-native/summary.md b/learning/kotlin-native/summary.md index e92481dbe..9d78d8f5e 100644 --- a/learning/kotlin-native/summary.md +++ b/learning/kotlin-native/summary.md @@ -22,7 +22,7 @@ sidebar_position: 1 1.  - выступление Иготти о том как устроена многопоточность и иммутабельность в K/N 2.  - выступление Галлигана с разжевыванием темы многопоточнсоти 3.  - три статьи от Галлигана с хорошим разобором темы - 4.  - раздел Working with concurrency в документации KMM тоже с хорошим разобром от Галлигана + 4.  - раздел Working with concurrency в документации KMP тоже с хорошим разобром от Галлигана 5. Колдовская штука-хак  которая позволяет шарить что-либо без заморозки. 6. Touchlab гайд по многопоточности + видео - 5. Отладка K/N -  diff --git a/learning/movement_workspace_dir.md b/learning/movement_workspace_dir.md index e8cb0ee11..480d42907 100644 --- a/learning/movement_workspace_dir.md +++ b/learning/movement_workspace_dir.md @@ -14,7 +14,7 @@ При разработке для мультиплатформы мы часто используем вот эти директории: -- проектов для android/kmm: +- проектов для android/kmp: `~/AndroidStudioProjects` - проектов для xcode: `~/Documents/xCode` @@ -40,7 +40,7 @@ #### Перенос проектов -Давайте начнем с простого и перенесем для начала директории проектов. Предлагаю создать на внешнем диске папку Projects, а в ней создать: Android, KMM, Xcode. Теперь перенесем наши проекты в них. +Давайте начнем с простого и перенесем для начала директории проектов. Предлагаю создать на внешнем диске папку Projects, а в ней создать: Android, KMP, Xcode. Теперь перенесем наши проекты в них. #### Перенос .konan diff --git a/learning/problem-solving/gradle-daemon-crash.md b/learning/problem-solving/gradle-daemon-crash.md index 85224e993..4e501f624 100644 --- a/learning/problem-solving/gradle-daemon-crash.md +++ b/learning/problem-solving/gradle-daemon-crash.md @@ -1,6 +1,6 @@ # Падение Gradle daemon -Бывают ситуации, что при компиляции KMM проекта Gradle daemon неожиданно завершается (крешится). Причины такого поведения могут быть разные и их сложно разбирать, поэтому в данной статье описано как можно анализировать данную проблему на нескольких ситуациях, с которыми мы столкнулись в своей работе. +Бывают ситуации, что при компиляции KMP проекта Gradle daemon неожиданно завершается (крешится). Причины такого поведения могут быть разные и их сложно разбирать, поэтому в данной статье описано как можно анализировать данную проблему на нескольких ситуациях, с которыми мы столкнулись в своей работе. ``` FAILURE: Build failed with an exception. diff --git a/onboarding/getting-started.md b/onboarding/getting-started.md index 47e045354..c02b2575b 100644 --- a/onboarding/getting-started.md +++ b/onboarding/getting-started.md @@ -2,7 +2,7 @@ sidebar_position: 1 --- -# Знакомство с KMM +# Знакомство с KMP Ознакомься с материалами про Kotlin Multiplatform: diff --git a/onboarding/intro.md b/onboarding/intro.md index bce8c747a..ce4ce3ff1 100644 --- a/onboarding/intro.md +++ b/onboarding/intro.md @@ -4,4 +4,4 @@ sidebar_position: 0 # О разделе -Данный раздел в первую очередь создавался для погружения новых разработчиков IceRock Development в технологию Kotlin Multiplatform Mobile и в подходы, которые используются в компании. Ориентированность на внутренних сотрудников не означает что внешним разработчикам материал будет бесполезен, так же как и не означает что что-то закрыто только для сотрудников. Любой желающий может ознакомиться со всеми материалами от начала и до конца, приобрести знания и навыки разработки с Kotlin Multiplatform Mobile и MOKO. +Данный раздел в первую очередь создавался для погружения новых разработчиков IceRock Development в технологию Kotlin Multiplatform и в подходы, которые используются в компании. Ориентированность на внутренних сотрудников не означает что внешним разработчикам материал будет бесполезен, так же как и не означает что что-то закрыто только для сотрудников. Любой желающий может ознакомиться со всеми материалами от начала и до конца, приобрести знания и навыки разработки с Kotlin Multiplatform и MOKO. diff --git a/onboarding/kmm-details.md b/onboarding/kmm-details.md deleted file mode 100644 index 609ec63b1..000000000 --- a/onboarding/kmm-details.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Особенности KMM - -Работа с Kotlin Multiplatfom Mobile, как и с любым другим инструментом, имеет ряд особенностей. Познакомься с ними по ссылкам ниже: - -- [Особенности KMM (в базе знаний)](../learning/kotlin-multiplatform/mobile-highlights) -- [Проблемы с Gradle Daemon](../learning/problem-solving/gradle-daemon-crash) diff --git a/onboarding/kmp-details.md b/onboarding/kmp-details.md new file mode 100644 index 000000000..ae53d6227 --- /dev/null +++ b/onboarding/kmp-details.md @@ -0,0 +1,10 @@ +--- +sidebar_position: 6 +--- + +# Особенности KMP + +Работа с Kotlin Multiplatform, как и с любым другим инструментом, имеет ряд особенностей. Познакомься с ними по ссылкам ниже: + +- [Особенности KMP (в базе знаний)](../learning/kotlin-multiplatform/mobile-highlights) +- [Проблемы с Gradle Daemon](../learning/problem-solving/gradle-daemon-crash) diff --git a/onboarding/project-inside.md b/onboarding/project-inside.md index 0186c2cef..2674514dd 100644 --- a/onboarding/project-inside.md +++ b/onboarding/project-inside.md @@ -6,7 +6,7 @@ sidebar_position: 3 ## Вводная -В данной статье разобран типовой KMM проект на базе [mobile-moko-boilerplate](https://gitlab.icerockdev.com/scl/boilerplate/mobile-moko-boilerplate). Внимание уделено каждому файлу и директории в проекте, дано пояснение ко всему - для чего используется, в каких случаях нужно вносить изменения, как работает. +В данной статье разобран типовой KMP проект на базе [mobile-moko-boilerplate](https://gitlab.icerockdev.com/scl/boilerplate/mobile-moko-boilerplate). Внимание уделено каждому файлу и директории в проекте, дано пояснение ко всему - для чего используется, в каких случаях нужно вносить изменения, как работает. После ознакомления с материалом вы узнаете: @@ -68,7 +68,7 @@ master.sh - `android/` - директория с Android-приложением и связанными модулями (app, uikit, utils) - `ios-app/` - директория с исходным кодом iOS приложения - `build-logic/` - директория с композитной сборкой для логики Gradle -- `mpp-library/` - директория с исходным кодом общей библиотеки на KMM +- `mpp-library/` - директория с исходным кодом общей библиотеки на KMP - `gradle/` - специальная директория системы сборки Gradle, в которой лежит Gradle Wrapper - `gradle/libs.versions.toml` - Version Catalog для управления зависимостями - `build.gradle.kts` - файл конфигурации сборки корневого gradle проекта @@ -136,7 +136,7 @@ enableFeaturePreview("VERSION_CATALOGS") - `android-app-convention` - для Android-приложений - `android-compose-convention` - для Android с Compose -- `multiplatform-library-convention` - для KMM-библиотек +- `multiplatform-library-convention` - для KMP-библиотек - `detekt-convention` - для линтинга - `skie-convention` - для iOS diff --git a/onboarding/project-setup.md b/onboarding/project-setup.md index 37807c20b..48e484a60 100644 --- a/onboarding/project-setup.md +++ b/onboarding/project-setup.md @@ -20,7 +20,7 @@ sidebar_position: 2 ## 2. Настройка рабочего окружения -Для полноценной работы с KMM потребуется macOS, так как iOS-приложение (и iOS-версию Kotlin-библиотеки) можно скомпилировать только на macOS — это ограничение Apple (требуется Xcode, доступный только на macOS). На других платформах будет доступна только компиляция под Android. Код common-части писать и отлаживать можно, но без возможности проверить его работу под iOS. +Для полноценной работы с KMP потребуется macOS, так как iOS-приложение (и iOS-версию Kotlin-библиотеки) можно скомпилировать только на macOS — это ограничение Apple (требуется Xcode, доступный только на macOS). На других платформах будет доступна только компиляция под Android. Код common-части писать и отлаживать можно, но без возможности проверить его работу под iOS. Все нижеописанные инструкции будут выполнены на операционной системе macOS. @@ -80,7 +80,7 @@ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-VERSION.jdk/Contents/Home ### 2.3. Android Studio -Для работы с Kotlin-кодом требуется IDE от JetBrains — IntelliJ IDEA или Android Studio. Команда Kotlin Multiplatform Mobile на данный момент [позиционирует Android Studio](https://kotlinlang.org/multiplatform/) как основную IDE, поэтому требуется установить её. +Для работы с Kotlin-кодом требуется IDE от JetBrains — IntelliJ IDEA или Android Studio. Команда Kotlin Multiplatform на данный момент [позиционирует Android Studio](https://kotlinlang.org/multiplatform/) как основную IDE, поэтому требуется установить её. Для этого рекомендуем использовать [JetBrains Toolbox](https://www.jetbrains.com/toolbox-app/) — это приложение будет самостоятельно следить за актуальностью используемой версии IDE и позволяет легко устанавливать/обновлять все продукты JetBrains. @@ -112,7 +112,7 @@ export ANDROID_SDK_ROOT=~/Library/Android/sdk #### Рекомендуемые плагины -Для комфортной работы с KMM-проектами рекомендуем установить следующие плагины: +Для комфортной работы с KMP-проектами рекомендуем установить следующие плагины: - **Swift Support** — поддержка Swift-файлов в Android Studio - **YAML** — подсветка и работа с YAML-конфигурациями @@ -181,21 +181,21 @@ sudo gem install xcpretty xcpretty автоматически используется в наших проектах при сборке через CocoaPods. Он делает вывод сборки читаемым и компактным. -### 2.7. Kotlin Multiplatform Mobile plugin +### 2.7. Kotlin Multiplatform plugin -JetBrains предоставляет для Android Studio специальный [плагин Kotlin Multiplatform Mobile](https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform). Его возможности: +JetBrains предоставляет для Android Studio специальный [плагин Kotlin Multiplatform](https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform). Его возможности: -- Шаблоны для создания KMM-проекта / KMM-модуля. +- Шаблоны для создания KMP-проекта / KMP-модуля. - Запуск iOS-приложения из Android Studio. - Отладка iOS-приложения из Android Studio (можно поставить брейкпоинты в common-коде на Kotlin, и при выполнении iOS-приложение остановится в этом месте). Данный плагин доступен только на macOS (так как запуск и отладка iOS-приложения возможны только там). -Для установки нужно перейти в ` Settings -> Plugins -> Marketplace `, найти Kotlin Multiplatform Mobile, нажать ` Install ` и дождаться окончания загрузки. +Для установки нужно перейти в ` Settings -> Plugins -> Marketplace `, найти Kotlin Multiplatform, нажать ` Install ` и дождаться окончания загрузки. ![plugins](project-setup/project-setup-plugins.png) -Важно понимать, что данный плагин не является обязательным требованием для работы с KMM. Вы можете разрабатывать приложения и без него, он нужен только для удобства отладки iOS-части. +Важно понимать, что данный плагин не является обязательным требованием для работы с KMP. Вы можете разрабатывать приложения и без него, он нужен только для удобства отладки iOS-части. При обновлениях Kotlin могут происходить ситуации, когда данный плагин ломает работу IDE (например, Gradle Sync не завершается). В таких случаях приходится вынужденно выключать плагин. @@ -524,7 +524,7 @@ open ios-app/ios-app.xcworkspace ### Сборка напрямую из Android Studio -При использовании плагина ` Kotlin Multiplatform Mobile ` доступна возможность запускать iOS-приложение прямо из Android +При использовании плагина ` Kotlin Multiplatform ` доступна возможность запускать iOS-приложение прямо из Android Studio. Данный способ не отменяет работы с CocoaPods, но может быть удобной альтернативой запуску через Xcode. @@ -630,7 +630,7 @@ Napier.base(CrashReportingAntilog(CrashlyticsLogger())) ### Отладка с использованием Android Studio -При использовании плагина Kotlin Multiplatform Mobile можно проводить отладку Kotlin-кода в iOS-приложении прямо из +При использовании плагина Kotlin Multiplatform можно проводить отладку Kotlin-кода в iOS-приложении прямо из Android Studio. Для этого устанавливаем брейкпоинт (кликом справа от номера строки) на нужной строке: diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index 338783ea0..c4ca1ddaf 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -8,7 +8,7 @@ const FeatureList = [ Svg: require('../../static/img/feature-3.svg').default, description: ( <> - Инструкция по погружению в разработку с использованием Kotlin Multiplatform Mobile + Инструкция по погружению в разработку с использованием Kotlin Multiplatform специально для новых сотрудников IceRock Development. Предназначен для опытных разработчиков под Android или iOS. @@ -19,9 +19,9 @@ const FeatureList = [ Svg: require('../../static/img/feature-1.svg').default, description: ( <> - Коллекция материалов для изучения Kotlin Multiplatform Mobile. + Коллекция материалов для изучения Kotlin Multiplatform. Статьи, видео записи, презентации и примеры кода. - Собраны различные кейсы и полезные материалы из опыта работы с KMM начиная с 2018 года. + Собраны различные кейсы и полезные материалы из опыта работы с KMP начиная с 2018 года. ), className: "knowledgeFeature" @@ -31,7 +31,7 @@ const FeatureList = [ Svg: require('../../static/img/feature-2.svg').default, description: ( <> - Курс обучения разработке под Android и iOS с использованием Kotlin Multiplatform Mobile. + Курс обучения разработке под Android и iOS с использованием Kotlin Multiplatform. Данный курс преподается в корпоративном университете IceRock и предназначен для начинающих разработчиков. ), diff --git a/university/0-intro.md b/university/0-intro.md index d03adbc5d..b63a16917 100644 --- a/university/0-intro.md +++ b/university/0-intro.md @@ -2,11 +2,11 @@ sidebar_position: 0 --- -# IceRock KMM University +# IceRock KMP University ## О курсе -Внутренний университет IceRock проводит обучение начинающих специалистов, желающих освоить разработку под мобильные платформы - Android и iOS, с применением технологии Kotlin Multiplatform Mobile. +Внутренний университет IceRock проводит обучение начинающих специалистов, желающих освоить разработку под мобильные платформы - Android и iOS, с применением технологии Kotlin Multiplatform. Материалы курса доступны публично и его можно проходить самостоятельно, однако для студентов университета компании есть следующие преимущества: @@ -16,13 +16,13 @@ sidebar_position: 0 Важная особенность курса - **нет разделения на Android и iOS разработчиков**. Студенты курса выполняют задачи как на Android так и на iOS (без глубокого погружения в специфику конкретной платформы, особенно в UI) - это позволяет лучше понять в чем платформы похожи, а в чем различаются. Изучение обеих платформ позволяет делать общий код наиболее оптимальным образом, учитывающим особенности и Android и iOS. -После завершения обучения и успешного выполнения выпускного задания студент может выбрать какая платформа будет для него в приоритете и переходит в одну из производственных команд в роли iOS + KMM / Android + KMM разработчика. Уже в производственной команде бывший студент изучит более глубоко выбранную платформу, но уже будет иметь базу по обеим. +После завершения обучения и успешного выполнения выпускного задания студент может выбрать какая платформа будет для него в приоритете и переходит в одну из производственных команд в роли iOS + KMP / Android + KMP разработчика. Уже в производственной команде бывший студент изучит более глубоко выбранную платформу, но уже будет иметь базу по обеим. ## Структура 1. Основы разработки Android приложений 1. Основы разработки iOS приложений -1. Основы разработки Kotlin Multiplatform Mobile +1. Основы разработки Kotlin Multiplatform 1. Основы мобильной разработки в IceRock 1. Реализация форм ввода данных 1. Реализация списков с данными @@ -33,7 +33,7 @@ sidebar_position: 0 ## Выпускная работа -В завершении прохождения курса выполняется выпускная работа - студент самостоятельно реализует мобильное приложение, с использованием KMM и изученных подходов, в реальных производственных процессах компании. +В завершении прохождения курса выполняется выпускная работа - студент самостоятельно реализует мобильное приложение, с использованием KMP и изученных подходов, в реальных производственных процессах компании. Проект, который потребуется выполнить, может быть как синтетический, так и реальный (если в нужный момент времени окажется доступен к выполнению реальный проект, а студент будет способен его выполнить). ## Длительность diff --git a/university/1-android-basics/android-intro.md b/university/1-android-basics/android-intro.md index 81e362ebc..b2cb0f6d0 100644 --- a/university/1-android-basics/android-intro.md +++ b/university/1-android-basics/android-intro.md @@ -4,7 +4,7 @@ sidebar_position: 0 # Основы Android -Для изучения мобильной разработки с использованием Kotlin Multiplatform Mobile важно изучить основы Android разработки - эти знания и опыт помогут писать общий код для Android и iOS с учетом особенностей обеих платформ. +Для изучения мобильной разработки с использованием Kotlin Multiplatform важно изучить основы Android разработки - эти знания и опыт помогут писать общий код для Android и iOS с учетом особенностей обеих платформ. В основы разработки Android приложений мы включаем: diff --git a/university/2-ios-basics/ios-intro.md b/university/2-ios-basics/ios-intro.md index 138c5ace9..1a42328f2 100644 --- a/university/2-ios-basics/ios-intro.md +++ b/university/2-ios-basics/ios-intro.md @@ -4,8 +4,9 @@ sidebar_position: 0 # Основы iOS -Любому разработчику, использующему Kotlin Multiplatform Mobile, необходимы уверенные базовые знания разработки под iOS, -чтобы лучше писать общий код, и понимать логику и структуру iOS части приложения +Любому разработчику, использующему Kotlin Multiplatform, необходимы уверенные базовые знания разработки под iOS, +чтобы лучше писать общий код и понимать логику и структуру iOS части приложения. + Основные учебники для этого раздела - две официальные интерактивные книги [Develop in Swift Fundamentals](https://books.apple.com/ru/book/develop-in-swift-fundamentals/id1581182804?l=en) и [Develop in Swift Data Collections](https://books.apple.com/ru/book/develop-in-swift-data-collections/id1581183203?l=en), diff --git a/university/3-kotlin-multiplatform-mobile/_category_.json b/university/3-kotlin-multiplatform-mobile/_category_.json index 0bd2126a6..67339f7cd 100644 --- a/university/3-kotlin-multiplatform-mobile/_category_.json +++ b/university/3-kotlin-multiplatform-mobile/_category_.json @@ -1,4 +1,4 @@ { "position": 3, - "label": "3. Основы разработки Kotlin Multiplatform Mobile" + "label": "3. Основы разработки Kotlin Multiplatform" } diff --git a/university/3-kotlin-multiplatform-mobile/expect-actual.md b/university/3-kotlin-multiplatform-mobile/expect-actual.md index a937ad3fa..a8a3e1722 100644 --- a/university/3-kotlin-multiplatform-mobile/expect-actual.md +++ b/university/3-kotlin-multiplatform-mobile/expect-actual.md @@ -5,12 +5,12 @@ sidebar_position: 2 # expect/actual expect/actual - это механизм, позволяющий использовать в общем коде платформенную реализацию класса, функции или переменной. -Изучите [раздел](https://kotlinlang.org/docs/mpp-connect-to-apis.html) на официальном сайте. +Изучите [раздел](https://kotlinlang.org/docs/multiplatform/multiplatform-connect-to-apis.html) на официальном сайте. В качестве практического задания, предлагаем вам: -1. Создать новый KMM проект по [инструкции](https://kotlinlang.org/docs/kmm-create-first-app.html) - - используйте `CocoaPods dependency manager` в качестве iOS Framework distribution - - прочитайте о [CocoaPods dependency manager](https://kotlinlang.org/docs/native-cocoapods.html#use-a-kotlin-gradle-project-as-a-cocoapods-dependency) и [Regular framework](https://kotlinlang.org/docs/multiplatform-mobile-understand-project-structure.html#ios-application) +1. Создать новый KMP проект по [инструкции](https://kotlinlang.org/docs/multiplatform/get-started.html) + - выберите `Regular framework` в качестве iOS Framework distribution (по умолчанию) + - прочитайте о [CocoaPods dependency manager](https://kotlinlang.org/docs/native-cocoapods.html#use-a-kotlin-gradle-project-as-a-cocoapods-dependency) и [Regular framework](https://kotlinlang.org/docs/multiplatform/multiplatform-discover-project.html#ios-application) 2. Добавить в общий код `expect` функцию `log()` 3. Добавить `actual` реализацию функции `log` для Android, используя функцию `Log.d(String tag, String msg)` из пакета `android.util` 4. Добавить `actual` реализацию функции `log` для iOS, используя `NSLog()` @@ -18,13 +18,13 @@ expect/actual - это механизм, позволяющий использо ## Добавление зависимостей -Как вы уже знаете из раздела [Основы Kotlin Multiplatform Mobile](kmm), подключить библиотеку можно напрямую к таргету, а с помощью `expect` и `actual` использовать ее в общем коде. +Как вы уже знаете из раздела [Основы Kotlin Multiplatform](kmp), подключить библиотеку можно напрямую к таргету, а с помощью `expect` и `actual` использовать ее в общем коде. Для практики, выполните следующее задание. Используйте проект, который вы изменяли ранее: - Подключите [moshi](https://github.com/square/moshi) к Android таргету - Подключите pod [NSTEasyJSON](https://github.com/bernikovich/NSTEasyJSON) к shared блоку - Добавьте в Podfile строку `pod 'NSTEasyJSON'` - - В gradle этого блока в разделе `cocoapods` добавить эту библиотеку: pod("NSTEasyJSON"). [Инструкция](https://kotlinlang.org/docs/native-cocoapods.html). + - В gradle этого блока в разделе `cocoapods` добавить эту библиотеку: pod("NSTEasyJSON"). [Инструкция](https://kotlinlang.org/docs/native-cocoapods.html#use-a-kotlin-gradle-project-as-a-cocoapods-dependency). ```kotlin cocoapods { summary = "Some description for the Shared Module" @@ -48,7 +48,7 @@ expect/actual - это механизм, позволяющий использо ## typealias -Чтобы узнать, как можно упросить использование механизма expect/actual, [прочитайте](https://kotlinlang.org/docs/mpp-connect-to-apis.html#rules-for-expected-and-actual-declarations) о возможностях `typealias` и выполните следующие действия, используя проект, который вы изменяли ранее: +Чтобы узнать, как можно упростить использование механизма expect/actual, [прочитайте](https://kotlinlang.org/docs/multiplatform/multiplatform-connect-to-apis.html#rules-for-expected-and-actual-declarations) о возможностях `typealias` и выполните следующие действия, используя проект, который вы изменяли ранее: - Создайте `expect class AtomicRef` - Добавьте `actual` реализацию используя `typealias` и класс `java.util.concurrent.atomic.AtomicReference` diff --git a/university/3-kotlin-multiplatform-mobile/kmm-intro.md b/university/3-kotlin-multiplatform-mobile/kmp-intro.md similarity index 100% rename from university/3-kotlin-multiplatform-mobile/kmm-intro.md rename to university/3-kotlin-multiplatform-mobile/kmp-intro.md diff --git a/university/3-kotlin-multiplatform-mobile/kmm.md b/university/3-kotlin-multiplatform-mobile/kmp.md similarity index 81% rename from university/3-kotlin-multiplatform-mobile/kmm.md rename to university/3-kotlin-multiplatform-mobile/kmp.md index e2b04e44e..6328836ea 100644 --- a/university/3-kotlin-multiplatform-mobile/kmm.md +++ b/university/3-kotlin-multiplatform-mobile/kmp.md @@ -2,25 +2,25 @@ sidebar_position: 1 --- -# Основы Kotlin Multiplatform Mobile +# Основы Kotlin Multiplatform -Для начала, чтобы разобраться, что из себя представляет технология Kotlin Multiplatform Mobile, советуем изучить [официальный сайт](https://kotlinlang.org/lp/mobile/). +Для начала, чтобы разобраться, что из себя представляет технология Kotlin Multiplatform, советуем изучить [официальный сайт](https://kotlinlang.org/lp/mobile/). Также, для лучшего понимания, как Kotlin Multiplatform помогает сократить время разработки, советуем прочитать две статьи: [от JetBrains](https://blog.jetbrains.com/ru/kotlin/2020/08/kotlin-multiplatform-mobile-goes-alpha/) и [от IceRock](https://vc.ru/services/167078-kak-kotlin-multiplatform-pomogaet-sokratit-vremya-razrabotki-prilozheniy) -Далее, можете переходить к изучению технологии в [документации](https://kotlinlang.org/docs/mpp-intro.html) +Далее, можете переходить к изучению технологии в [документации](https://kotlinlang.org/docs/multiplatform/) -1. Знакомство с KMM начните с официальных [видео](https://www.youtube.com/playlist?list=PLlFc5cFwUnmy_oVc9YQzjasSNoAk4hk_C) для начинающих -2. Создайте свое первое мультиплатформенное приложение по [инструкции](https://kotlinlang.org/docs/kmm-create-first-app.html) - - используйте утилиту [kdoctor](https://github.com/Kotlin/kdoctor), чтобы проверить, что локальное окружение настроено для работы с KMM +1. Знакомство с KMP начните с официальных [видео](https://www.youtube.com/playlist?list=PLlFc5cFwUnmy_oVc9YQzjasSNoAk4hk_C) для начинающих +2. Создайте свое первое мультиплатформенное приложение по [инструкции](https://kotlinlang.org/docs/multiplatform/get-started.html) + - используйте утилиту [kdoctor](https://github.com/Kotlin/kdoctor), чтобы проверить, что локальное окружение настроено для работы с KMP - для iOS автоматически будет создано приложение на SwiftUI, [памятка](../memos/swiftui-to-uikit) по переходу на UIKit -3. Разберитесь со структурой KMM приложения по [ссылке](https://kotlinlang.org/docs/kmm-understand-project-structure.html) -4. [Кодлаба](https://kotlinlang.org/docs/kmm-integrate-in-existing-app.html) про изменение готового Android-приложения для работы с iOS -5. [Инструкция](https://kotlinlang.org/docs/kmm-add-dependencies.html) по добавлению зависимостей к KMM модулю +3. Разберитесь со структурой KMP приложения по [ссылке](https://kotlinlang.org/docs/multiplatform/multiplatform-discover-project.html) +4. [Кодлаба](https://kotlinlang.org/docs/multiplatform/multiplatform-integrate-in-existing-app.html) про изменение готового Android-приложения для работы с iOS +5. [Инструкция](https://kotlinlang.org/docs/multiplatform/multiplatform-add-dependencies.html) по добавлению зависимостей к KMP модулю ## Мультиплатформенные библиотеки Мультиплатформенная библиотека - это библиотека, адаптированная для использования на разных платформах. Функционал такой библиотеки можно использовать в общем коде, он будет работать для всех таргетов, которые поддерживает библиотека. -Таргеты мультиплатформенной библиотеки - целевая платформа, на которой будет выполняться скомпилированная библиотека. Со списком всех таргетов, поддерживаемых Kotlin Multiplatform можете ознакомиться по [ссылке](https://kotlinlang.org/docs/mpp-supported-platforms.html) +Таргеты мультиплатформенной библиотеки - целевая платформа, на которой будет выполняться скомпилированная библиотека. Со списком всех таргетов, поддерживаемых Kotlin Multiplatform можете ознакомиться по [ссылке](https://kotlinlang.org/docs/multiplatform/supported-platforms.html) В работе нас будут интересовать библиотеки поддерживающие следующие таргеты: - `jvm` - для работы приложений на Java Virtual Machine (jvm библиотеки поддерживаются на android) - `androidJvm` - для работы приложения на Android устройствах @@ -43,9 +43,9 @@ kotlin { } ``` -Также, определить таргеты мулитиплатформенной библиотеки можно изучив ее артефакты на [Maven Central](https://search.maven.org/) +Также определить таргеты мулитиплатформенной библиотеки можно, изучив ее артефакты на [Maven Central](https://central.sonatype.com/) -Например, рассмотрим библиотеку [moko-fields](https://search.maven.org/search?q=g:dev.icerock.moko%20fields) +Например, рассмотрим библиотеку [moko-fields](https://central.sonatype.com/search?q=g:dev.icerock.moko%20fields) ![maven-library](/assets/maven-library.png) @@ -58,15 +58,15 @@ kotlin { Для поиска мультиплатформенной библиотеки, подходящей для решения вашей задачи, советуем сначала поискать на следующих ресурсах: - [kmm-awesome](https://github.com/terrakok/kmm-awesome) - [libs.kmp.icerock.dev](https://libs.kmp.icerock.dev) -- [kamp.petuska.dev](https://kamp.petuska.dev/) +- [KMP Weekly](https://kmpweekly.com/) В заключение, можете посмотреть [видео](https://youtu.be/jAIuy91YWfU) про создание мультиплатформенных библиотек на примере [mutliplatform-settings](https://github.com/russhwolf/multiplatform-settings) ## Настройка gradle -[Официальная документация](https://kotlinlang.org/docs/mpp-dsl-reference.html) по настройке gradle для работы с KMM. +[Официальная документация](https://kotlinlang.org/docs/multiplatform/multiplatform-dsl-reference.html) по настройке gradle для работы с KMP. Из [видео](https://youtu.be/23BJW4w0gkY) вы узнаете, как создать и настроить gradle-проект до состояния, с которого стартует разработка нового проекта в IceRock -[Документация](https://kotlinlang.org/docs/multiplatform-hierarchy.html) про иерархическую структуру мультиплатофрменных проектов +[Документация](https://kotlinlang.org/docs/multiplatform/multiplatform-hierarchy.html) про иерархическую структуру мультиплатформенных проектов ## Совместимость со Swift/Objective-C @@ -80,11 +80,11 @@ kotlin { Прочитайте [статью](../../learning/memory_management) из базы знаний, посвященную работе с памятью в Android, Kotlin/Native и iOS. ## Вопросы для самопроверки -- Объясните в двух словах, что такое KMM, какие проблемы решает? +- Объясните в двух словах, что такое KMP, какие проблемы решает? - Что такое Shared-модуль? - Что такое таргеты и сурсеты? какие они бывают? чем отличаются? - Можно ли подключить библиотеку только для одного сурсета? Будет ли она доступна для других сурсетов? - Расскажите, что такое мультиплатформенная библиотека, чем она отличается от других? -- Можно ли в KMM использовать не мультиплатформенную библиотеку? Если да, то как? +- Можно ли в KMP использовать не мультиплатформенную библиотеку? Если да, то как? - Как определить, что библиотека мультиплатформенная? - Что будет, если не пометить suspend функцию из общего кода аннотацией @Throws? diff --git a/university/3-kotlin-multiplatform-mobile/kotlinx-serialization.md b/university/3-kotlin-multiplatform-mobile/kotlinx-serialization.md index 97ef1d327..de08c1763 100644 --- a/university/3-kotlin-multiplatform-mobile/kotlinx-serialization.md +++ b/university/3-kotlin-multiplatform-mobile/kotlinx-serialization.md @@ -14,11 +14,8 @@ Kotlin Serialization - это библиотека, предназначенна После изучения, для закрепления материала, советуем пройти [кодлабу](https://www.raywenderlich.com/26883403-android-data-serialization-tutorial-with-the-kotlin-serialization-library). Вы узнаете о возможностях библиотеки и потренируетесь на практике. -Как довести starter project кодлабы до рабочего состояния: -1. В Gradle build поднять Java, jvm -> 17, в Gradle wrapper версию -> 7.2 -2. Сделать Upgrade AGP, рекомендуемый Android Studio (7.0.2-> 7.5) -3. Поднять Compile SDK -> 31 -4. В Манифесте внести исправления: 1) android:exported="true" под tag