The HTTP Client supports several platforms, using the experimental multiplatform support that was introduced in Kotlin 1.2.
Right now, the supported platforms are JVM, Android, iOS, Js and native.
For multiplatform projects that for example share code between multiple platforms, we can create a common module. That common module can only access APIs that are available on all the targets. Ktor HTTP Client exposes a common module that can be used for such projects:
dependencies {
implementation("io.ktor:ktor-client-core:$ktor_version")
// ...
}
To use Ktor on JVM, you have to include one of the supported JVM Engines to your build.gradle
(build.gradle.kts
).
To use Android engine you have to add the dependency in your build.gradle
(build.gradle.kts
):
dependencies {
implementation("io.ktor:ktor-client-android:$ktor_version")
// ...
}
You can then use Android Studio, or Gradle to build your project.
In the case of iOS, you have to use Kotlin/Native, and analogously
to android, you have to put this artifact as part of the dependencies
block.
dependencies {
implementation("io.ktor:ktor-client-ios:$ktor_version")
// ...
}
In the case of iOS, we usually create a .framework
, and the application project is a regular XCode project written either in Swift or Objective-C that includes that framework. So you first have to build the framework using the Gradle tasks exposed by Kotlin/Native, and then open the XCode project.
In the case of a browser or node-js applications, you have to use Kotlin/Js.
dependencies {
implementation("io.ktor:ktor-client-js:$ktor_version")
// ...
}
As an alternative to JVM compatible engines, you also could use ktor client with Kotlin/Nativeusing curl
backend.
dependencies {
implementation("io.ktor:ktor-client-curl:$ktor_version")
// ...
}
There is a full sample using the common client in the ktor-samples repository mpp/client-mpp.
You can use this project as a reference. This project also expose some experimental Gradle tasks to build, install and run the Android and iOS applications directly from Gradle.
:client-mpp-android:emulatorList
- lists all the available emulators:client-mpp-android:emulatorStart
- starts the emulator (this would block Gradle for now, so better to do in a separate terminal):client-mpp-android:emulatorInstall
- install the application inside the emulator:client-mpp-android:emulatorRun
- executes the application inside the emulator:client-mpp-ios:startSimulator
- starts the simulator:client-mpp-ios:shutdownSimulator
- shutdowns the simulator:client-mpp-ios:buildXcode
- builds the XCode project that uses the .framework from Kotlin/Native:client-mpp-ios:installSimulator
- installs the application inside the simulator:client-mpp-ios:launchSimulator
- executes the application inside the simulatorSince those tasks are experimental, might fail with your specific setup. Please let us know so we can improve them. Or help us with the iOS tasks, and the Android ones.