Skip to content

Kotlin/Native FAQ

プログラムを実行するにはどうすればよいですか?

引数に興味がない場合は、トップレベル関数 fun main(args: Array<String>) または単に fun main() を定義してください。その際、関数がパッケージに属していない(パッケージ外にある)ことを確認してください。 また、コンパイルスイッチ -entry を使用して、Array<String> を受け取るか引数を持たず、Unit を返す任意の関数をエントリポイントとして指定することもできます。

Kotlin/Native のメモリ管理モデルはどのようなものですか?

Kotlin/Native は、Java や Swift が提供するものと同様の自動メモリ管理方式を使用しています。

Kotlin/Native メモリマネージャーの詳細を確認する

共有ライブラリを作成するにはどうすればよいですか?

コンパイルオプション -produce dynamic を使用するか、Gradle ビルドファイルで binaries.sharedLib() を使用してください。

kotlin
kotlin {
    iosArm64("mylib") {
        binaries.sharedLib()
    }
}

これにより、プラットフォーム固有の共有オブジェクト(Linux では .so、macOS では .dylib、Windows ターゲットでは .dll)と C 言語ヘッダーが生成され、Kotlin/Native プログラムで利用可能なすべての公開 API を C/C++ コードから利用できるようになります。

Kotlin/Native を動的ライブラリとして使用するチュートリアルを完了する

静的ライブラリまたはオブジェクトファイルを作成するにはどうすればよいですか?

コンパイルオプション -produce static を使用するか、Gradle ビルドファイルで binaries.staticLib() を使用してください。

kotlin
kotlin {
    iosArm64("mylib") {
        binaries.staticLib()
    }
}

これにより、プラットフォーム固有の静的オブジェクト(.a ライブラリ形式)と C 言語ヘッダーが生成され、Kotlin/Native プログラムで利用可能なすべての公開 API を C/C++ コードから利用できるようになります。

コーポレートプロキシ環境下で Kotlin/Native を実行するにはどうすればよいですか?

Kotlin/Native はプラットフォーム固有のツールチェーンをダウンロードする必要があるため、コンパイラまたは gradlew の引数として -Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx を指定するか、環境変数 JAVA_OPTS を介して設定する必要があります。

Kotlin フレームワークにカスタムの Objective-C プレフィックス/名前を指定するにはどうすればよいですか?

コンパイルオプション -module-name または対応する Gradle DSL ステートメントを使用してください。

kotlin
kotlin {
    iosArm64("myapp") {
        binaries.framework {
            freeCompilerArgs += listOf("-module-name", "TheName")
        }
    }
}
groovy
kotlin {
    iosArm64("myapp") {
        binaries.framework {
            freeCompilerArgs += ["-module-name", "TheName"]
        }
    }
}

iOS フレームワークの名前を変更するにはどうすればよいですか?

iOS フレームワークのデフォルト名は <プロジェクト名>.framework です。 カスタム名を設定するには、baseName オプションを使用します。これにより、モジュール名も設定されます。

kotlin
kotlin {
    iosArm64("myapp") {
       binaries {
          framework {
              baseName = "TheName"
          }
       }
    }
}

Kotlin フレームワークで bitcode を有効にするにはどうすればよいですか?

bitcode の埋め込みは Xcode 14 で非推奨となり、Xcode 15 ですべての Apple ターゲットにおいて削除されました。Kotlin/Native コンパイラは Kotlin 2.0.20 以降、bitcode の埋め込みをサポートしていません。

古いバージョンの Xcode を使用しており、かつ Kotlin 2.0.20 以降にアップグレードしたい場合は、Xcode プロジェクトで bitcode の埋め込みを無効にしてください。

異なるコルーチンから安全にオブジェクトを参照するにはどうすればよいですか?

Kotlin/Native で複数のコルーチン間でオブジェクトを安全にアクセスまたは更新するには、@VolatileAtomicReference などの並行性セーフな構成要素の使用を検討してください。

var プロパティに @Volatile アノテーションを付与します。これにより、プロパティのバッキングフィールドへのすべての読み書きがアトミックになります。さらに、書き込みは他のスレッドから即座に参照可能になります。別のスレッドがこのプロパティにアクセスすると、更新された値だけでなく、その更新までに行われた変更も認識されます。

あるいは、アトミックな読み取りと更新をサポートする AtomicReference を使用します。Kotlin/Native では、これは volatile 変数をラップし、アトミックな操作を実行します。また、Kotlin は特定のデータ型に特化したアトミック操作のための型セットも提供しています。AtomicIntAtomicLongAtomicBooleanAtomicArray に加え、AtomicIntArrayAtomicLongArray を使用できます。

共有された可変状態へのアクセスに関する詳細については、コルーチンのドキュメントを参照してください。

未リリースのバージョンの Kotlin/Native でプロジェクトをコンパイルするにはどうすればよいですか?

まず、プレビュー版を試すことを検討してください。

さらに新しい開発バージョンが必要な場合は、ソースコードから Kotlin/Native をビルドできます。Kotlin リポジトリをクローンし、こちらの手順に従ってください。