Skip to content

Commit 24f25e1

Browse files
authored
Merge pull request #159 from maiow/docusaurus
Update multiplatform-settings.md, version-catalogs.md, generate-localized-strings.md
2 parents 6c27fe9 + 63560e3 commit 24f25e1

File tree

3 files changed

+58
-34
lines changed

3 files changed

+58
-34
lines changed

learning/gradle/version-catalogs.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,45 @@ sidebar_position: 9
88
<br/>
99
<br/>
1010

11+
Сейчас в наших проектах используются и bundles, о которых упоминается в видео.
12+
Например, ниже часть блоков [libraries] и [bundles] в каталоге версий нашего mobile-compose-boilerplate, с помощью которого стартуем ComposeMultiplatform проекты:
13+
```kotlin
14+
[libraries]
15+
...
16+
# Koin
17+
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koinBom" }
18+
koin-core = { module = "io.insert-koin:koin-core" }
19+
koin-annotations = { module = "io.insert-koin:koin-annotations", version.ref = "koinKsp" }
20+
koin-compose = { module = "io.insert-koin:koin-compose" }
21+
...
22+
# moko
23+
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "mokoResources" }
24+
moko-resources-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "mokoResources" }
25+
...
26+
27+
[bundles]
28+
koin = [
29+
"koin-core",
30+
"koin-annotations",
31+
"koin-compose"
32+
]
33+
moko-resources = [
34+
"moko-resources",
35+
"moko-resources-compose"
36+
]
37+
```
38+
Использование bundles в buld.gradle фичи в общем коде mpp-library:
39+
```kotlin
40+
dependencies {
41+
...
42+
commonMainImplementation(platform(libs.koin.bom))
43+
commonMainApi(libs.bundles.koin)
44+
45+
commonMainApi(libs.bundles.moko.resources)
46+
...
47+
}
48+
```
49+
1150
- [Gradle docs - Version catalogs](https://docs.gradle.org/7.2/userguide/platforms.html#sub:central-declaration-of-dependencies )
1251
- [Gradle docs - Project accessors](https://docs.gradle.org/7.2/userguide/declaring_dependencies.html#sec:type-safe-project-accessors )
1352
- [Gradle docs - Centralized repository declaration](https://docs.gradle.org/7.2/userguide/declaring_repositories.html#sub:centralized-repository-declaration )

onboarding/generate-localized-strings.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,25 @@ sidebar_position: 10
1414
function cmdLocalize() {
1515
# ...
1616

17-
npm start android strings "GSHEET_ID_HERE" 'platform!A1:C' ../mpp-library/shared/src/androidMain/res/
18-
npm start mpp strings "GSHEET_ID_HERE" 'mpp!A1:C' ../mpp-library/src/commonMain/resources/MR/
19-
npm start mpp plurals "GSHEET_ID_HERE" 'mpp-plurals!A1:D' ../mpp-library/src/commonMain/resources/MR/
20-
npm start ios strings "GSHEET_ID_HERE" 'platform!A1:C' ../ios-app/src/Resources/
17+
npm start android strings "GSHEET_ID_HERE" 'platform!A1:D' ../android-app/src/main/res/
18+
npm start mpp strings "GSHEET_ID_HERE" 'mpp!A1:D' ../mpp-library/resources/src/commonMain/moko-resources/
19+
npm start mpp plurals "GSHEET_ID_HERE" 'mpp-plurals!A1:D' ../mpp-library/resources/src/commonMain/moko-resources/
20+
npm start ios strings "GSHEET_ID_HERE" 'platform!A1:D' ../ios-app/SwiftUIApp/Resources/
21+
npm start mpp strings "GSHEET_ID_HERE" 'auth!A1:D' ../mpp-library/features/auth/src/commonMain/moko-resources/
22+
npm start mpp strings "GSHEET_ID_HERE" 'profile!A1:D' ../mpp-library/features/profile/src/commonMain/moko-resources/
23+
npm start mpp strings "GSHEET_ID_HERE" 'order!A1:D' ../mpp-library/features/order/src/commonMain/moko-resources/
2124
}
2225
```
2326

2427
Вместо GSHEET_ID_HERE должен стоять Google Sheet Id файла локализации.
28+
Для каждой новой фичи в файле локализации создается вкладка с названием, которая должна быть добавлена в скрипт вместе с путем к директории moko-resources данной новой фичи. Выше в примере добавлены auth, profile и order.
29+
30+
Если папку moko-resources в фиче пока не создавали, скрипт ее создаст при генерации строк локализации.
2531

2632
Далее, чтобы обновить строки локализации в проекте необходимо вызвать команду:
2733

2834
```bash
29-
./master.sh localize
35+
sh master.sh localize
3036
```
3137

3238
Для корректной работы скрипта у вас должен быть установлен [npm](https://www.npmjs.com).

university/3-kotlin-multiplatform-mobile/multiplatform-settings.md

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,6 @@ sidebar_position: 3
77
Ознакомьтесь с [multiplatform-settings](https://github.com/russhwolf/multiplatform-settings) - библиотекой, позволяющей сохранять key-value данные в параметры устройства из общего кода, используя `SharedPreferences` для Android и `NSUserDefaults` для iOS
88
Разберем варианты ее подключения к проекту.
99

10-
:::info
11-
Если вы используете [0.8.1](https://github.com/russhwolf/multiplatform-settings/releases/tag/v0.8.1) версию библиотеки, и [Kotlin 1.6.20](https://github.com/JetBrains/kotlin/releases/tag/v1.6.20), то, при выполнении таска `:linkDebugFrameworkIos` у вас произойдет ошибка:
12-
```text
13-
e: The symbol of unexpected type encountered during IR deserialization: IrSimpleFunctionPublicSymbolImpl, com.russhwolf.settings/Settings|-62081702699614493[0]. IrClassifierSymbol is expected.
14-
15-
This could happen if there are two libraries, where one library was compiled against the different version of the other library than the one currently used in the project. Please check that the project configuration is correct and has consistent versions of dependencies.
16-
```
17-
18-
Чтобы ее избежать, добавьте в `commonMain/build.gradle` следующее:
19-
```kotlin
20-
kotlin {
21-
targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
22-
binaries.all {
23-
freeCompilerArgs += "-Xlazy-ir-for-caches=disable"
24-
}
25-
}
26-
}
27-
```
28-
Более подробно о проблеме можете прочитать [здесь](https://githubhot.com/repo/russhwolf/multiplatform-settings/issues/106).
29-
:::
30-
3110
## Подключение, используя expect/actual
3211
Создайте expect/actual функцию, для получения `settings` на платформах
3312
- получение `settings` для Android
@@ -37,7 +16,7 @@ kotlin {
3716

3817
actual fun getSettings(): Settings {
3918
val delegate = appContext!!.getSharedPreferences("app", Context.MODE_PRIVATE)
40-
val settings = AndroidSettings(delegate)
19+
val settings: Settings = SharedPreferencesSettings(delegate)
4120
return settings
4221
}
4322
```
@@ -48,15 +27,15 @@ kotlin {
4827
```kotlin
4928
actual fun getSettings(): Settings {
5029
val delegate = NSUserDefaults.standardUserDefaults
51-
val settings: Settings = AppleSettings(delegate)
30+
val settings: Settings = NSUserDefaultsSettings(delegate)
5231
return settings
5332
}
5433
```
5534

5635
## Подключение no-arg библиотеки
5736
Если вся работа с multiplatform-settings будет происходить в общем коде, вы можете использовать [no-arg-module](https://github.com/russhwolf/multiplatform-settings#no-arg-module).
5837
Используя его, вам не придется инициализировать `Settings` на платформе, для `Android`, в качестве делегата будет использоваться `PreferenceManager.getDefaultSharedPreferences()`, а для iOS - `NSUserDefaults.standardUserDefaults`.
59-
- подключите `no-arg` библиотеку к commonMain модулю: `implementation("com.russhwolf:multiplatform-settings-no-arg:0.8.1")`
38+
- подключите `no-arg` библиотеку к commonMain модулю: `implementation("com.russhwolf:multiplatform-settings-no-arg:1.3.0")`
6039
- создайте `settings`, сохраните значение, а затем прочитайте
6140
- протестируйте на обеих платформах
6241

@@ -67,17 +46,17 @@ kotlin {
6746
commonMain {
6847
dependencies {
6948
// ...
70-
api("com.russhwolf:multiplatform-settings:0.8.1")
49+
api("com.russhwolf:multiplatform-settings:1.3.0")
7150
}
7251
}
7352
```
74-
Убедитесь, что класс `AndroidSettings` стал доступен в Android-проекте.
53+
Убедитесь, что класс `SharedPreferencesSettings` стал доступен в Android-проекте.
7554

7655
Однако, этого не достаточно, чтобы библиотека стала доступна и на iOS. Чтобы это сделать, необходимо добавить классы библиотеки в header iOS фреймворка, чтобы они стали видны из swift.
7756
По умолчанию, для `api`-зависимостей этого не происходит, потому что тогда бы бинарник фреймворка был бы огромный (кому интересно, почитайте об этом [тут](../../learning/kotlin-native/size_impact)).
7857
Но, при желании, добавить классы в хидер можно, для этого добавьте следующие строчки в раздел `cocoapods/framework` в `shared/build.gradle` файле:
7958
```kotlin
80-
export("com.russhwolf:multiplatform-settings:0.8.1")
59+
export("com.russhwolf:multiplatform-settings:1.3.0")
8160
```
8261
Как должно получиться:
8362
```kotlin
@@ -88,13 +67,13 @@ cocoapods {
8867
podfile = project.file("../iosApp/Podfile")
8968
framework {
9069
baseName = "shared"
91-
export("com.russhwolf:multiplatform-settings:0.8.1")
70+
export("com.russhwolf:multiplatform-settings:1.3.0")
9271
}
9372
}
9473
```
9574
Более подробно о настройке фреймворка вы можете прочитать [тут](https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#export-dependencies-to-binaries).
9675

97-
Наконец, выполните команду `pod install` и классы библиотеки mutliplatform-settings станут доступны на iOS, попробуйте создать `AppleSettings`.
76+
Наконец, выполните команду `pod install` и классы библиотеки mutliplatform-settings станут доступны на iOS, попробуйте создать `NSUserDefaultsSettings`.
9877

9978
## KeyValueStorage
10079

0 commit comments

Comments
 (0)