|
| 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