[Gradle] Forbid using embedAndSign together with Pod-dependencies
^KT-64096 Verification Pending
This commit is contained in:
committed by
Space Team
parent
f5de0f9399
commit
7ab691fcef
+13
-7
@@ -17,6 +17,7 @@ import org.gradle.work.DisableCachingByDefault
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.UsesKotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||
@@ -217,11 +218,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
val envSign = XcodeEnvironment.sign
|
||||
val userScriptSandboxingEnabled = XcodeEnvironment.userScriptSandboxingEnabled
|
||||
|
||||
val frameworkTaskName = lowerCamelCaseName(
|
||||
AppleXcodeTasks.embedAndSignTaskPrefix,
|
||||
framework.namePrefix,
|
||||
AppleXcodeTasks.embedAndSignTaskPostfix
|
||||
)
|
||||
val frameworkTaskName = framework.embedAndSignTaskName()
|
||||
|
||||
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null) {
|
||||
locateOrRegisterTask<DefaultTask>(frameworkTaskName) { task ->
|
||||
@@ -250,7 +247,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
}
|
||||
}
|
||||
|
||||
val embedAndSignTask = locateOrRegisterTask<FrameworkCopy>(frameworkTaskName) { task ->
|
||||
val embedAndSignTask = locateOrRegisterTask<EmbedAndSignTask>(frameworkTaskName) { task ->
|
||||
task.group = BasePlugin.BUILD_GROUP
|
||||
task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
|
||||
task.isEnabled = !framework.isStatic
|
||||
@@ -288,6 +285,12 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
}
|
||||
}
|
||||
|
||||
private fun Framework.embedAndSignTaskName(): String = lowerCamelCaseName(
|
||||
AppleXcodeTasks.embedAndSignTaskPrefix,
|
||||
namePrefix,
|
||||
AppleXcodeTasks.embedAndSignTaskPostfix
|
||||
)
|
||||
|
||||
private val Framework.namePrefix: String
|
||||
get() = KotlinNativeBinaryContainer.extractPrefixFromBinaryName(
|
||||
name,
|
||||
@@ -316,7 +319,7 @@ private fun Project.appleFrameworkDir(frameworkTaskName: String): Provider<File>
|
||||
* To preserve these symlinks we are using the `cp` command instead.
|
||||
* See https://youtrack.jetbrains.com/issue/KT-48594.
|
||||
*/
|
||||
@DisableCachingByDefault
|
||||
@DisableCachingByDefault(because = "Caching breaks symlinks inside frameworks")
|
||||
internal abstract class FrameworkCopy : DefaultTask() {
|
||||
|
||||
@get:Inject
|
||||
@@ -359,3 +362,6 @@ internal abstract class FrameworkCopy : DefaultTask() {
|
||||
fun dsymFile(framework: Provider<File>): Provider<File> = framework.map { File(it.path + ".dSYM") }
|
||||
}
|
||||
}
|
||||
|
||||
@DisableCachingByDefault(because = "Caching breaks symlinks inside frameworks")
|
||||
internal abstract class EmbedAndSignTask : FrameworkCopy(), UsesKotlinToolingDiagnostics
|
||||
|
||||
+10
-2
@@ -6,8 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.native.cocoapods
|
||||
|
||||
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.ERROR
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnosticFactory
|
||||
|
||||
@InternalKotlinGradlePluginApi // used in integration tests
|
||||
@@ -52,4 +51,13 @@ object CocoapodsPluginDiagnostics {
|
||||
operator fun invoke(podName: String, dependencyName: String) = build("Couldn't find declaration of pod '$dependencyName' (interop-binding dependency of pod '${podName}')")
|
||||
}
|
||||
|
||||
object EmbedAndSignUsedWithPodDependencies : ToolingDiagnosticFactory(FATAL) {
|
||||
operator fun invoke() = build(
|
||||
"""
|
||||
'embedAndSign' task can not be used in a project with dependencies to pods.
|
||||
Please use CocoaPods for integration into Xcode.
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
+19
@@ -815,6 +815,24 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun checkEmbedAndSignNotUsedTogetherWithPodDependencies(project: Project, kotlinExtension: KotlinMultiplatformExtension, cocoapodsExtension: CocoapodsExtension) {
|
||||
cocoapodsExtension.pods.all {
|
||||
SingleActionPerProject.run(project, "assertEmbedAndSignNotUsedTogetherWithPodDependencies") {
|
||||
kotlinExtension.targets.withType<KotlinNativeTarget>().all { target ->
|
||||
target.binaries.withType<Framework>().all {
|
||||
project.tasks.withType<EmbedAndSignTask>().all { embedAndSignTask ->
|
||||
embedAndSignTask.doFirst {
|
||||
embedAndSignTask.reportDiagnostic(CocoapodsPluginDiagnostics.EmbedAndSignUsedWithPodDependencies())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.gradleWrapperPath(): Provider<String?> {
|
||||
return provider { rootProject.tasks.locateTask<Wrapper>("wrapper")?.get()?.scriptFile?.absolutePath }
|
||||
}
|
||||
@@ -873,6 +891,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
createInterops(project, kotlinExtension, cocoapodsExtension)
|
||||
configureLinkingOptions(project, cocoapodsExtension)
|
||||
checkLinkOnlyNotUsedWithStaticFramework(project, cocoapodsExtension)
|
||||
checkEmbedAndSignNotUsedTogetherWithPodDependencies(project, kotlinExtension, cocoapodsExtension)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user