Hi! I upgraded my project from Kotlin 1.3.71 to 1....
# multiplatform
d
Hi! I upgraded my project from Kotlin 1.3.71 to 1.5.31 and gradle to 7.2. I now see an error when building the iOS framework. The project uses FatFrameworkTask. Error:
Copy code
* What went wrong:
Could not determine the dependencies of task ':linkReleaseFrameworkIos'.
 > Collection is empty.
  * Try:
   Run with --scan to get full insights.
  
  * Exception is:
  org.gradle.api.internal.tasks.TaskDependencyResolveException: Could not determine the dependencies of task ':linkReleaseFrameworkIos'.
 at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:71)
 at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:46)
 at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:161)
 at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:129)
 at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:186)
at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:150)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.addEntryTasks(DefaultTaskExecutionGraph.java:146)
This is the build.gradle snippit:
Copy code
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask

apply plugin: 'com.android.library'
apply plugin: 'kotlin-multiplatform'
apply plugin: 'maven-publish'

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
    }

    ext.ios_framework_name = 'customclassFramework'
}

repositories {
    mavenCentral()
    google()
    jcenter()
}

group 'com.xyz.testApp'
version '0.0.1'

android {
    compileSdkVersion 31

    defaultConfig {
        minSdkVersion 30
        targetSdkVersion 31
        versionCode 1
        versionName '1.0'
        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
    }

    buildTypes {
        debug {
            debuggable true
        }
        release {
            minifyEnabled true
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'src/androidMain/AndroidManifest.xml'
            java.srcDirs = ['src/androidMain/kotlin']
            res.srcDirs = ['src/androidMain/res']
        }
    }
}

kotlin {
    targets {
        fromPreset(presets.jvm, 'android')

        iosX64('ios')
        iosArm32('iosArm32')
        iosArm64('iosArm64')

        configure([iosArm32, iosArm64, ios]) {
            binaries.framework {
                baseName = "$ios_framework_name"
                freeCompilerArgs += "-Xobjc-generics"
            }
        }
    }

    sourceSets {
        commonMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib-common'
        }

        androidMain.dependencies {
            api 'org.jetbrains.kotlin:kotlin-stdlib'
        }

        iosMain.dependencies { }

        configure([iosArm32Main, iosArm64Main]) {
            dependsOn iosMain
        }

        configure([iosArm32Test, iosArm64Test]) {
            dependsOn iosTest
        }
    }

    task releaseFatFramework(type: FatFrameworkTask) {
        baseName = ios_framework_name

        destinationDir = file("$projectDir/xcode-framework")

        from(
            targets.ios.binaries.getFramework("RELEASE"),
            targets.iosArm32.binaries.getFramework("RELEASE"),
            targets.iosArm64.binaries.getFramework("RELEASE")
        )

        doLast {
            new File(destinationDir, 'gradlew').with {
                text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
                setExecutable(true)
            }
        }
    }
}

configurations {
    compileClasspath
}

publishing {
    repositories {
        maven {
            url "<path/to/private/maven>"
            name 'customclass'
            credentials {
                username = "${vsts_user_publish}"
                password = "${vsts_password_publish}"
            }
        }
    }

    publications {
        maven(MavenPublication) {
            groupId = 'com.xyz.testApp'
            artifactId 'customclass'
            version = version
            artifact ("${project.buildDir}/outputs/aar/${project.name}-release.aar")
        }
    }
}

tasks.build.dependsOn releaseFatFramework
🧵 3
s
You might want to consider switching over from a fat framework to an xcframework. It will allow you to remove the lipo step that removes the simulator slices before uploading to Apple. https://kotlinlang.org/docs/mpp-build-native-binaries.html#build-xcframeworks If all of your dependencies support it, this makes it simple to add a simulator target for arm64. It allows M1 Macs to use the framework in a simulator build.