You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: learning/gradle/version-catalogs.md
+39Lines changed: 39 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,45 @@ sidebar_position: 9
8
8
<br/>
9
9
<br/>
10
10
11
+
Сейчас в наших проектах используются и bundles, о которых упоминается в видео.
12
+
Например, ниже часть блоков [libraries] и [bundles] в каталоге версий нашего mobile-compose-boilerplate, с помощью которого стартуем ComposeMultiplatform проекты:
Вместо GSHEET_ID_HERE должен стоять Google Sheet Id файла локализации.
28
+
Для каждой новой фичи в файле локализации создается вкладка с названием, которая должна быть добавлена в скрипт вместе с путем к директории moko-resources данной новой фичи. Выше в примере добавлены auth, profile и order.
29
+
30
+
Если папку moko-resources в фиче пока не создавали, скрипт ее создаст при генерации строк локализации.
25
31
26
32
Далее, чтобы обновить строки локализации в проекте необходимо вызвать команду:
27
33
28
34
```bash
29
-
./master.sh localize
35
+
sh master.sh localize
30
36
```
31
37
32
38
Для корректной работы скрипта у вас должен быть установлен [npm](https://www.npmjs.com).
Copy file name to clipboardExpand all lines: university/3-kotlin-multiplatform-mobile/multiplatform-settings.md
+8-29Lines changed: 8 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,27 +7,6 @@ sidebar_position: 3
7
7
Ознакомьтесь с [multiplatform-settings](https://github.com/russhwolf/multiplatform-settings) - библиотекой, позволяющей сохранять key-value данные в параметры устройства из общего кода, используя `SharedPreferences` для Android и `NSUserDefaults` для iOS
8
8
Разберем варианты ее подключения к проекту.
9
9
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` следующее:
Более подробно о проблеме можете прочитать [здесь](https://githubhot.com/repo/russhwolf/multiplatform-settings/issues/106).
29
-
:::
30
-
31
10
## Подключение, используя expect/actual
32
11
Создайте expect/actual функцию, для получения `settings` на платформах
33
12
- получение `settings` для Android
@@ -37,7 +16,7 @@ kotlin {
37
16
38
17
actualfungetSettings(): Settings {
39
18
val delegate = appContext!!.getSharedPreferences("app", Context.MODE_PRIVATE)
40
-
val settings=AndroidSettings(delegate)
19
+
val settings:Settings=SharedPreferencesSettings(delegate)
41
20
return settings
42
21
}
43
22
```
@@ -48,15 +27,15 @@ kotlin {
48
27
```kotlin
49
28
actualfungetSettings(): Settings {
50
29
val delegate =NSUserDefaults.standardUserDefaults
51
-
val settings:Settings=AppleSettings(delegate)
30
+
val settings:Settings=NSUserDefaultsSettings(delegate)
52
31
return settings
53
32
}
54
33
```
55
34
56
35
## Подключение no-arg библиотеки
57
36
Если вся работа с multiplatform-settings будет происходить в общем коде, вы можете использовать [no-arg-module](https://github.com/russhwolf/multiplatform-settings#no-arg-module).
58
37
Используя его, вам не придется инициализировать `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")`
60
39
- создайте `settings`, сохраните значение, а затем прочитайте
61
40
- протестируйте на обеих платформах
62
41
@@ -67,17 +46,17 @@ kotlin {
67
46
commonMain {
68
47
dependencies {
69
48
// ...
70
-
api("com.russhwolf:multiplatform-settings:0.8.1")
49
+
api("com.russhwolf:multiplatform-settings:1.3.0")
71
50
}
72
51
}
73
52
```
74
-
Убедитесь, что класс `AndroidSettings` стал доступен в Android-проекте.
53
+
Убедитесь, что класс `SharedPreferencesSettings` стал доступен в Android-проекте.
75
54
76
55
Однако, этого не достаточно, чтобы библиотека стала доступна и на iOS. Чтобы это сделать, необходимо добавить классы библиотеки в header iOS фреймворка, чтобы они стали видны из swift.
77
56
По умолчанию, для `api`-зависимостей этого не происходит, потому что тогда бы бинарник фреймворка был бы огромный (кому интересно, почитайте об этом [тут](../../learning/kotlin-native/size_impact)).
78
57
Но, при желании, добавить классы в хидер можно, для этого добавьте следующие строчки в раздел `cocoapods/framework` в `shared/build.gradle` файле:
Более подробно о настройке фреймворка вы можете прочитать [тут](https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#export-dependencies-to-binaries).
96
75
97
-
Наконец, выполните команду `pod install` и классы библиотеки mutliplatform-settings станут доступны на iOS, попробуйте создать `AppleSettings`.
76
+
Наконец, выполните команду `pod install` и классы библиотеки mutliplatform-settings станут доступны на iOS, попробуйте создать `NSUserDefaultsSettings`.
0 commit comments