[Gradle] Copy framework to BUILT_PRODUCTS_DIR in the embedAndSign task
^KT-63821 Verification Pending
This commit is contained in:
committed by
Space Team
parent
b78455093e
commit
af4d5605ca
+77
-85
@@ -32,34 +32,39 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
nativeProject(
|
||||
"sharedAppleFramework",
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions
|
||||
) {
|
||||
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
"BUILT_PRODUCTS_DIR" to projectPath.resolve("shared/build/builtProductsDir").toString(),
|
||||
)
|
||||
|
||||
build(
|
||||
"assembleDebugAppleFrameworkForXcodeIosArm64",
|
||||
environmentVariables = EnvironmentalVariables(environmentVariables)
|
||||
) {
|
||||
build("assembleDebugAppleFrameworkForXcodeIosArm64", environmentVariables = environmentVariables) {
|
||||
assertTasksExecuted(":shared:assembleDebugAppleFrameworkForXcodeIosArm64")
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework")
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework.dSYM")
|
||||
assertDirectoryInProjectExists("shared/build/builtProductsDir/sdk.framework")
|
||||
assertDirectoryInProjectExists("shared/build/builtProductsDir/sdk.framework.dSYM")
|
||||
assertDirectoryInProjectDoesNotExist("shared/build/xcode-frameworks/sdk.framework")
|
||||
}
|
||||
|
||||
build(
|
||||
"assembleCustomDebugAppleFrameworkForXcodeIosArm64",
|
||||
environmentVariables = EnvironmentalVariables(environmentVariables)
|
||||
) {
|
||||
build("clean")
|
||||
|
||||
build("assembleDebugAppleFrameworkForXcodeIosArm64", "-Pkotlin.apple.copyFrameworkToBuiltProductsDir=false", environmentVariables = environmentVariables) {
|
||||
assertTasksExecuted(":shared:assembleDebugAppleFrameworkForXcodeIosArm64")
|
||||
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework")
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework.dSYM")
|
||||
|
||||
assertDirectoryInProjectDoesNotExist("shared/build/builtProductsDir/sdk.framework")
|
||||
|
||||
}
|
||||
|
||||
build("assembleCustomDebugAppleFrameworkForXcodeIosArm64", environmentVariables = environmentVariables) {
|
||||
assertTasksExecuted(":shared:assembleCustomDebugAppleFrameworkForXcodeIosArm64")
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/lib.framework")
|
||||
assertDirectoryInProjectExists("shared/build/xcode-frameworks/debug/iphoneos123/lib.framework.dSYM")
|
||||
assertDirectoryInProjectExists("shared/build/builtProductsDir/lib.framework")
|
||||
assertDirectoryInProjectExists("shared/build/builtProductsDir/lib.framework.dSYM")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,15 +81,15 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions
|
||||
) {
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "Release",
|
||||
"SDK_NAME" to "iphonesimulator",
|
||||
"ARCHS" to "arm64 x86_64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
"BUILT_PRODUCTS_DIR" to projectPath.resolve("shared/build/xcode-frameworks/Release/iphonesimulator").toString(),
|
||||
)
|
||||
build("assembleReleaseAppleFrameworkForXcode", environmentVariables = EnvironmentalVariables(environmentVariables)) {
|
||||
build("assembleReleaseAppleFrameworkForXcode", environmentVariables = environmentVariables) {
|
||||
assertTasksExecuted(":shared:linkReleaseFrameworkIosSimulatorArm64")
|
||||
assertTasksExecuted(":shared:linkReleaseFrameworkIosX64")
|
||||
assertTasksExecuted(":shared:assembleReleaseAppleFrameworkForXcode")
|
||||
@@ -106,16 +111,16 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"sharedAppleFramework",
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "macosx",
|
||||
"ARCHS" to "x86_64",
|
||||
"EXPANDED_CODE_SIGN_IDENTITY" to "-",
|
||||
"TARGET_BUILD_DIR" to testBuildDir.toString(),
|
||||
"FRAMEWORKS_FOLDER_PATH" to "build/xcode-derived",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
"BUILT_PRODUCTS_DIR" to projectPath.resolve("shared/build/xcode-frameworks/debug/macosx").toString(),
|
||||
)
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = EnvironmentalVariables(environmentVariables)) {
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = environmentVariables) {
|
||||
assertTasksExecuted(":shared:assembleDebugAppleFrameworkForXcodeMacosX64")
|
||||
assertSymlinkInProjectExists("shared/build/xcode-frameworks/debug/macosx/sdk.framework/Headers")
|
||||
assertSymlinkExists(testBuildDir.resolve("build/xcode-derived/sdk.framework/Headers"))
|
||||
@@ -134,7 +139,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"sharedAppleFramework",
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos",
|
||||
"ARCHS" to "arm64",
|
||||
@@ -142,7 +147,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"FRAMEWORKS_FOLDER_PATH" to "build/xcode-derived",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = EnvironmentalVariables(environmentVariables)) {
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = environmentVariables) {
|
||||
assertDirectoryInProjectExists("build/xcode-derived/sdk.framework")
|
||||
}
|
||||
}
|
||||
@@ -159,7 +164,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"sharedAppleFramework",
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos",
|
||||
"ARCHS" to "arm64",
|
||||
@@ -168,7 +173,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"FRAMEWORKS_FOLDER_PATH" to "build/xcode-derived",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = EnvironmentalVariables(environmentVariables)) {
|
||||
build(":shared:embedAndSignAppleFrameworkForXcode", environmentVariables = environmentVariables) {
|
||||
assertDirectoryInProjectExists("build/xcode-derived/sdk.framework")
|
||||
assertDirectoryInProjectDoesNotExist("build/xcode-derived/sdk.framework.DSYM")
|
||||
}
|
||||
@@ -198,7 +203,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"sharedAppleFramework",
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = mapOf(
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
"CONFIGURATION" to "Debug",
|
||||
"SDK_NAME" to "iphoneos",
|
||||
"ARCHS" to "arm64",
|
||||
@@ -220,7 +225,7 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"shared:assembleCustomReleaseAppleFrameworkForXcodeIosX64",
|
||||
"shared:assembleCustomReleaseAppleFrameworkForXcodeIosArm64"
|
||||
),
|
||||
environmentVariables = EnvironmentalVariables(environmentVariables)
|
||||
environmentVariables = environmentVariables
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -295,17 +300,16 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "Debug",
|
||||
"SDK_NAME" to "iphoneos",
|
||||
"ARCHS" to "arm64",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "Debug",
|
||||
"SDK_NAME" to "iphoneos",
|
||||
"ARCHS" to "arm64",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
buildAndAssertAllTasks(
|
||||
registeredTasks = listOf(
|
||||
"shared:embedAndSignAppleFrameworkForXcode",
|
||||
"shared:embedAndSignCustomAppleFrameworkForXcode"
|
||||
"shared:embedAndSignCustomAppleFrameworkForXcode",
|
||||
),
|
||||
notRegisteredTasks = listOf(
|
||||
"shared:assembleReleaseAppleFrameworkForXcodeIosX64",
|
||||
@@ -315,9 +319,9 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
"shared:assembleCustomDebugAppleFrameworkForXcodeIosX64",
|
||||
"shared:assembleCustomReleaseAppleFrameworkForXcodeIosX64",
|
||||
"shared:assembleCustomDebugAppleFrameworkForXcodeIosArm64",
|
||||
"shared:assembleCustomReleaseAppleFrameworkForXcodeIosArm64"
|
||||
"shared:assembleCustomReleaseAppleFrameworkForXcodeIosArm64",
|
||||
),
|
||||
environmentVariables = environmentVariables
|
||||
environmentVariables = environmentVariables,
|
||||
)
|
||||
buildAndFail(
|
||||
":shared:embedAndSignCustomAppleFrameworkForXcode",
|
||||
@@ -342,14 +346,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
buildOptions = defaultBuildOptions
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to projectPath.resolve("shared/build/xcode-frameworks/debug/iphoneos123").toString(),
|
||||
)
|
||||
|
||||
subProject("shared").buildGradleKts.modify {
|
||||
@@ -379,14 +381,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
subProject("shared").buildGradleKts.appendText(
|
||||
@@ -416,14 +416,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
projectPath.resolve("shared/src/commonMain/kotlin/com/github/jetbrains/myapplication/Greeting.kt")
|
||||
@@ -447,14 +445,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
projectPath.resolve("shared/src/commonMain/kotlin/com/github/jetbrains/myapplication/Greeting.kt")
|
||||
@@ -478,14 +474,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
projectPath.resolve("shared/src/commonMain/kotlin/com/github/jetbrains/myapplication/Greeting.kt")
|
||||
@@ -513,14 +507,12 @@ class AppleFrameworkIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
) {
|
||||
val environmentVariables = EnvironmentalVariables(
|
||||
mapOf(
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
"CONFIGURATION" to "debug",
|
||||
"SDK_NAME" to "iphoneos123",
|
||||
"ARCHS" to "arm64",
|
||||
"TARGET_BUILD_DIR" to "no use",
|
||||
"FRAMEWORKS_FOLDER_PATH" to "no use",
|
||||
"BUILT_PRODUCTS_DIR" to iosBuildProductsDir().absolutePathString(),
|
||||
)
|
||||
|
||||
projectPath.resolve("shared/src/commonMain/kotlin/com/github/jetbrains/myapplication/Greeting.kt")
|
||||
|
||||
+4
@@ -498,6 +498,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
val konanDataDir: String?
|
||||
get() = property(PropertyNames.KONAN_DATA_DIR).orNull
|
||||
|
||||
val appleCopyFrameworkToBuiltProductsDir: Boolean
|
||||
get() = booleanProperty(PropertyNames.KOTLIN_APPLE_COPY_FRAMEWORK_TO_BUILT_PRODUCTS_DIR) ?: true
|
||||
|
||||
/**
|
||||
* Allows suppressing the diagnostic [KotlinToolingDiagnostics.BuildToolsApiVersionInconsistency].
|
||||
* Required only for Kotlin repo bootstrapping.
|
||||
@@ -640,6 +643,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
val KOTLIN_USER_HOME_DIR = property("kotlin.user.home")
|
||||
val KOTLIN_PROJECT_PERSISTENT_DIR = property("kotlin.project.persistent.dir")
|
||||
val KOTLIN_PROJECT_PERSISTENT_DIR_GRADLE_DISABLE_WRITE = property("kotlin.project.persistent.dir.gradle.disableWrite")
|
||||
val KOTLIN_APPLE_COPY_FRAMEWORK_TO_BUILT_PRODUCTS_DIR = property("kotlin.apple.copyFrameworkToBuiltProductsDir")
|
||||
|
||||
/**
|
||||
* Internal properties: builds get big non-suppressible warning when such properties are used
|
||||
|
||||
+34
-25
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.*
|
||||
import org.gradle.process.ExecOperations
|
||||
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.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||
@@ -22,6 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.FrameworkCopy.Companion.dsymFile
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
||||
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||
@@ -34,6 +36,7 @@ import java.io.IOException
|
||||
import java.nio.file.Files
|
||||
import javax.inject.Inject
|
||||
|
||||
@Suppress("ConstPropertyName")
|
||||
internal object AppleXcodeTasks {
|
||||
const val embedAndSignTaskPrefix = "embedAndSign"
|
||||
const val embedAndSignTaskPostfix = "AppleFrameworkForXcode"
|
||||
@@ -70,6 +73,9 @@ private object XcodeEnvironment {
|
||||
return File(configuration, sdk)
|
||||
}
|
||||
|
||||
val builtProductsDir: File?
|
||||
get() = System.getenv("BUILT_PRODUCTS_DIR")?.let(::File)
|
||||
|
||||
val embeddedFrameworksDir: File?
|
||||
get() {
|
||||
val xcodeTargetBuildDir = System.getenv("TARGET_BUILD_DIR") ?: return null
|
||||
@@ -77,12 +83,6 @@ private object XcodeEnvironment {
|
||||
return File(xcodeTargetBuildDir, xcodeFrameworksFolderPath).absoluteFile
|
||||
}
|
||||
|
||||
val buildProductsDir: File?
|
||||
get() {
|
||||
val derivedFileDir = System.getenv("BUILT_PRODUCTS_DIR") ?: return null
|
||||
return File(derivedFileDir).absoluteFile
|
||||
}
|
||||
|
||||
val sign: String? get() = System.getenv("EXPANDED_CODE_SIGN_IDENTITY")
|
||||
|
||||
val userScriptSandboxingEnabled: Boolean get() = System.getenv("ENABLE_USER_SCRIPT_SANDBOXING") == "YES"
|
||||
@@ -92,8 +92,8 @@ private object XcodeEnvironment {
|
||||
buildType=$buildType
|
||||
targets=$targets
|
||||
frameworkSearchDir=$frameworkSearchDir
|
||||
builtProductDir=$builtProductsDir
|
||||
embeddedFrameworksDir=$embeddedFrameworksDir
|
||||
buildProductsDir=$buildProductsDir
|
||||
sign=$sign
|
||||
userScriptSandboxingEnabled=$userScriptSandboxingEnabled
|
||||
""".trimIndent()
|
||||
@@ -118,9 +118,8 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
|
||||
)
|
||||
|
||||
val envBuildType = XcodeEnvironment.buildType
|
||||
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
|
||||
|
||||
if (envBuildType == null || envTargets.isEmpty() || envFrameworkSearchDir == null) {
|
||||
if (envBuildType == null || envTargets.isEmpty() || XcodeEnvironment.builtProductsDir == null) {
|
||||
val envConfiguration = System.getenv("CONFIGURATION")
|
||||
if (envTargets.isNotEmpty() && envConfiguration != null) {
|
||||
project.reportDiagnostic(KotlinToolingDiagnostics.UnknownAppleFrameworkBuildType(envConfiguration))
|
||||
@@ -138,7 +137,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
|
||||
needFatFramework -> locateOrRegisterTask<FatFrameworkTask>(frameworkTaskName) { task ->
|
||||
task.description = "Packs $frameworkBuildType fat framework for Xcode"
|
||||
task.baseName = framework.baseName
|
||||
task.destinationDirProperty.fileProvider(appleFrameworkDir(envFrameworkSearchDir))
|
||||
task.destinationDirProperty.fileProvider(appleFrameworkDir(frameworkTaskName))
|
||||
task.isEnabled = frameworkBuildType == envBuildType
|
||||
}.also {
|
||||
it.configure { task -> task.from(framework) }
|
||||
@@ -149,12 +148,12 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
|
||||
task.sourceFramework.fileProvider(framework.linkTaskProvider.flatMap { it.outputFile })
|
||||
task.sourceDsym.fileProvider(dsymFile(task.sourceFramework.mapToFile()))
|
||||
task.dependsOn(framework.linkTaskProvider)
|
||||
task.destinationDirectory.fileProvider(appleFrameworkDir(envFrameworkSearchDir))
|
||||
task.destinationDirectory.fileProvider(appleFrameworkDir(frameworkTaskName))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fireEnvException(frameworkTaskName: String) {
|
||||
private fun fireEnvException(frameworkTaskName: String): Nothing {
|
||||
val envBuildType = XcodeEnvironment.buildType
|
||||
val envConfiguration = System.getenv("CONFIGURATION")
|
||||
if (envConfiguration != null && envBuildType == null) {
|
||||
@@ -192,13 +191,13 @@ private enum class DirAccessibility {
|
||||
DOES_NOT_EXIST
|
||||
}
|
||||
|
||||
private fun buildProductsDirAccessibility(): DirAccessibility {
|
||||
val buildProductsDir = XcodeEnvironment.buildProductsDir
|
||||
private fun builtProductsDirAccessibility(): DirAccessibility {
|
||||
val builtProductsDir = XcodeEnvironment.builtProductsDir
|
||||
|
||||
return if (buildProductsDir != null) {
|
||||
return if (builtProductsDir != null) {
|
||||
try {
|
||||
Files.createDirectories(buildProductsDir.toPath())
|
||||
val tempFile = File.createTempFile("sandbox", ".tmp", buildProductsDir)
|
||||
Files.createDirectories(builtProductsDir.toPath())
|
||||
val tempFile = File.createTempFile("sandbox", ".tmp", builtProductsDir)
|
||||
if (tempFile.exists()) {
|
||||
tempFile.delete()
|
||||
}
|
||||
@@ -215,7 +214,6 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
val envBuildType = XcodeEnvironment.buildType
|
||||
val envTargets = XcodeEnvironment.targets
|
||||
val envEmbeddedFrameworksDir = XcodeEnvironment.embeddedFrameworksDir
|
||||
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
|
||||
val envSign = XcodeEnvironment.sign
|
||||
val userScriptSandboxingEnabled = XcodeEnvironment.userScriptSandboxingEnabled
|
||||
|
||||
@@ -225,7 +223,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
AppleXcodeTasks.embedAndSignTaskPostfix
|
||||
)
|
||||
|
||||
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) {
|
||||
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null) {
|
||||
locateOrRegisterTask<DefaultTask>(frameworkTaskName) { task ->
|
||||
task.group = BasePlugin.BUILD_GROUP
|
||||
task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
|
||||
@@ -240,7 +238,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
task.group = BasePlugin.BUILD_GROUP
|
||||
task.description = "Check BUILT_PRODUCTS_DIR accessible and ENABLE_USER_SCRIPT_SANDBOXING not enabled"
|
||||
task.doFirst {
|
||||
val dirAccessible = buildProductsDirAccessibility()
|
||||
val dirAccessible = builtProductsDirAccessibility()
|
||||
when (dirAccessible) {
|
||||
DirAccessibility.NOT_ACCESSIBLE -> fireSandboxException(frameworkTaskName)
|
||||
DirAccessibility.DOES_NOT_EXIST,
|
||||
@@ -268,13 +266,14 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
||||
}
|
||||
|
||||
val assembleTask = registerAssembleAppleFrameworkTask(framework) ?: return
|
||||
assembleTask.dependsOn(checkSandboxAndWriteProtectionTask)
|
||||
|
||||
if (framework.buildType != envBuildType || !envTargets.contains(framework.konanTarget)) return
|
||||
|
||||
embedAndSignTask.configure { task ->
|
||||
val frameworkFile = framework.outputFile
|
||||
task.dependsOn(checkSandboxAndWriteProtectionTask)
|
||||
task.dependsOn(assembleTask)
|
||||
task.sourceFramework.fileProvider(appleFrameworkDir(envFrameworkSearchDir).map { it.resolve(frameworkFile.name) })
|
||||
task.sourceFramework.fileProvider(appleFrameworkDir(frameworkTaskName).map { it.resolve(frameworkFile.name) })
|
||||
task.destinationDirectory.set(envEmbeddedFrameworksDir)
|
||||
if (envSign != null) {
|
||||
task.doLast {
|
||||
@@ -297,10 +296,20 @@ private val Framework.namePrefix: String
|
||||
)
|
||||
|
||||
/**
|
||||
* If [frameworkSearchDir] is absolute use it, otherwise make it relative to buildDir/xcode-frameworks
|
||||
* [XcodeEnvironment.builtProductsDir] if not disabled.
|
||||
*
|
||||
* Or if [XcodeEnvironment.frameworkSearchDir] is absolute use it, otherwise make it relative to buildDir/xcode-frameworks
|
||||
*/
|
||||
private fun Project.appleFrameworkDir(frameworkSearchDir: File): Provider<File> =
|
||||
layout.buildDirectory.dir("xcode-frameworks").map { it.asFile.resolve(frameworkSearchDir) }
|
||||
private fun Project.appleFrameworkDir(frameworkTaskName: String): Provider<File> {
|
||||
return if (project.kotlinPropertiesProvider.appleCopyFrameworkToBuiltProductsDir) {
|
||||
project.provider { XcodeEnvironment.builtProductsDir ?: fireEnvException(frameworkTaskName) }
|
||||
} else {
|
||||
layout.buildDirectory.dir("xcode-frameworks").map {
|
||||
it.asFile.resolve(XcodeEnvironment.frameworkSearchDir ?: fireEnvException(frameworkTaskName))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* macOS frameworks contain symlinks which are resolved/removed by the Gradle [Copy] task.
|
||||
|
||||
Reference in New Issue
Block a user