My app has zip files in commonMain/resources/asset...
# multiplatform
m
My app has zip files in commonMain/resources/assets but it seems this is not packaged in the ios app by default. Is this the best way to do this? https://medium.com/@kennedy998/bundle-and-read-assets-as-resources-in-kotlin-multiplatform-android-ios-and-desktop-3d48d3e3cd5b
p
We had a similar problem but for test resources and we went with this:
Copy code
tasks.register<Copy>("copyiOSTestResources") {
    from("src/commonTest/resources/your/package")
    into("build/bin/iosSimulatorArm64/debugTest/resources")
}

tasks.findByName("iosSimulatorArm64Test")!!.dependsOn("copyiOSTestResources")
I think this could work for commonMain. You can then read it using
Copy code
NSBundle.mainBundle.pathForResource
in iOS sources.
m
Excellent, thanks. That’s much better than what Claude came up with:
Copy code
// Task to aggregate plugin resources from dependency modules for iOS
// Compose resources from transitive dependencies don't automatically bundle for iOS
abstract class AggregateiOSPluginResourcesTask : DefaultTask() {
    @get:OutputDirectory
    abstract val outputDir: DirectoryProperty
    
    @get:InputFiles
    abstract val sourceDirectories: ConfigurableFileCollection
    
    @TaskAction
    fun aggregate() {
        val assetsDir = outputDir.asFile.get()
        assetsDir.mkdirs()
        
        sourceDirectories.files.forEach { sourceResources ->
            if (sourceResources.exists() && sourceResources.isDirectory) {
                logger.lifecycle("📦 Copying resources from ${sourceResources.name}")
                sourceResources.copyRecursively(assetsDir, overwrite = true)
            }
        }
        
        logger.lifecycle("✅ Aggregated plugin resources to: ${assetsDir.absolutePath}")
    }
}
❤️ 1
🙌 4