KT-62380 Copy dummy dSYM directory for cocoapods integration
This commit is contained in:
committed by
Space Team
parent
1bae743524
commit
7c103e257d
+45
-5
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.DUMMY_FRAMEWORK_TASK_NAME
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.DUMMY_FRAMEWORK_TASK_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_IMPORT_TASK_NAME
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_IMPORT_TASK_NAME
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SPEC_TASK_NAME
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SPEC_TASK_NAME
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.SYNC_TASK_NAME
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.cocoapods.CocoapodsPluginDiagnostics
|
import org.jetbrains.kotlin.gradle.targets.native.cocoapods.CocoapodsPluginDiagnostics
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.jetbrains.kotlin.gradle.util.assertProcessRunResult
|
import org.jetbrains.kotlin.gradle.util.assertProcessRunResult
|
||||||
@@ -45,6 +46,7 @@ class CocoaPodsIT : KGPBaseTest() {
|
|||||||
private val podspecTaskName = ":$POD_SPEC_TASK_NAME"
|
private val podspecTaskName = ":$POD_SPEC_TASK_NAME"
|
||||||
private val podImportTaskName = ":$POD_IMPORT_TASK_NAME"
|
private val podImportTaskName = ":$POD_IMPORT_TASK_NAME"
|
||||||
private val podInstallTaskName = ":${KotlinCocoapodsPlugin.POD_INSTALL_TASK_NAME}"
|
private val podInstallTaskName = ":${KotlinCocoapodsPlugin.POD_INSTALL_TASK_NAME}"
|
||||||
|
private val syncTaskName = ":$SYNC_TASK_NAME"
|
||||||
|
|
||||||
private val defaultPodName = "AFNetworking"
|
private val defaultPodName = "AFNetworking"
|
||||||
|
|
||||||
@@ -131,14 +133,56 @@ class CocoaPodsIT : KGPBaseTest() {
|
|||||||
@DisplayName("Dummy UTD")
|
@DisplayName("Dummy UTD")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testDummyUTD(gradleVersion: GradleVersion) {
|
fun testDummyUTD(gradleVersion: GradleVersion) {
|
||||||
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) {
|
val buildOptions = defaultBuildOptions.copy(
|
||||||
|
nativeOptions = defaultBuildOptions.nativeOptions.copy(
|
||||||
|
cocoapodsPlatform = "iphonesimulator",
|
||||||
|
cocoapodsArchs = "x86_64",
|
||||||
|
cocoapodsConfiguration = "Debug"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion, buildOptions = buildOptions) {
|
||||||
|
|
||||||
|
buildGradleKts.addCocoapodsBlock(
|
||||||
|
"""
|
||||||
|
framework {
|
||||||
|
baseName = "shared"
|
||||||
|
isStatic = false
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
|
||||||
buildWithCocoapodsWrapper(dummyTaskName) {
|
buildWithCocoapodsWrapper(dummyTaskName) {
|
||||||
|
assertDirectoryInProjectExists("build/cocoapods/framework/shared.framework")
|
||||||
|
assertDirectoryInProjectExists("build/cocoapods/framework/shared.framework.dSYM")
|
||||||
assertTasksExecuted(dummyTaskName)
|
assertTasksExecuted(dummyTaskName)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildWithCocoapodsWrapper(dummyTaskName) {
|
buildWithCocoapodsWrapper(dummyTaskName) {
|
||||||
assertTasksUpToDate(dummyTaskName)
|
assertTasksUpToDate(dummyTaskName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildWithCocoapodsWrapper(syncTaskName) {
|
||||||
|
assertTasksExecuted(syncTaskName)
|
||||||
|
}
|
||||||
|
|
||||||
|
val frameworkResult = runProcess(
|
||||||
|
listOf("dwarfdump", "--uuid", "shared.framework/shared"),
|
||||||
|
projectPath.resolve("build/cocoapods/framework/").toFile()
|
||||||
|
)
|
||||||
|
|
||||||
|
val dsymResult = runProcess(
|
||||||
|
listOf("dwarfdump", "--uuid", "shared.framework.dSYM"),
|
||||||
|
projectPath.resolve("build/cocoapods/framework/").toFile()
|
||||||
|
)
|
||||||
|
|
||||||
|
assertContains(frameworkResult.output, "UUID:")
|
||||||
|
assertContains(dsymResult.output, "UUID:")
|
||||||
|
|
||||||
|
val frameworkUUID = frameworkResult.output.split(" ").getOrNull(1)
|
||||||
|
val dsymUUID = dsymResult.output.split(" ").getOrNull(1)
|
||||||
|
|
||||||
|
assertEquals(frameworkUUID, dsymUUID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,8 +198,6 @@ class CocoaPodsIT : KGPBaseTest() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion, buildOptions = buildOptions) {
|
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion, buildOptions = buildOptions) {
|
||||||
val syncTaskName = ":syncFramework"
|
|
||||||
|
|
||||||
buildGradleKts.addCocoapodsBlock(
|
buildGradleKts.addCocoapodsBlock(
|
||||||
"""
|
"""
|
||||||
framework {
|
framework {
|
||||||
@@ -195,8 +237,6 @@ class CocoaPodsIT : KGPBaseTest() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion, buildOptions = buildOptions) {
|
nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion, buildOptions = buildOptions) {
|
||||||
val syncTaskName = ":syncFramework"
|
|
||||||
|
|
||||||
buildGradleKts.addCocoapodsBlock(
|
buildGradleKts.addCocoapodsBlock(
|
||||||
"""
|
"""
|
||||||
framework {
|
framework {
|
||||||
|
|||||||
-1
@@ -404,7 +404,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
project.registerTask<DummyFrameworkTask>(DUMMY_FRAMEWORK_TASK_NAME) { task ->
|
project.registerTask<DummyFrameworkTask>(DUMMY_FRAMEWORK_TASK_NAME) { task ->
|
||||||
task.frameworkName.convention(cocoapodsExtension.podFrameworkName)
|
task.frameworkName.convention(cocoapodsExtension.podFrameworkName)
|
||||||
task.useStaticFramework.convention(cocoapodsExtension.podFrameworkIsStatic)
|
task.useStaticFramework.convention(cocoapodsExtension.podFrameworkIsStatic)
|
||||||
task.outputFramework.convention(project.layout.cocoapodsBuildDirs.framework.map { it.dir(task.frameworkName.get() + ".framework") })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+38
-2
@@ -8,15 +8,22 @@ package org.jetbrains.kotlin.gradle.tasks
|
|||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.file.ProjectLayout
|
||||||
|
import org.gradle.api.model.ObjectFactory
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.provider.ProviderFactory
|
||||||
import org.gradle.api.tasks.Input
|
import org.gradle.api.tasks.Input
|
||||||
import org.gradle.api.tasks.Internal
|
import org.gradle.api.tasks.Internal
|
||||||
|
import org.gradle.api.tasks.Optional
|
||||||
import org.gradle.api.tasks.OutputDirectory
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.gradle.work.DisableCachingByDefault
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.cocoapodsBuildDirs
|
||||||
import org.jetbrains.kotlin.gradle.utils.MachO
|
import org.jetbrains.kotlin.gradle.utils.MachO
|
||||||
import org.jetbrains.kotlin.gradle.utils.getFile
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
|
import org.jetbrains.kotlin.incremental.createDirectory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a dummy framework in the target directory.
|
* Creates a dummy framework in the target directory.
|
||||||
@@ -30,7 +37,10 @@ import java.io.File
|
|||||||
* and then replace it with the real one during a real build process.
|
* and then replace it with the real one during a real build process.
|
||||||
*/
|
*/
|
||||||
@DisableCachingByDefault
|
@DisableCachingByDefault
|
||||||
abstract class DummyFrameworkTask : DefaultTask() {
|
abstract class DummyFrameworkTask @Inject constructor(
|
||||||
|
objectFactory: ObjectFactory,
|
||||||
|
projectLayout: ProjectLayout
|
||||||
|
) : DefaultTask() {
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
abstract val frameworkName: Property<String>
|
abstract val frameworkName: Property<String>
|
||||||
@@ -39,7 +49,19 @@ abstract class DummyFrameworkTask : DefaultTask() {
|
|||||||
abstract val useStaticFramework: Property<Boolean>
|
abstract val useStaticFramework: Property<Boolean>
|
||||||
|
|
||||||
@get:OutputDirectory
|
@get:OutputDirectory
|
||||||
abstract val outputFramework: DirectoryProperty
|
val outputFramework: DirectoryProperty = objectFactory.directoryProperty().convention(
|
||||||
|
frameworkName.flatMap { frameworkName ->
|
||||||
|
projectLayout.cocoapodsBuildDirs.framework.map { it.dir("$frameworkName.framework") }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@get:OutputDirectory
|
||||||
|
@get:Optional
|
||||||
|
val outputDsym: DirectoryProperty = objectFactory.directoryProperty().convention(
|
||||||
|
frameworkName.flatMap { frameworkName ->
|
||||||
|
projectLayout.cocoapodsBuildDirs.framework.map { it.dir("$frameworkName.framework.dSYM") }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@get:Internal
|
@get:Internal
|
||||||
@Deprecated("Use outputFramework", replaceWith = ReplaceWith("outputFramework.get().asFile"))
|
@Deprecated("Use outputFramework", replaceWith = ReplaceWith("outputFramework.get().asFile"))
|
||||||
@@ -88,6 +110,17 @@ abstract class DummyFrameworkTask : DefaultTask() {
|
|||||||
transform
|
transform
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun createDummyDsym() {
|
||||||
|
if (useStaticFramework.get()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
outputDsym.orNull?.asFile?.apply {
|
||||||
|
deleteRecursively()
|
||||||
|
mkdirs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun copyFramework() {
|
private fun copyFramework() {
|
||||||
// Reset the destination directory
|
// Reset the destination directory
|
||||||
with(outputFramework.getFile()) {
|
with(outputFramework.getFile()) {
|
||||||
@@ -106,6 +139,9 @@ abstract class DummyFrameworkTask : DefaultTask() {
|
|||||||
it
|
it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create dSYM
|
||||||
|
createDummyDsym()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user