Link CocoaPods frameworks with iosTest binary
#KT-44857 #KT-37513
This commit is contained in:
committed by
Space
parent
b51ff799cb
commit
780b9a032b
+4
@@ -61,6 +61,7 @@ class CocoaPodsIT : BaseGradleIT() {
|
|||||||
private val cocoapodsMultipleKtPods = "native-cocoapods-multiple"
|
private val cocoapodsMultipleKtPods = "native-cocoapods-multiple"
|
||||||
private val templateProjectName = "native-cocoapods-template"
|
private val templateProjectName = "native-cocoapods-template"
|
||||||
private val groovyTemplateProjectName = "native-cocoapods-template-groovy"
|
private val groovyTemplateProjectName = "native-cocoapods-template-groovy"
|
||||||
|
private val cocoapodsTestsProjectName = "native-cocoapods-tests"
|
||||||
|
|
||||||
private val dummyTaskName = ":$DUMMY_FRAMEWORK_TASK_NAME"
|
private val dummyTaskName = ":$DUMMY_FRAMEWORK_TASK_NAME"
|
||||||
private val podspecTaskName = ":$POD_SPEC_TASK_NAME"
|
private val podspecTaskName = ":$POD_SPEC_TASK_NAME"
|
||||||
@@ -880,6 +881,9 @@ class CocoaPodsIT : BaseGradleIT() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testPodDependencyInUnitTests() =
|
||||||
|
getProjectByName(cocoapodsTestsProjectName).testWithWrapper(":iosX64Test")
|
||||||
|
|
||||||
// paths
|
// paths
|
||||||
|
|
||||||
|
|||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
plugins {
|
||||||
|
id("org.jetbrains.kotlin.multiplatform").version("<pluginMarkerVersion>")
|
||||||
|
id("org.jetbrains.kotlin.native.cocoapods").version("<pluginMarkerVersion>")
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "org.jetbrains.kotlin.sample.native"
|
||||||
|
version = "1.0"
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
iosX64()
|
||||||
|
cocoapods {
|
||||||
|
homepage = "https://github.com/JetBrains/kotlin"
|
||||||
|
summary = "CocoaPods test library"
|
||||||
|
ios.deploymentTarget = "13.5"
|
||||||
|
pod("AFNetworking")
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enableFeaturePreview('GRADLE_METADATA')
|
||||||
|
|
||||||
|
rootProject.name = "cocoapods"
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package testProject.`new-mpp-cocoapods-template`.src.iosX64Main.kotlin
|
||||||
|
|
||||||
|
import cocoapods.AFNetworking.*
|
||||||
|
|
||||||
|
fun foo() : Boolean {
|
||||||
|
val manager = AFURLSessionManager()
|
||||||
|
return manager != null
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
package testProject.`new-mpp-cocoapods-template`.src.iosTest.kotlin
|
||||||
|
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
import testProject.`new-mpp-cocoapods-template`.src.iosX64Main.kotlin.foo
|
||||||
|
|
||||||
|
class IosGreetingTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testExample() {
|
||||||
|
assertTrue(foo())
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
-8
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency.PodLocation.*
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency.PodLocation.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBinary
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.TestExecutable
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
|
||||||
@@ -242,30 +244,33 @@ open class CocoapodsExtension(private val project: Project) {
|
|||||||
frameworkNameInternal = framework.baseName
|
frameworkNameInternal = framework.baseName
|
||||||
useDynamicFramework = framework.isStatic.not()
|
useDynamicFramework = framework.isStatic.not()
|
||||||
if (useDynamicFramework) {
|
if (useDynamicFramework) {
|
||||||
configureDynamicFrameworkLinking(framework)
|
configureLinkingOptions(framework)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureDynamicFrameworkLinking(framework: Framework) {
|
internal fun configureLinkingOptions(binary: NativeBinary, setRPath: Boolean = false) {
|
||||||
project.findProperty(KotlinCocoapodsPlugin.FRAMEWORK_PATHS_PROPERTY)?.toString()?.let { args ->
|
project.findProperty(KotlinCocoapodsPlugin.FRAMEWORK_PATHS_PROPERTY)?.toString()?.let { args ->
|
||||||
framework.linkerOpts.addAll(args.splitQuotedArgs().map { "-F$it" })
|
binary.linkerOpts.addAll(args.splitQuotedArgs().map { "-F$it" })
|
||||||
}
|
}
|
||||||
pods.all { pod ->
|
pods.all { pod ->
|
||||||
framework.linkerOpts("-framework", pod.moduleName)
|
binary.linkerOpts("-framework", pod.moduleName)
|
||||||
if (project.shouldUseSyntheticProjectSettings &&
|
if (project.shouldUseSyntheticProjectSettings &&
|
||||||
KotlinCocoapodsPlugin.isAvailableToProduceSynthetic
|
KotlinCocoapodsPlugin.isAvailableToProduceSynthetic
|
||||||
) {
|
) {
|
||||||
framework.linkTaskProvider.configure { task ->
|
binary.linkTaskProvider.configure { task ->
|
||||||
|
|
||||||
val podBuildTaskProvider = project.getPodBuildTaskProvider(framework.target, pod)
|
val podBuildTaskProvider = project.getPodBuildTaskProvider(binary.target, pod)
|
||||||
task.inputs.file(podBuildTaskProvider.map { it.buildSettingsFile })
|
task.inputs.file(podBuildTaskProvider.map { it.buildSettingsFile })
|
||||||
task.dependsOn(podBuildTaskProvider)
|
task.dependsOn(podBuildTaskProvider)
|
||||||
|
|
||||||
task.doFirst { _ ->
|
task.doFirst { _ ->
|
||||||
val podBuildSettings = project.getPodBuildSettingsProperties(framework.target, pod)
|
val podBuildSettings = project.getPodBuildSettingsProperties(binary.target, pod)
|
||||||
framework.linkerOpts.addAll(podBuildSettings.frameworkSearchPaths.map { "-F$it" })
|
binary.linkerOpts.addAll(podBuildSettings.frameworkSearchPaths.map { "-F$it" })
|
||||||
|
if (setRPath) {
|
||||||
|
binary.linkerOpts.addAll(podBuildSettings.frameworkSearchPaths.flatMap { listOf("-rpath", it) })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Compan
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.PLATFORM_PROPERTY
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.PLATFORM_PROPERTY
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.TestExecutable
|
||||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.tasks.*
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
@@ -636,6 +637,15 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun configureTestBinaries(project: Project, cocoapodsExtension: CocoapodsExtension) {
|
||||||
|
project.multiplatformExtension.supportedTargets().all { target ->
|
||||||
|
target.binaries.withType(TestExecutable::class.java) { testExecutable ->
|
||||||
|
cocoapodsExtension.configureLinkingOptions(testExecutable, setRPath = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun apply(project: Project): Unit = with(project) {
|
override fun apply(project: Project): Unit = with(project) {
|
||||||
|
|
||||||
pluginManager.withPlugin("kotlin-multiplatform") {
|
pluginManager.withPlugin("kotlin-multiplatform") {
|
||||||
@@ -666,6 +676,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
createInterops(project, kotlinExtension, cocoapodsExtension)
|
createInterops(project, kotlinExtension, cocoapodsExtension)
|
||||||
|
configureTestBinaries(project, cocoapodsExtension)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user