|
| 1 | +import co.touchlab.faktory.KmmBridgeExtension |
1 | 2 | import co.touchlab.faktory.artifactmanager.ArtifactManager
|
2 | 3 | import co.touchlab.faktory.capitalized
|
3 | 4 | import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
@@ -107,15 +108,34 @@ class SonatypePortalPublishArtifactManager(
|
107 | 108 | uploadTask: TaskProvider<Task>,
|
108 | 109 | kmmPublishTask: TaskProvider<Task>
|
109 | 110 | ) {
|
| 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 | + |
110 | 131 | project.extensions.getByType<PublishingExtension>().publications.create(
|
111 | 132 | publicationName,
|
112 | 133 | MavenPublication::class.java,
|
113 | 134 | ) {
|
114 | 135 | 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 | + } |
119 | 139 | artifact(archiveProvider) {
|
120 | 140 | extension = "zip"
|
121 | 141 | }
|
|
0 commit comments