解決したいこと
AndroidStudioであるアプリを開発したいのですが
AndroidとiOSそれぞれでリリースしたいと考えています。
Android版アプリの開発はほとんど終わり、iOS版アプリに取り掛かりたいのですが
Kotlin Multiplatform Mobile(KMM)を具体的にどのように用いればいいのかわかりません。
解決方法を教えてください。
最終的にはAndroid版と同機能のiOS版アプリを開発することができれば問題ありません。
従ってKMMを使用が不適切な場合は他の手段を教えていただきたいです。
使用環境
Android Studio Chipmunk | 2021.2.1 Patch 1
Kotlin 1.7.0
Kotlin Multiplatform Mobile 1.7.0
JDK 18.0.1.1
Xcode 13.4.1
macOS monterey 12.4
発生している問題・エラー
後述のiOSのシュミレータを起動し、KMMによるプロジェクト内でボタンを配置することは出来ました。
しかしながら、iOS版のアプリ上でボタンは反映されず、どのようにして良いのかわかりません。
また、後述の公式HPでのレッスンの中でも「共有モジュールへの依存関係をAndroidアプリケーションに追加」の部分で詰まってしまいました。
https://kotlinlang.org/docs/multiplatform-mobile-integrate-in-existing-app.html#add-a-dependency-on-the-shared-module-to-your-android-application
私のプログラム上ではbuild.gradle.ktsとbuild.gradle (app)のcompileSdkの値が異なっていました。
これを
build.gradle.ktsのcompileSdkを32から31に変更しました。
(minSdkは同じ値でした。)
しかしながら公式ドキュメントと同じような挙動はせず以下のエラー分が出ました。
org.gradle.internal.exceptions.LocationAwareException: Build file '/Users/username/StudioProjects/kmm-integration-sample/shared/build.gradle.kts' line: 11 Build was configured to prefer settings repositories over project repositories but repository 'ivy' was added by build file 'shared/build.gradle.kts' at org.gradle.kotlin.dsl.execution.InterpreterKt$locationAwareExceptionFor$2.invoke(Interpreter.kt:597) at org.gradle.kotlin.dsl.execution.InterpreterKt.locationAwareExceptionFor(Interpreter.kt:604) at org.gradle.kotlin.dsl.execution.InterpreterKt.locationAwareExceptionHandlingFor(Interpreter.kt:570) at org.gradle.kotlin.dsl.execution.InterpreterKt.access$locationAwareExceptionHandlingFor(Interpreter.kt:1) at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.handleScriptException(Interpreter.kt:406) at Program.execute(Unknown Source) at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.eval(Interpreter.kt:528) at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.evaluateSecondStageOf(Interpreter.kt:434) at Program.execute(Unknown Source) 以下”at org.gradle.〜”で始まるエラー文が数百行ある(中略) at org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader.setupRepo(NativeCompilerDownloader.kt:98) at org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader.downloadAndExtract(NativeCompilerDownloader.kt:122) at org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader.downloadIfNeeded(NativeCompilerDownloader.kt:173) at org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeTargetPreset.setupNativeCompiler(KotlinNativeTargetPreset.kt:56) at org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeTargetPreset.createTarget(KotlinNativeTargetPreset.kt:73) at org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeTargetPreset.createTarget(KotlinNativeTargetPreset.kt:24) at org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtensionKt.configureOrCreate(KotlinMultiplatformExtension.kt:74) at org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions$DefaultImpls.iosX64(KotlinTargetContainerWithPresetFunctions.kt:145) at org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension.iosX64(KotlinMultiplatformExtension.kt:16) at org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions$DefaultImpls.iosX64(KotlinTargetContainerWithPresetFunctions.kt:151) at org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension.iosX64(KotlinMultiplatformExtension.kt:16) at Build_gradle$1.execute(build.gradle.kts:11) at Build_gradle$1.execute(build.gradle.kts:1) at org.gradle.internal.extensibility.ExtensionsStorage$ExtensionHolder.configure(ExtensionsStorage.java:173) at org.gradle.internal.extensibility.ExtensionsStorage.configureExtension(ExtensionsStorage.java:64) at org.gradle.internal.extensibility.DefaultConvention.configure(DefaultConvention.java:194) at org.gradle.kotlin.dsl.Accessors8rihyt52ywg47pk3ez2ijmcwzKt.kotlin(Unknown Source) at Build_gradle.<init>(build.gradle.kts:9) ... 158 more
自分で試したこと
https://zenn.dev
この記事のようなiOSのシュミレータを起動し初期画面を表示させることはできました。
https://kotlinlang.org
公式の資料を確認してみましたがわかりませんでした。
KMM以外の方法として以下のIntel Multi-OS Enginも試しましたが
記事が古くサイト内の画像が現在のバージョンに対応していなかったため、よくわかりませんでした。
https://nosix.hatenablog.com
あなたの回答
tips
プレビュー