[Gradle] Copy framework to BUILT_PRODUCTS_DIR in the embedAndSign task

^KT-63821 Verification Pending
This commit is contained in:
Artem Daugel-Dauge
2023-12-04 11:17:21 +01:00
committed by Space Team
parent b78455093e
commit af4d5605ca
3 changed files with 115 additions and 110 deletions
@@ -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")
@@ -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
@@ -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.