https://kotlinlang.org logo
#multiplatform
Title
# multiplatform
y

yshrsmz

01/25/2019, 8:07 AM
Copy code
kotlin {
  iosX64('ios') {
    binaries {
      framework()
    }
  }
}
In 1.3.20 when I try to create framework for iOS with above config, looks like link task name is
linkDebugFrameworkIos
, but
kotlin.targets.ios.compilations.main.linkTaskName('FRAMEWORK', 'DEBUG')
is
linkMainDebugFrameworkIos
.
i

ilya.matveev

01/25/2019, 9:25 AM
This is correct. Actually they are link tasks of different binaries. As you know, the
compilation.outputKinds
method was used to declare final binaries in 1.3.0. Such an approach allowed creating only one binary for each pair of binary kind (executable, framework etc) and build type (debug/release). So the
compilations.main.linkTaskName('FRAMEWORK', 'DEBUG')
returns the link task name for such a pair. In 1.3.20 the new API allows creating several binaries for the same compilation with the same kind and build type, so it's impossible to get a link task only by a pair of binary kind and build type. But almost all the APIs introduced in 1.3.0 were saved in 1.3.20 to make build scripts compatible. To achieve this, the plugin creates binaries for all kinds listed using the
compilation.outputKinds
method in addition to all binaries declared in the
binaries
block by a user. Thus the
compilation.linkTaskName
returns a link task name of a binary created using the
compilation.outputKinds
method, not a binary declared in the
binaries
block by a user. But you can get a link task of the second binary too:
Copy code
kotlin {
  iosX64('ios') {
    binaries {
      framework {
        println(linkTask.name)
      }
    }
  }
}
See also:https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#building-final-native-binaries.
40 Views