Skip to content

Commit 698bf84

Browse files
committed
Fix symlinks in generated XCFramework
1 parent cb37440 commit 698bf84

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

Package.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ let packageName = "PowerSyncKotlin"
66
let package = Package(
77
name: packageName,
88
platforms: [
9-
.iOS(.v13)
9+
.iOS(.v13),
10+
.macOS(.v10_15)
1011
],
1112
products: [
1213
.library(

PowerSyncKotlin/build.gradle.kts

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import co.touchlab.faktory.KmmBridgeExtension
12
import co.touchlab.faktory.artifactmanager.ArtifactManager
23
import co.touchlab.faktory.capitalized
34
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
@@ -107,15 +108,34 @@ class SonatypePortalPublishArtifactManager(
107108
uploadTask: TaskProvider<Task>,
108109
kmmPublishTask: TaskProvider<Task>
109110
) {
111+
val zipXCFramework = project.tasks.named<Zip>("zipXCFramework")
112+
zipXCFramework.configure {
113+
// KMMBridge uses the Gradle Zip tasks to create XCFramework archives, but Gradle
114+
// doesn't support symlinks. XCFrameworks for macOS need to use symlinks though, so we
115+
// patch the task to generate zip files properly.
116+
doLast {
117+
val bridge = project.extensions.getByName<KmmBridgeExtension>("kmmbridge")
118+
val source = project.layout.buildDirectory.map { it.dir("XCFrameworks/${bridge.buildType.get().name}") }.get().asFile
119+
120+
val out = archiveFile.get().asFile
121+
out.delete()
122+
123+
providers.exec {
124+
executable = "zip"
125+
args("-r", "--symlinks", out.absolutePath, "PowerSyncKotlin.xcframework")
126+
workingDir(source)
127+
}.result.get().assertNormalExitValue()
128+
}
129+
}
130+
110131
project.extensions.getByType<PublishingExtension>().publications.create(
111132
publicationName,
112133
MavenPublication::class.java,
113134
) {
114135
this.version = version
115-
val archiveProvider =
116-
project.tasks.named("zipXCFramework", Zip::class.java).flatMap {
117-
it.archiveFile
118-
}
136+
val archiveProvider = zipXCFramework.flatMap {
137+
it.archiveFile
138+
}
119139
artifact(archiveProvider) {
120140
extension = "zip"
121141
}

0 commit comments

Comments
 (0)