@@ -12,18 +12,21 @@ import com.squareup.kotlinpoet.STRING
1212import com.squareup.kotlinpoet.TypeSpec
1313import dev.icerock.gradle.MultiplatformResourcesPluginExtension
1414import dev.icerock.gradle.generator.MRGenerator
15+ import dev.icerock.gradle.tasks.CopyExecutableResourcesToApp
1516import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppEntryPointTask
1617import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppTask
1718import dev.icerock.gradle.utils.calculateResourcesHash
1819import org.gradle.api.Action
1920import org.gradle.api.Project
2021import org.gradle.api.Task
2122import org.gradle.api.plugins.ExtensionAware
23+ import org.gradle.kotlin.dsl.create
2224import org.gradle.kotlin.dsl.findByType
2325import org.gradle.kotlin.dsl.getByType
2426import org.gradle.kotlin.dsl.withType
2527import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
2628import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension
29+ import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractExecutable
2730import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation
2831import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
2932import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
@@ -90,6 +93,7 @@ class AppleMRGenerator(
9093 )
9194
9295 override fun apply (generationTask : Task , project : Project ) {
96+ createCopyResourcesToAppTask(project)
9397 setupKLibResources(generationTask)
9498 setupFrameworkResources()
9599 setupTestsResources()
@@ -183,7 +187,6 @@ class AppleMRGenerator(
183187 linkTask.doLast(object : Action <Task > {
184188 override fun execute (task : Task ) {
185189 task as KotlinNativeLink
186-
187190 copyKlibsResourcesIntoFramework(task)
188191 }
189192 })
@@ -234,14 +237,37 @@ $linkTask produces static framework, Xcode should have Build Phase with copyFram
234237 target = outputDir,
235238 overwrite = true
236239 )
237- } catch (exc: kotlin.io. NoSuchFileException ) {
240+ } catch (exc: NoSuchFileException ) {
238241 project.logger.info(" resources in $inputFile not found" )
239242 } catch (exc: java.nio.file.NoSuchFileException ) {
240243 project.logger.info(" resources in $inputFile not found (empty lib)" )
241244 }
242245 }
243246 }
244247
248+ private fun createCopyResourcesToAppTask (project : Project ) {
249+ project.tasks.withType<KotlinNativeLink >()
250+ .matching { linkTask -> linkTask.binary is AbstractExecutable }
251+ .all { linkTask ->
252+ val copyTaskName = linkTask.name.replace(" link" , " copyResources" )
253+
254+ if (linkTask.project.tasks.any { it.name == copyTaskName }) return @all
255+
256+ project.files(linkTask.intermediateLibrary)
257+
258+ val copyResources = linkTask.project.tasks
259+ .create(copyTaskName, CopyExecutableResourcesToApp ::class ) {
260+ val libraries = linkTask.libraries
261+ .plus(project.files(linkTask.intermediateLibrary))
262+ .filter { library -> library.extension == " klib" }
263+ .filter(File ::exists)
264+
265+ it.libraries = libraries
266+ }
267+ copyResources.dependsOn(linkTask)
268+ }
269+ }
270+
245271 private fun createCopyFrameworkResourcesTask (linkTask : KotlinNativeLink ) {
246272 val framework = linkTask.binary as Framework
247273 val project = linkTask.project
0 commit comments