You can use platform-dependent libraries, such as Foundation, UIKit, posix, in source sets shared among several native targets. For each project that has native source sets that depend on a shared native source set, the special tool KLIB Commonizer automatically produces:
*.klib) with the common API of the library that includes declarations that are identical among all platforms and expect declarations for the APIs that differ from platform to platform.actual declarations and the declarations that are available only on this particular platform. commonMain
|
|
iosMain ----------▶ Foundation (common)
/ \ ┌──────────────────┐
/ \ │ expect class ... │
iosArm64Main iosX64Main │ expect fun ... │
| | └──────────────────┘
| |
▼ ▼
Foundation (ios_arm64) Foundation (ios_x64)
┌────────────────────┐ ┌──────────────────┐
│ actual class ... │ │ actual class ... │
│ actual fun ... │ │ actual fun ... │
└────────────────────┘ └──────────────────┘
The resulting KLIBs are automatically added to the dependencies of the corresponding shared native and platform-specific source sets.
There are a few limitations in the current version of Klib Commonizer:
nativeDarwinMain that includes iosMain with iosArm64Main and iosX64Main, and watchosDeviceMain with watchosArm64Main and watchosArm32Main, the KLIB Commonizer will work for separately iosMain and watchosDeviceMain and won’t work for nativeDarwinMain. commonMain
|
|
nativeDarwinMain <--- Commonizer is NOT applied
/ \
/ \
iosMain watchosDeviceMain <--- Commonizer is applied
/ \ / \
/ \ .. ..
iosArm64Main iosX64Main