multiplatform-paths
multiplatform-paths copied to clipboard
Platform specific application home and cache directories for KMP
Multiplatform Paths
[!NOTE] Follow migration guide to migrate from v0.1 to v0.2.
Platform-specific application home and cache directories for KMP.
- Path Mapping
- Setup
-
Usage
- App data directory
- App cache directory
Path Mapping
Platform | Cache Directory | Data Directory |
---|---|---|
Android | context.cacheDir |
ApplicationInfo.dataDir |
IOS/IpadOs/WatchOs | NSCachesDirectory |
NSApplicationSupportDirectory |
Mac (native/jvm/node) | ~/Library/Caches/<app-id> |
~/Library/Application Support/<app-id> |
Windows (jvm/node) | C:\Users\<user>\AppData/Caches/<app-id> |
C:\Users\<user>\AppData/<app-id>> |
Linux (jvm/node) | ~/.cache/<app-id> |
~/local/share/<app-id> |
Setup
repositories {
mavenCentral()
}
dependencies {
implementation("me.sujanpoudel.multiplatform.utils:multiplatform-paths:0.2.2")
}
Usage
App data directory
import me.sujanpoudel.utils.paths.appDataDirectory
val packageName = "example.com.app"
val dataDirectory = appDataDirectory(packageName)
This will return ApplicationInfo.dataDir
on android, NSApplicationSupportDirectory
on IOS and equivalent platform specific data
directory on other platforms.
App cache directory
import me.sujanpoudel.utils.paths.appCacheDirectory
val packageName = "example.com.app"
val dataDirectory = appCacheDirectory(packageName)
This will return Context.cacheDir
on android, NSCachesDirectory
on IOS and equivalent platform specific caches
directory on other platforms
Other Libraries from this Repository.
-
platform-identifier
: Identify the current platform. -
context-provider
: Get android context anywhere on your android source set.
Table of content
-
Platform Identifier
- Setup
-
Usage
- Get current running platform info
- Possible return values
-
Context Provider
- Setup
-
Usage
- Get Android Context
- Contributions
- License
Platform Identifier
Setup
repositories {
mavenCentral()
}
dependencies {
implementation("me.sujanpoudel.multiplatform.utils:platform-identifier:0.2.2")
}
Usage
Get current running platform info
import me.sujanpoudel.multiplatform.utils.platformIdentifier.platform
val currentPlatform = platform()
Possible return values
It returns Platform
sealed class:
sealed class Platform {
sealed class JS : Platform() {
data class Node(val os: OS, val nodeVersion: String, val v8Version: String) : JS()
data class Browser(val userAgent: String) : JS()
}
sealed class OS(open val arch: Arch) : Platform() {
data class Unknown(override val arch: Arch, val version: String) : OS(arch)
data class MacOs(override val arch: Arch, val version: String) : OS(arch)
data class IOS(override val arch: Arch, val version: String, val isSimulator: Boolean) : OS(arch)
data class WatchOs(override val arch: Arch, val version: String, val isSimulator: Boolean) : OS(arch)
data class TvOs(override val arch: Arch, val version: String, val isSimulator: Boolean) : OS(arch)
data class Android(override val arch: Arch, val buildNumber: Int, val androidVersion: String, val isWatch: Boolean, val isTv: Boolean) : OS(arch)
data class Linux(override val arch: Arch, val version: String) : OS(arch)
data class Windows(override val arch: Arch, val version: String) : OS(arch)
}
}
where,Arch
is an enum representing CPU architecture
enum class Arch {
UNKNOWN,
X64,
X86,
ARM_X64,
ARM_X32,
}
Context Provider
Setup
repositories {
mavenCentral()
}
dependencies {
implementation("me.sujanpoudel.multiplatform.utils:context-provider:0.2.2")
}
Usage
Get Android Context
import me.sujanpoudel.utils.contextProvider.applicationContext
import android.content.Context
val context: Context = applicationContext
Contributions
Contributions are always welcome!. If you'd like to contribute, please feel free to create a PR or open an issue.
License
Copyright 2023 Sujan Poudel
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.