diff --git a/.github/workflows/test_and_run_demo.yaml b/.github/workflows/ci.yaml
similarity index 50%
rename from .github/workflows/test_and_run_demo.yaml
rename to .github/workflows/ci.yaml
index 105c7e0..11fe149 100644
--- a/.github/workflows/test_and_run_demo.yaml
+++ b/.github/workflows/ci.yaml
@@ -1,7 +1,7 @@
# https://github.com/Kotlin/multiplatform-library-template/blob/main/.github/workflows/gradle.yml
# https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
-name: kmp-xlog build and test.
+name: CI
on:
push:
@@ -19,22 +19,20 @@ jobs:
fail-fast: false
matrix:
include:
- - cmd: "${GITHUB_WORKSPACE}/gradlew :kmp-xlog:testDebugUnitTest"
- os: macos-latest
- - cmd: "${GITHUB_WORKSPACE}/gradlew :example:androidApp:assembleDebug"
- os: macos-latest
- - cmd: "${GITHUB_WORKSPACE}/scripts/build_apple.sh && ${GITHUB_WORKSPACE}/gradlew runKmp_xlogDebugExecutableMacosX64"
- os: macos-latest
+ - os: macos-latest
+ cmd: "./gradlew :kmp-xlog:testDebugUnitTest"
+ - os: macos-latest
+ cmd: "./gradlew :example:androidApp:assembleDebug"
+ - os: macos-latest
dep: "brew update && brew install xcodegen"
- - cmd: "${GITHUB_WORKSPACE}/scripts/build_xlog_linux.sh && ${GITHUB_WORKSPACE}/gradlew runKmp_xlogDebugExecutableLinuxX64"
- os: ubuntu-22.04
+ cmd: "./scripts/build_apple.sh && ./gradlew runKmp_xlogDebugExecutableMacosX64 && ./scripts/build_mac_demo.sh && ./scripts/build_ios_demo.sh"
+ - os: ubuntu-22.04
dep: "sudo apt-get update && sudo apt-get install zlib1g-dev"
- - cmd: "%GITHUB_WORKSPACE%\\gradlew runKmp_xlogDebugExecutableMingwX64"
- os: windows-latest
- - cmd: "${GITHUB_WORKSPACE}/gradlew :example:shared:jsBrowserDistribution"
- os: macos-latest
- - cmd: "${GITHUB_WORKSPACE}/gradlew :example:shared:wasmJsBrowserDistribution"
- os: macos-latest
+ cmd: "./scripts/build_xlog_linux.sh && ./gradlew runKmp_xlogDebugExecutableLinuxX64"
+ - os: windows-latest
+ cmd: "./gradlew runKmp_xlogDebugExecutableMingwX64"
+ - os: macos-latest
+ cmd: "./gradlew :example:shared:jsBrowserDistribution"
runs-on: ${{ matrix.os }}
steps:
@@ -54,10 +52,8 @@ jobs:
cache: 'gradle'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- - if: ${{ matrix.dep }}
+ - name: Install deps
+ if: ${{ matrix.dep }}
run: ${{ matrix.dep }}
- - if: ${{ matrix.os == 'windows-latest' }}
- shell: cmd
- run: ${{ matrix.cmd }}
- - if: ${{ matrix.os != 'windows-latest' }}
+ - name: Run it
run: ${{ matrix.cmd }}
diff --git a/README.md b/README.md
index 028db51..ba3d9bd 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
KMP wrapper for [tencent mars xlog](https://github.com/Tencent/mars).
- 
+ 
## Supported platforms
@@ -10,7 +10,6 @@ KMP wrapper for [tencent mars xlog](https://github.com/Tencent/mars).
| :----------------: | :------------------: |
| `JVM` 17 | 🚀 |
| `JS` (Chrome) | 🚀 |
-| `WasmJS` (Chrome) | 🚀 |
| `Android` | 🚀 |
| `iOS` | 🚀 |
| `macOS` | 🚀 |
@@ -128,12 +127,6 @@ pod install
./gradlew :example:shared:jsBrowserRun
```
-### WASM JS
-
-```bash
-./gradlew :example:shared:wasmJsBrowserRun
-```
-
### Linux
Install deps: `zlib1g-dev`.
diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt
index c5f5e12..082f418 100644
--- a/buildSrc/src/main/kotlin/Constants.kt
+++ b/buildSrc/src/main/kotlin/Constants.kt
@@ -1,7 +1,7 @@
object Consts {
const val releaseGroup = "com.piasy"
const val releaseName = "kmp-xlog"
- const val releaseVersion = "1.3.6"
+ const val releaseVersion = "1.4.0"
val androidNS = "$releaseGroup.${releaseName.replace('-', '.')}"
}
diff --git a/example/macApp/macApp/ViewController.m b/example/macApp/macApp/ViewController.m
index c98e768..a4af5d8 100644
--- a/example/macApp/macApp/ViewController.m
+++ b/example/macApp/macApp/ViewController.m
@@ -30,7 +30,7 @@ - (void)viewDidLoad {
[self.view addSubview:self.label];
- [Kmp_xlogLoggingKt initializeMarsXLogLevel:1 namePrefix:@"test" logToConsole:YES];
+ [Kmp_xlogLoggingKt initializeMarsXLogLevel:1 namePrefix:@"test" debugLog:YES];
[[Kmp_xlogLogging logging] infoTag:@"XXPXX" content:[NSString stringWithFormat:@"greeting from %@", [self getSystemVersion]]];
[[Kmp_xlogLogging logging] errorTag:@"XXPXX" content:@"flush"];
}
diff --git a/example/shared/build.gradle.kts b/example/shared/build.gradle.kts
index 7d2f01e..321a7e9 100644
--- a/example/shared/build.gradle.kts
+++ b/example/shared/build.gradle.kts
@@ -1,5 +1,3 @@
-import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
-
plugins {
alias(libs.plugins.kmp)
@@ -43,12 +41,6 @@ kotlin {
}
binaries.executable()
}
- @OptIn(ExperimentalWasmDsl::class)
- wasmJs {
- browser {
- }
- binaries.executable()
- }
listOf(linuxX64(), mingwX64()).forEach {
it.binaries {
@@ -77,11 +69,6 @@ kotlin {
mingwX64Main {
dependsOn(cppCommon)
}
- wasmJsMain {
- dependencies {
- implementation(libs.kotlinx.browser)
- }
- }
}
}
diff --git a/example/shared/src/jsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt b/example/shared/src/jsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt
index c8d31f7..1d6942e 100644
--- a/example/shared/src/jsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt
+++ b/example/shared/src/jsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt
@@ -10,7 +10,7 @@ class JsPlatform : Platform {
actual fun getPlatform(): Platform = JsPlatform()
fun main() {
- initializeConsoleLog()
+ initializeConsoleLog(true)
document.getElementById("text")?.innerHTML = Greeting().greeting()
}
diff --git a/example/shared/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt b/example/shared/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt
deleted file mode 100644
index 720d992..0000000
--- a/example/shared/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/example/Platform.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.piasy.kmp.xlog.example
-
-import kotlinx.browser.document
-
-class WasmJsPlatform : Platform {
- override val name: String = "WasmJS"
-}
-
-actual fun getPlatform(): Platform = WasmJsPlatform()
-
-fun main() {
- document.getElementById("text")?.innerHTML = Greeting().greeting()
-}
diff --git a/example/shared/src/wasmJsMain/resources/index.html b/example/shared/src/wasmJsMain/resources/index.html
deleted file mode 100644
index 8447392..0000000
--- a/example/shared/src/wasmJsMain/resources/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- kmp-xlog
-
-
-
-
-
-
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 60c7687..4773b72 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -6,24 +6,22 @@ compileSdk = "35"
minSdk = "21"
targetSdk = "35"
agp = "8.7.3"
-kotlin = "2.1.0"
+kotlin = "2.1.10"
mockk = "1.13.16"
-compose = "1.7.6"
-kotlinxBrowser = "0.3"
+compose = "1.7.8"
[libraries]
kotlin-stdlib-js = { module = "org.jetbrains.kotlin:kotlin-stdlib-js", version.ref = "kotlin" }
kotlinx-datetime = "org.jetbrains.kotlinx:kotlinx-datetime:0.6.1"
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
-kotlinx-browser = { module = "org.jetbrains.kotlinx:kotlinx-browser", version.ref = "kotlinxBrowser" }
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" }
androidx-compose-material = { module = "androidx.compose.material:material", version.ref = "compose" }
-androidx-activity-compose = "androidx.activity:activity-compose:1.10.0"
+androidx-activity-compose = "androidx.activity:activity-compose:1.10.1"
[plugins]
android-library = { id = "com.android.library", version.ref = "agp" }
diff --git a/kmp-xlog-api/build.gradle.kts b/kmp-xlog-api/build.gradle.kts
index 3a1537b..544c96a 100644
--- a/kmp-xlog-api/build.gradle.kts
+++ b/kmp-xlog-api/build.gradle.kts
@@ -1,5 +1,4 @@
import com.vanniktech.maven.publish.SonatypeHost
-import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
plugins {
alias(libs.plugins.kmp)
@@ -18,11 +17,10 @@ kotlin {
macosArm64()
macosX64()
- @OptIn(ExperimentalWasmDsl::class)
- listOf(js(IR), wasmJs()).forEach {
- it.browser {
+ js(IR) {
+ browser {
}
- it.binaries.executable()
+ binaries.executable()
}
linuxX64()
diff --git a/kmp-xlog-api/src/commonMain/kotlin/com/piasy/kmp/xlog/Logging.kt b/kmp-xlog-api/src/commonMain/kotlin/com/piasy/kmp/xlog/Logging.kt
index cc40d4d..6f84758 100644
--- a/kmp-xlog-api/src/commonMain/kotlin/com/piasy/kmp/xlog/Logging.kt
+++ b/kmp-xlog-api/src/commonMain/kotlin/com/piasy/kmp/xlog/Logging.kt
@@ -7,73 +7,76 @@ import kotlin.math.min
* Created by Piasy{github.com/Piasy} on 2022/11/16.
*/
object Logging {
- const val LEVEL_DEBUG = 1
- const val LEVEL_INFO = 2
- const val LEVEL_ERROR = 4
+ const val LEVEL_DEBUG = 1
+ const val LEVEL_INFO = 2
+ const val LEVEL_ERROR = 4
- const val LINE_LENGTH = 4000
- private var impl: LoggingImpl = object : LoggingImpl {
- override fun debug(tag: String, content: String) {
- println("${Clock.System.now().toEpochMilliseconds()} D $tag $content")
- }
+ const val LINE_LENGTH = 4000
+ private var impl: LoggingImpl = object : LoggingImpl {
+ override fun debug() = true
- override fun info(tag: String, content: String) {
- println("${Clock.System.now().toEpochMilliseconds()} I $tag $content")
- }
+ override fun debug(tag: String, content: String) {
+ println("${Clock.System.now().toEpochMilliseconds()} D $tag $content")
+ }
- override fun error(tag: String, content: String) {
- println("${Clock.System.now().toEpochMilliseconds()} E $tag $content")
+ override fun info(tag: String, content: String) {
+ println("${Clock.System.now().toEpochMilliseconds()} I $tag $content")
+ }
+
+ override fun error(tag: String, content: String) {
+ println("${Clock.System.now().toEpochMilliseconds()} E $tag $content")
+ }
}
- }
- fun init(impl: LoggingImpl) {
- this.impl = impl
- }
+ fun init(impl: LoggingImpl) {
+ this.impl = impl
+ }
- fun debug(tag: String, content: String) {
- log(tag, content) { t, c ->
- impl.debug(t, c)
+ fun debug(tag: String, content: String) {
+ log(tag, content) { t, c ->
+ impl.debug(t, c)
+ }
}
- }
- fun info(tag: String, content: String) {
- log(tag, content) { t, c ->
- impl.info(t, c)
+ fun info(tag: String, content: String) {
+ log(tag, content) { t, c ->
+ impl.info(t, c)
+ }
}
- }
- fun error(tag: String, content: String) {
- log(tag, content) { t, c ->
- impl.error(t, c)
+ fun error(tag: String, content: String) {
+ log(tag, content) { t, c ->
+ impl.error(t, c)
+ }
}
- }
- private fun log(
- tag: String,
- content: String,
- logFunc: (
- tag: String,
- content: String
- ) -> Unit
- ) {
- // MarsXLog limit single log length to 4096
- if (content.length <= LINE_LENGTH) {
- logFunc(tag, content)
- } else {
- var write = 0
- while (write < content.length) {
- val endIndex = min(content.length, write + LINE_LENGTH)
- logFunc(tag, content.substring(write, endIndex))
- write = endIndex
- }
+ private fun log(
+ tag: String,
+ content: String,
+ logFunc: (
+ tag: String,
+ content: String
+ ) -> Unit
+ ) {
+ // MarsXLog limit single log length to 4096
+ if (content.length <= LINE_LENGTH) {
+ logFunc(tag, content)
+ } else {
+ var write = 0
+ while (write < content.length) {
+ val endIndex = min(content.length, write + LINE_LENGTH)
+ logFunc(tag, content.substring(write, endIndex))
+ write = endIndex
+ }
+ }
}
- }
}
interface LoggingImpl {
- fun debug(tag: String, content: String)
+ fun debug(): Boolean
+ fun debug(tag: String, content: String)
- fun info(tag: String, content: String)
+ fun info(tag: String, content: String)
- fun error(tag: String, content: String)
+ fun error(tag: String, content: String)
}
diff --git a/kmp-xlog-api/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/Platform.wasmJs.kt b/kmp-xlog-api/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/Platform.wasmJs.kt
deleted file mode 100644
index 766acd3..0000000
--- a/kmp-xlog-api/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/Platform.wasmJs.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.piasy.kmp.xlog
-
-/**
- * Created by Piasy{github.com/Piasy} on 2025-02-28.
- */
-actual fun platform() = Platform.JS
diff --git a/kmp-xlog/build.gradle.kts b/kmp-xlog/build.gradle.kts
index 202df62..6ea6094 100644
--- a/kmp-xlog/build.gradle.kts
+++ b/kmp-xlog/build.gradle.kts
@@ -43,6 +43,7 @@ kotlin {
extraSpecAttributes["libraries"] = "'z'"
extraSpecAttributes["framework"] = "'SystemConfiguration'"
framework {
+ export(project(":kmp-xlog-api"))
baseName = "kmp_xlog"
isStatic = true
}
@@ -53,12 +54,6 @@ kotlin {
}
binaries.executable()
}
- @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class)
- wasmJs {
- browser {
- }
- binaries.executable()
- }
linuxX64 {
compilations.getByName("main") {
diff --git a/kmp-xlog/src/androidMain/kotlin/com/piasy/kmp/xlog/Logging.kt b/kmp-xlog/src/androidMain/kotlin/com/piasy/kmp/xlog/Logging.kt
index 4f64b01..b4c461a 100644
--- a/kmp-xlog/src/androidMain/kotlin/com/piasy/kmp/xlog/Logging.kt
+++ b/kmp-xlog/src/androidMain/kotlin/com/piasy/kmp/xlog/Logging.kt
@@ -10,38 +10,43 @@ import com.tencent.mars.xlog.Xlog
private var sInitialized = false
fun initializeMarsXLog(
- context: Context,
- logDir: String,
- level: Int,
- namePrefix: String,
- logToConsole: Boolean
+ context: Context,
+ logDir: String,
+ level: Int,
+ namePrefix: String,
+ debugLog: Boolean
) {
- if (sInitialized) {
- return
- }
+ if (sInitialized) {
+ return
+ }
- // this is necessary, or may cash for SIGBUS
- val cachePath = context.filesDir.toString() + "/xlog"
- Xlog.open(true, level, Xlog.AppednerModeAsync, cachePath, logDir, namePrefix, "")
- Log.setLogImp(Xlog())
- Log.setConsoleLogOpen(logToConsole)
+ // this is necessary, or may cash for SIGBUS
+ val cachePath = context.filesDir.toString() + "/xlog"
+ Xlog.open(true, level, Xlog.AppednerModeAsync, cachePath, logDir, namePrefix, "")
+ Log.setLogImp(Xlog())
+ Log.setConsoleLogOpen(debugLog)
- Logging.init(AndroidLogging)
+ AndroidLogging.debugLog = debugLog
+ Logging.init(AndroidLogging)
- sInitialized = true
+ sInitialized = true
}
private object AndroidLogging : LoggingImpl {
- override fun debug(tag: String, content: String) {
- Log.d(tag, "${Thread.currentThread().name} # $content")
- }
-
- override fun info(tag: String, content: String) {
- Log.i(tag, "${Thread.currentThread().name} # $content")
- }
-
- override fun error(tag: String, content: String) {
- Log.e(tag, "${Thread.currentThread().name} # $content")
- Log.appenderFlush()
- }
+ var debugLog: Boolean = false
+
+ override fun debug() = debugLog
+
+ override fun debug(tag: String, content: String) {
+ Log.d(tag, "${Thread.currentThread().name} # $content")
+ }
+
+ override fun info(tag: String, content: String) {
+ Log.i(tag, "${Thread.currentThread().name} # $content")
+ }
+
+ override fun error(tag: String, content: String) {
+ Log.e(tag, "${Thread.currentThread().name} # $content")
+ Log.appenderFlush()
+ }
}
diff --git a/kmp-xlog/src/appleMain/kotlin/com/piasy/kmp/xlog/Logging.kt b/kmp-xlog/src/appleMain/kotlin/com/piasy/kmp/xlog/Logging.kt
index ef2864d..a6d7cb8 100644
--- a/kmp-xlog/src/appleMain/kotlin/com/piasy/kmp/xlog/Logging.kt
+++ b/kmp-xlog/src/appleMain/kotlin/com/piasy/kmp/xlog/Logging.kt
@@ -4,25 +4,30 @@ package com.piasy.kmp.xlog
* Created by Piasy{github.com/Piasy} on 2022/11/16.
*/
fun initializeMarsXLog(
- level: Int,
- namePrefix: String,
- logToConsole: Boolean
+ level: Int,
+ namePrefix: String,
+ debugLog: Boolean
) {
- xlog.PSYMarsXLog.initialize(level, namePrefix, logToConsole)
+ xlog.PSYMarsXLog.initialize(level, namePrefix, debugLog)
- Logging.init(IOSLogging)
+ AppleLogging.debugLog = debugLog
+ Logging.init(AppleLogging)
}
-private object IOSLogging : LoggingImpl {
- override fun debug(tag: String, content: String) {
- xlog.PSYMarsXLog.debug(tag, content)
- }
+private object AppleLogging : LoggingImpl {
+ var debugLog: Boolean = false
- override fun info(tag: String, content: String) {
- xlog.PSYMarsXLog.info(tag, content)
- }
+ override fun debug() = debugLog
- override fun error(tag: String, content: String) {
- xlog.PSYMarsXLog.error(tag, content)
- }
+ override fun debug(tag: String, content: String) {
+ xlog.PSYMarsXLog.debug(tag, content)
+ }
+
+ override fun info(tag: String, content: String) {
+ xlog.PSYMarsXLog.info(tag, content)
+ }
+
+ override fun error(tag: String, content: String) {
+ xlog.PSYMarsXLog.error(tag, content)
+ }
}
diff --git a/kmp-xlog/src/cppCommon/kotlin/com/piasy/kmp/xlog/Logging.kt b/kmp-xlog/src/cppCommon/kotlin/com/piasy/kmp/xlog/Logging.kt
index 76a3ce8..06424bc 100644
--- a/kmp-xlog/src/cppCommon/kotlin/com/piasy/kmp/xlog/Logging.kt
+++ b/kmp-xlog/src/cppCommon/kotlin/com/piasy/kmp/xlog/Logging.kt
@@ -4,25 +4,30 @@ package com.piasy.kmp.xlog
* Created by Piasy{github.com/Piasy} on 2022/12/16.
*/
fun initializeMarsXLog(
- level: Int,
- namePrefix: String,
- logToConsole: Boolean
+ level: Int,
+ namePrefix: String,
+ debugLog: Boolean
) {
- xlog.MarsXLogInitialize(level, namePrefix, if (logToConsole) 1 else 0)
+ xlog.MarsXLogInitialize(level, namePrefix, if (debugLog) 1 else 0)
- Logging.init(CppLogging)
+ CppLogging.debugLog = debugLog
+ Logging.init(CppLogging)
}
private object CppLogging : LoggingImpl {
- override fun debug(tag: String, content: String) {
- xlog.MarsXLogDebug(tag, content)
- }
+ var debugLog: Boolean = false
- override fun info(tag: String, content: String) {
- xlog.MarsXLogInfo(tag, content)
- }
+ override fun debug() = debugLog
- override fun error(tag: String, content: String) {
- xlog.MarsXLogError(tag, content)
- }
+ override fun debug(tag: String, content: String) {
+ xlog.MarsXLogDebug(tag, content)
+ }
+
+ override fun info(tag: String, content: String) {
+ xlog.MarsXLogInfo(tag, content)
+ }
+
+ override fun error(tag: String, content: String) {
+ xlog.MarsXLogError(tag, content)
+ }
}
diff --git a/kmp-xlog/src/jsMain/kotlin/com/piasy/kmp/xlog/Logging.kt b/kmp-xlog/src/jsMain/kotlin/com/piasy/kmp/xlog/Logging.kt
index ac343c7..00085c5 100644
--- a/kmp-xlog/src/jsMain/kotlin/com/piasy/kmp/xlog/Logging.kt
+++ b/kmp-xlog/src/jsMain/kotlin/com/piasy/kmp/xlog/Logging.kt
@@ -3,20 +3,25 @@ package com.piasy.kmp.xlog
/**
* Created by Piasy{github.com/Piasy} on 2022/12/15.
*/
-fun initializeConsoleLog() {
- Logging.init(JsLogging)
+fun initializeConsoleLog(debugLog: Boolean) {
+ JsLogging.debugLog = debugLog
+ Logging.init(JsLogging)
}
private object JsLogging : LoggingImpl {
- override fun debug(tag: String, content: String) {
- console.log(tag, content)
- }
+ var debugLog: Boolean = false
- override fun info(tag: String, content: String) {
- console.info(tag, content)
- }
+ override fun debug() = debugLog
- override fun error(tag: String, content: String) {
- console.error(tag, content)
- }
+ override fun debug(tag: String, content: String) {
+ console.log(tag, content)
+ }
+
+ override fun info(tag: String, content: String) {
+ console.info(tag, content)
+ }
+
+ override fun error(tag: String, content: String) {
+ console.error(tag, content)
+ }
}
diff --git a/kmp-xlog/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/.gitkeep b/kmp-xlog/src/wasmJsMain/kotlin/com/piasy/kmp/xlog/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/scripts/build_ios_demo.sh b/scripts/build_ios_demo.sh
new file mode 100755
index 0000000..9d6280c
--- /dev/null
+++ b/scripts/build_ios_demo.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -e
+
+./scripts/setup_apple_demo.sh
+
+pushd example/iosApp
+xcodebuild -workspace iosApp.xcworkspace \
+ -scheme iosApp \
+ -sdk iphonesimulator \
+ -configuration Debug
+popd
diff --git a/scripts/build_mac_demo.sh b/scripts/build_mac_demo.sh
new file mode 100755
index 0000000..d90d9d6
--- /dev/null
+++ b/scripts/build_mac_demo.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -e
+
+./scripts/setup_apple_demo.sh
+
+pushd example/macApp
+xcodebuild -workspace macApp.xcworkspace \
+ -scheme macApp \
+ -sdk macosx \
+ -configuration Debug ARCHS="x86_64" ONLY_ACTIVE_ARCH=NO
+popd
diff --git a/scripts/publish_others.sh b/scripts/publish_others.sh
index 0b572ff..01cefd7 100755
--- a/scripts/publish_others.sh
+++ b/scripts/publish_others.sh
@@ -8,7 +8,6 @@
publishIosX64PublicationToMavenCentralRepository \
publishMacosArm64PublicationToMavenCentralRepository \
publishMacosX64PublicationToMavenCentralRepository \
- publishWasmJsPublicationToMavenCentralRepository \
publishJsPublicationToMavenCentralRepository \
publishJvmPublicationToMavenCentralRepository \
--no-configuration-cache
diff --git a/scripts/setup_apple_demo.sh b/scripts/setup_apple_demo.sh
new file mode 100755
index 0000000..68866b6
--- /dev/null
+++ b/scripts/setup_apple_demo.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+set -e
+
+./gradlew :example:shared:podspec :example:shared:generateDummyFramework
+
+pushd example/iosApp
+xcodegen
+pod install
+popd
+
+pushd example/macApp
+xcodegen
+pod install
+popd