土曜日, 6月 7, 2025
- Advertisment -
ホームニューステックニュースKotlin Multiplatform(Android/iOS)でビルド環境ごとに対応した値を利用したい #初心者 - Qiita

Kotlin Multiplatform(Android/iOS)でビルド環境ごとに対応した値を利用したい #初心者 – Qiita



Kotlin Multiplatform(Android/iOS)でビルド環境ごとに対応した値を利用したい #初心者 - Qiita

Debug/Releaseのビルドで環境に対応したAPIのURL等を用意したい。

  1. Android・iOS、それぞれの環境でビルド時の設定値を用意する
  2. expect/actualで参照する

1. Androidでビルド時の設定値を用意

gradleでdebug/release環境それぞれのAPIのベースとなるURLを用意します。
こうすることでSync nowするとyour-app/BuildConfig.javaが作成され、BuildConfig.API_BASE_URLとすると設定値を読み出すことができます。

build.gradle.kts

buildTypes {
    getByName("debug") {
        buildConfigField("String", "API_BASE_URL", "\"http://10.0.2.2:4001\"")
    }
    getByName("release") {
        isMinifyEnabled = false
        buildConfigField("String", "API_BASE_URL", "\"https://example.com\"")
    }
}

2. iOSでビルド時の設定値を用意

デフォルトでInfo.plistファイルがあるのですがこれをDebug用とRelease用に分けます。

iosApp/iosApp/Info-Debug.plist



 version="1.0">

    ....
    API_BASE_URL
    http://localhost:4001


iosApp/iosApp/Info-Release.plist



 version="1.0">

    ....
    API_BASE_URL
    https://example.com


xcodeでプロジェクトを開き、Debug/Releaseビルド時に上記で指定したファイルを参照するように設定

  1. 左側の階層からiosAppをクリック
  2. Build Settings > TARGETS > iosApp > Packaging > Info.plist File
  3. 以下に変更
    • Debug:iosApp/Info-Debug.plist
    • Release:iosApp/Info-Release.plist
      image.png

3. expect/actualを実装

kotlin/your-app/common/Config.kt

expect object Config {
    val apiBaseUrl: String
}

kotlin/your-app/common/Config.android.kt

import jp.d_publishing.directbooks.BuildConfig

actual object Config {
    actual val apiBaseUrl: String
        get() = BuildConfig.API_BASE_URL
}

kotlin/your-app/common/Config.ios.kt

import platform.Foundation.NSBundle

actual object Config {
    actual val apiBaseUrl: String
        get() =
            NSBundle.mainBundle
                .infoDictionary
                ?.get("API_BASE_URL") as? String
                ?: error("API_BASE_URL not found in Info.plist")
}

スマホアプリ開発初心者の私にとって「環境ファイル的なものを一つ用意するだけでどのプラットフォームでもいい感じに動くものでしょ」と思っていましたがそんなことはなかったです。もし知っている方がいらっしゃればコメントをお願いします。同じような感覚のスマホアプリ開発初心者にとってこの記事の内容が参考になれば幸いです。





Source link

Views: 2

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -