KT-65741 Add Swift Export KGP tasks
This commit is contained in:
committed by
Space Team
parent
eabd2f0fc7
commit
d76a6d6a9c
@@ -74,6 +74,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
commonCompileOnly(project(":kotlin-tooling-metadata"))
|
commonCompileOnly(project(":kotlin-tooling-metadata"))
|
||||||
commonCompileOnly(project(":compiler:build-tools:kotlin-build-statistics"))
|
commonCompileOnly(project(":compiler:build-tools:kotlin-build-statistics"))
|
||||||
|
commonCompileOnly(project(":native:swift:swift-export-standalone"))
|
||||||
commonCompileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) { isTransitive = false }
|
commonCompileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) { isTransitive = false }
|
||||||
|
|
||||||
commonImplementation(project(":kotlin-gradle-plugin-idea"))
|
commonImplementation(project(":kotlin-gradle-plugin-idea"))
|
||||||
@@ -90,6 +91,10 @@ dependencies {
|
|||||||
commonRuntimeOnly(project(":kotlin-util-klib"))
|
commonRuntimeOnly(project(":kotlin-util-klib"))
|
||||||
commonRuntimeOnly(project(":kotlin-compiler-embeddable"))
|
commonRuntimeOnly(project(":kotlin-compiler-embeddable"))
|
||||||
|
|
||||||
|
if (kotlinBuildProperties.isSwiftExportPluginPublishingEnabled) {
|
||||||
|
embedded(project(":native:swift:swift-export-embeddable"))
|
||||||
|
}
|
||||||
|
|
||||||
embedded(project(":kotlin-gradle-build-metrics"))
|
embedded(project(":kotlin-gradle-build-metrics"))
|
||||||
embedded(project(":kotlin-gradle-statistics"))
|
embedded(project(":kotlin-gradle-statistics"))
|
||||||
embedded(commonDependency("org.jetbrains.intellij.deps:asm-all")) { isTransitive = false }
|
embedded(commonDependency("org.jetbrains.intellij.deps:asm-all")) { isTransitive = false }
|
||||||
|
|||||||
+4
@@ -500,6 +500,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
|||||||
val cocoapodsExecutablePath: RegularFile?
|
val cocoapodsExecutablePath: RegularFile?
|
||||||
get() = property(PropertyNames.KOTLIN_APPLE_COCOAPODS_EXECUTABLE).orNull?.let { RegularFile { File(it) } }
|
get() = property(PropertyNames.KOTLIN_APPLE_COCOAPODS_EXECUTABLE).orNull?.let { RegularFile { File(it) } }
|
||||||
|
|
||||||
|
val swiftExportEnabled: Boolean
|
||||||
|
get() = booleanProperty(PropertyNames.KOTLIN_SWIFT_EXPORT_ENABLED) ?: false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the user to specify a custom location for the Kotlin/Native distribution.
|
* Allows the user to specify a custom location for the Kotlin/Native distribution.
|
||||||
* This property takes precedence over the 'KONAN_DATA_DIR' environment variable.
|
* This property takes precedence over the 'KONAN_DATA_DIR' environment variable.
|
||||||
@@ -662,6 +665,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
|||||||
val KOTLIN_NATIVE_TOOLCHAIN_ENABLED = property("kotlin.native.toolchain.enabled")
|
val KOTLIN_NATIVE_TOOLCHAIN_ENABLED = property("kotlin.native.toolchain.enabled")
|
||||||
val KOTLIN_APPLE_COPY_FRAMEWORK_TO_BUILT_PRODUCTS_DIR = property("kotlin.apple.copyFrameworkToBuiltProductsDir")
|
val KOTLIN_APPLE_COPY_FRAMEWORK_TO_BUILT_PRODUCTS_DIR = property("kotlin.apple.copyFrameworkToBuiltProductsDir")
|
||||||
val KOTLIN_APPLE_COCOAPODS_EXECUTABLE = property("kotlin.apple.cocoapods.bin")
|
val KOTLIN_APPLE_COCOAPODS_EXECUTABLE = property("kotlin.apple.cocoapods.bin")
|
||||||
|
val KOTLIN_SWIFT_EXPORT_ENABLED = property("kotlin.swift-export.enabled")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal properties: builds get big non-suppressible warning when such properties are used
|
* Internal properties: builds get big non-suppressible warning when such properties are used
|
||||||
|
|||||||
+15
-5
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
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.apple.FrameworkCopy.Companion.dsymFile
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.registerSwiftExportTask
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost
|
||||||
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.getFile
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
@@ -139,13 +139,13 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
|
|||||||
task.description = "Packs $frameworkBuildType fat framework for Xcode"
|
task.description = "Packs $frameworkBuildType fat framework for Xcode"
|
||||||
task.baseName = framework.baseName
|
task.baseName = framework.baseName
|
||||||
task.destinationDirProperty.fileProvider(appleFrameworkDir(frameworkTaskName))
|
task.destinationDirProperty.fileProvider(appleFrameworkDir(frameworkTaskName))
|
||||||
task.isEnabled = frameworkBuildType == envBuildType
|
task.isEnabled = !project.kotlinPropertiesProvider.swiftExportEnabled && frameworkBuildType == envBuildType
|
||||||
}.also {
|
}.also {
|
||||||
it.configure { task -> task.from(framework) }
|
it.configure { task -> task.from(framework) }
|
||||||
}
|
}
|
||||||
else -> registerTask<FrameworkCopy>(frameworkTaskName) { task ->
|
else -> registerTask<FrameworkCopy>(frameworkTaskName) { task ->
|
||||||
task.description = "Packs $frameworkBuildType ${frameworkTarget.name} framework for Xcode"
|
task.description = "Packs $frameworkBuildType ${frameworkTarget.name} framework for Xcode"
|
||||||
task.isEnabled = frameworkBuildType == envBuildType
|
task.isEnabled = !project.kotlinPropertiesProvider.swiftExportEnabled && frameworkBuildType == envBuildType
|
||||||
task.sourceFramework.fileProvider(framework.linkTaskProvider.flatMap { it.outputFile })
|
task.sourceFramework.fileProvider(framework.linkTaskProvider.flatMap { it.outputFile })
|
||||||
task.sourceDsym.fileProvider(dsymFile(task.sourceFramework.mapToFile()))
|
task.sourceDsym.fileProvider(dsymFile(task.sourceFramework.mapToFile()))
|
||||||
task.dependsOn(framework.linkTaskProvider)
|
task.dependsOn(framework.linkTaskProvider)
|
||||||
@@ -220,6 +220,13 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
|||||||
|
|
||||||
val frameworkTaskName = framework.embedAndSignTaskName()
|
val frameworkTaskName = framework.embedAndSignTaskName()
|
||||||
|
|
||||||
|
val swiftExportTask: TaskProvider<*>? =
|
||||||
|
if (project.kotlinPropertiesProvider.swiftExportEnabled && XcodeEnvironment.targets.contains(framework.target.konanTarget)) {
|
||||||
|
registerSwiftExportTask(framework)
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null) {
|
if (envBuildType == null || envTargets.isEmpty() || envEmbeddedFrameworksDir == null) {
|
||||||
locateOrRegisterTask<DefaultTask>(frameworkTaskName) { task ->
|
locateOrRegisterTask<DefaultTask>(frameworkTaskName) { task ->
|
||||||
task.group = BasePlugin.BUILD_GROUP
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
@@ -250,7 +257,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
|||||||
val embedAndSignTask = locateOrRegisterTask<EmbedAndSignTask>(frameworkTaskName) { task ->
|
val embedAndSignTask = locateOrRegisterTask<EmbedAndSignTask>(frameworkTaskName) { task ->
|
||||||
task.group = BasePlugin.BUILD_GROUP
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
|
task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
|
||||||
task.isEnabled = !framework.isStatic
|
task.isEnabled = !(project.kotlinPropertiesProvider.swiftExportEnabled || framework.isStatic)
|
||||||
task.inputs.apply {
|
task.inputs.apply {
|
||||||
property("type", envBuildType)
|
property("type", envBuildType)
|
||||||
property("targets", envTargets)
|
property("targets", envTargets)
|
||||||
@@ -270,6 +277,9 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
|
|||||||
embedAndSignTask.configure { task ->
|
embedAndSignTask.configure { task ->
|
||||||
val frameworkFile = framework.outputFile
|
val frameworkFile = framework.outputFile
|
||||||
task.dependsOn(assembleTask)
|
task.dependsOn(assembleTask)
|
||||||
|
if (swiftExportTask != null) {
|
||||||
|
task.dependsOn(swiftExportTask)
|
||||||
|
}
|
||||||
task.sourceFramework.fileProvider(appleFrameworkDir(frameworkTaskName).map { it.resolve(frameworkFile.name) })
|
task.sourceFramework.fileProvider(appleFrameworkDir(frameworkTaskName).map { it.resolve(frameworkFile.name) })
|
||||||
task.destinationDirectory.set(envEmbeddedFrameworksDir)
|
task.destinationDirectory.set(envEmbeddedFrameworksDir)
|
||||||
if (envSign != null) {
|
if (envSign != null) {
|
||||||
|
|||||||
+157
@@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.file.RegularFile
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.gradle.api.provider.ProviderFactory
|
||||||
|
import org.gradle.api.tasks.*
|
||||||
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleXcodeTasks
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.appendLine
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.listFilesOrEmpty
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.mapToFile
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.runCommand
|
||||||
|
import org.jetbrains.kotlin.utils.keysToMap
|
||||||
|
import java.io.File
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@DisableCachingByDefault(because = "Swift Export is experimental, so no caching for now")
|
||||||
|
abstract class BuildSyntheticProjectWithSwiftExportPackage : DefaultTask() {
|
||||||
|
|
||||||
|
@get:Inject
|
||||||
|
abstract val providerFactory: ProviderFactory
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val swiftApiModuleName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val swiftLibraryName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
val inheritedBuildSettingsFromEnvironment: Map<String, Provider<String>>
|
||||||
|
get() = listOf(
|
||||||
|
"CONFIGURATION", "ARCHS", "ONLY_ACTIVE_ARCH",
|
||||||
|
).keysToMap {
|
||||||
|
providerFactory.environmentVariable(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:Optional
|
||||||
|
@get:Input
|
||||||
|
val targetDeviceIdentifier: Provider<String> get() = providerFactory.environmentVariable("TARGET_DEVICE_IDENTIFIER")
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
val platformName: Provider<String> get() = providerFactory.environmentVariable("PLATFORM_NAME")
|
||||||
|
|
||||||
|
@get:OutputDirectory
|
||||||
|
val syntheticInterfacesPath: Provider<Directory> get() = syntheticProjectDirectory.map { it.dir("dd-interfaces") }
|
||||||
|
|
||||||
|
private val syntheticObjectFilesDirectory get() = syntheticProjectDirectory.map { it.dir("dd-o-files") }
|
||||||
|
|
||||||
|
@get:OutputFile
|
||||||
|
val syntheticLibraryPath: Provider<RegularFile> get() = syntheticObjectFilesDirectory.map { it.file("lib${swiftLibraryName.get()}.a") }
|
||||||
|
|
||||||
|
@get:OutputDirectory
|
||||||
|
val syntheticBuildIntermediatesPath: Provider<File> get() = syntheticProjectDirectory.map { it.dir("dd-other") }.mapToFile()
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
abstract val syntheticProjectDirectory: DirectoryProperty
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun run() {
|
||||||
|
val syntheticProjectPath = setUpSyntheticProject()
|
||||||
|
val syntheticObjectFilesDirectory = buildSyntheticProject(syntheticProjectPath)
|
||||||
|
packObjectFilesIntoLibrary(syntheticObjectFilesDirectory)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpSyntheticProject(): File {
|
||||||
|
val syntheticForSpm = syntheticProjectDirectory.get().asFile
|
||||||
|
val syntheticProjectPath = syntheticForSpm.resolve("synthetic.xcodeproj")
|
||||||
|
syntheticProjectPath.mkdirs()
|
||||||
|
|
||||||
|
val pbxprojPath = syntheticProjectPath.resolve("project.pbxproj")
|
||||||
|
val syntheticProjectTemplate =
|
||||||
|
AppleXcodeTasks.javaClass.getResourceAsStream("/spm/project.pbxproj") ?: error("Missing synthetic project resource")
|
||||||
|
|
||||||
|
pbxprojPath.outputStream().writer().use { pbxprojWriter ->
|
||||||
|
syntheticProjectTemplate.reader().forEachLine { line ->
|
||||||
|
pbxprojWriter
|
||||||
|
.append(line.replace(SYNTHETIC_PROJECT_MARKER, swiftApiModuleName.get()))
|
||||||
|
.appendLine()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return syntheticProjectPath
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildSyntheticProject(syntheticProjectPath: File): File {
|
||||||
|
val syntheticObjectFilesDirectory = this.syntheticObjectFilesDirectory.get().asFile
|
||||||
|
val intermediatesDestination = mapOf(
|
||||||
|
// Thin/universal object files
|
||||||
|
"TARGET_BUILD_DIR" to syntheticObjectFilesDirectory.canonicalPath,
|
||||||
|
// .swiftmodule interface
|
||||||
|
"BUILT_PRODUCTS_DIR" to syntheticInterfacesPath.get().asFile.canonicalPath
|
||||||
|
)
|
||||||
|
val inheritedBuildSettings = inheritedBuildSettingsFromEnvironment.mapValues {
|
||||||
|
it.value.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: This will not work with dynamic libraries
|
||||||
|
runCommand(
|
||||||
|
listOf(
|
||||||
|
"xcodebuild",
|
||||||
|
"build",
|
||||||
|
"-derivedDataPath", syntheticBuildIntermediatesPath.get().canonicalPath,
|
||||||
|
"-project", syntheticProjectPath.canonicalPath,
|
||||||
|
"-scheme", swiftLibraryName.get(),
|
||||||
|
"-destination", destination(),
|
||||||
|
) + (inheritedBuildSettings + intermediatesDestination).map { (k, v) -> "$k=$v" }
|
||||||
|
)
|
||||||
|
return syntheticObjectFilesDirectory
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun packObjectFilesIntoLibrary(syntheticObjectFilesDirectory: File) {
|
||||||
|
val objectFilePaths = syntheticObjectFilesDirectory.listFilesOrEmpty().filter {
|
||||||
|
it.extension == "o"
|
||||||
|
}.map { it.canonicalPath }
|
||||||
|
if (objectFilePaths.isEmpty()) {
|
||||||
|
error("Synthetic project build didn't produce any object files")
|
||||||
|
}
|
||||||
|
|
||||||
|
runCommand(
|
||||||
|
listOf(
|
||||||
|
"libtool", "-static",
|
||||||
|
"-o", syntheticLibraryPath.get().asFile.canonicalPath,
|
||||||
|
) + objectFilePaths,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun destination(): String {
|
||||||
|
val deviceId: String? = targetDeviceIdentifier.orNull
|
||||||
|
if (deviceId != null) return "id=$deviceId"
|
||||||
|
|
||||||
|
val platformName = platformName.orNull ?: error("Missing a target device identifier and a platform name")
|
||||||
|
val platform = mapOf(
|
||||||
|
"iphonesimulator" to "iOS Simulator",
|
||||||
|
"iphoneos" to "iOS",
|
||||||
|
"watchsimulator" to "watchOS Simulator",
|
||||||
|
"watchos" to "watchOS",
|
||||||
|
"appletvos" to "tvOS",
|
||||||
|
"appletvsimulator" to "tvOS Simulator",
|
||||||
|
"macosx" to "macOS",
|
||||||
|
)[platformName] ?: error("Unknown PLATFORM_NAME $platformName")
|
||||||
|
|
||||||
|
return "generic/platform=$platform"
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val SYNTHETIC_PROJECT_MARKER = "<SwiftExportModuleName>"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+74
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.file.FileSystemOperations
|
||||||
|
import org.gradle.api.file.ProjectLayout
|
||||||
|
import org.gradle.api.file.RegularFileProperty
|
||||||
|
import org.gradle.api.model.ObjectFactory
|
||||||
|
import org.gradle.api.provider.ProviderFactory
|
||||||
|
import org.gradle.api.tasks.*
|
||||||
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import java.io.File
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@DisableCachingByDefault(because = "This task only copies files")
|
||||||
|
abstract class CopySwiftExportIntermediatesForConsumer @Inject constructor(
|
||||||
|
objectFactory: ObjectFactory,
|
||||||
|
projectLayout: ProjectLayout,
|
||||||
|
providerFactory: ProviderFactory,
|
||||||
|
private val fileSystem: FileSystemOperations
|
||||||
|
) : DefaultTask() {
|
||||||
|
|
||||||
|
@get:InputDirectory
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val includeBridgeDirectory: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputFile
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val kotlinLibraryPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputFile
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val syntheticLibraryPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputDirectory
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val syntheticInterfacesPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputDirectory
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
val builtProductsDirectory: DirectoryProperty = objectFactory.directoryProperty().convention(
|
||||||
|
projectLayout.dir(providerFactory.environmentVariable("BUILT_PRODUCTS_DIR").map {
|
||||||
|
File(it)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
@get:OutputDirectory
|
||||||
|
val syntheticInterfacesDestinationPath: DirectoryProperty = objectFactory.directoryProperty().convention(
|
||||||
|
builtProductsDirectory.flatMap {
|
||||||
|
projectLayout.dir(providerFactory.provider {
|
||||||
|
it.asFile.resolve("KotlinBridge")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun copy() {
|
||||||
|
fileSystem.copy {
|
||||||
|
it.from(kotlinLibraryPath)
|
||||||
|
it.from(syntheticInterfacesPath)
|
||||||
|
it.from(syntheticLibraryPath)
|
||||||
|
it.into(builtProductsDirectory)
|
||||||
|
}
|
||||||
|
fileSystem.copy {
|
||||||
|
it.from(includeBridgeDirectory)
|
||||||
|
it.into(syntheticInterfacesDestinationPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+131
@@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.file.RegularFileProperty
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.tasks.*
|
||||||
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.appendLine
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
|
import org.jetbrains.kotlin.incremental.createDirectory
|
||||||
|
import org.jetbrains.kotlin.incremental.deleteRecursivelyOrThrow
|
||||||
|
|
||||||
|
@DisableCachingByDefault(because = "Swift Export is experimental, so no caching for now")
|
||||||
|
abstract class GenerateSPMPackageFromSwiftExport : DefaultTask() {
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val swiftApiModuleName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val headerBridgeModuleName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val swiftLibraryName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val kotlinLibraryName: Property<String>
|
||||||
|
|
||||||
|
@get:InputFile
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val swiftApiPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputFile
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val headerBridgePath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:InputFile
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val libraryPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:OutputDirectory
|
||||||
|
abstract val packagePath: DirectoryProperty
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val headerBridgeIncludePath get() = headerBridgeModulePath.resolve("include")
|
||||||
|
|
||||||
|
private val swiftApiModule get() = swiftApiModuleName.get()
|
||||||
|
private val headerBridgeModule get() = headerBridgeModuleName.get()
|
||||||
|
private val spmPackageRootPath get() = packagePath.getFile()
|
||||||
|
|
||||||
|
private val sourcesPath get() = spmPackageRootPath.resolve("Sources")
|
||||||
|
private val swiftApiModulePath get() = sourcesPath.resolve(swiftApiModule)
|
||||||
|
private val headerBridgeModulePath get() = sourcesPath.resolve(headerBridgeModule)
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun generate() {
|
||||||
|
preparePackageDirectory()
|
||||||
|
createHeaderTarget()
|
||||||
|
createSwiftTarget()
|
||||||
|
createPackageManifest()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun preparePackageDirectory() {
|
||||||
|
if (spmPackageRootPath.exists()) {
|
||||||
|
spmPackageRootPath.deleteRecursivelyOrThrow()
|
||||||
|
}
|
||||||
|
swiftApiModulePath.createDirectory()
|
||||||
|
headerBridgeIncludePath.createDirectory()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createHeaderTarget() {
|
||||||
|
headerBridgePath.get().asFile.copyTo(
|
||||||
|
headerBridgeIncludePath.resolve("Kotlin.h")
|
||||||
|
)
|
||||||
|
headerBridgeIncludePath.resolve("module.modulemap").writeText(
|
||||||
|
"""
|
||||||
|
module $headerBridgeModule {
|
||||||
|
umbrella "."
|
||||||
|
export *
|
||||||
|
|
||||||
|
link "${swiftLibraryName.get()}"
|
||||||
|
link "${kotlinLibraryName.get()}"
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
headerBridgeModulePath.resolve("linkingStub.c").writeText("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createSwiftTarget() {
|
||||||
|
swiftApiModulePath.resolve("Kotlin.swift").writer().use { kotlinApi ->
|
||||||
|
swiftApiPath.get().asFile.reader().forEachLine {
|
||||||
|
kotlinApi.append(it).appendLine()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createPackageManifest() {
|
||||||
|
val manifest = spmPackageRootPath.resolve("Package.swift")
|
||||||
|
manifest.writeText(
|
||||||
|
"""
|
||||||
|
// swift-tools-version: 5.9
|
||||||
|
|
||||||
|
import PackageDescription
|
||||||
|
let package = Package(
|
||||||
|
name: "$swiftApiModule",
|
||||||
|
products: [
|
||||||
|
.library(
|
||||||
|
name: "${swiftApiModule}Library",
|
||||||
|
targets: ["$swiftApiModule"]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
.target(
|
||||||
|
name: "$swiftApiModule",
|
||||||
|
dependencies: ["$headerBridgeModule"]
|
||||||
|
),
|
||||||
|
.target(
|
||||||
|
name: "$headerBridgeModule"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+222
@@ -0,0 +1,222 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport
|
||||||
|
|
||||||
|
import org.gradle.api.NamedDomainObjectContainer
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
|
import org.gradle.api.plugins.BasePlugin
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.gradle.api.tasks.TaskProvider
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.kotlinPluginLifecycle
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.future
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getOrCreate
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.konanDistribution
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.mapToFile
|
||||||
|
|
||||||
|
fun Project.registerSwiftExportTask(
|
||||||
|
framework: Framework,
|
||||||
|
): TaskProvider<*> {
|
||||||
|
return registerSwiftExportTask(
|
||||||
|
swiftApiModuleName = framework.baseNameProvider,
|
||||||
|
target = framework.target,
|
||||||
|
buildType = framework.buildType,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.registerSwiftExportTask(
|
||||||
|
swiftApiModuleName: Provider<String>,
|
||||||
|
target: KotlinNativeTarget,
|
||||||
|
buildType: NativeBuildType,
|
||||||
|
): TaskProvider<*> {
|
||||||
|
val taskNamePrefix = lowerCamelCaseName(
|
||||||
|
target.disambiguationClassifier ?: target.name,
|
||||||
|
buildType.getName(),
|
||||||
|
)
|
||||||
|
val mainCompilation = target.compilations.getByName("main")
|
||||||
|
|
||||||
|
val swiftExportTask = registerSwiftExportRun(
|
||||||
|
swiftApiModuleName = swiftApiModuleName,
|
||||||
|
taskNamePrefix = taskNamePrefix,
|
||||||
|
mainCompilation = mainCompilation,
|
||||||
|
)
|
||||||
|
val staticLibrary = registerSwiftExportCompilationAndGetBinary(
|
||||||
|
buildType = buildType,
|
||||||
|
compilations = target.compilations,
|
||||||
|
binaries = target.binaries,
|
||||||
|
mainCompilation = mainCompilation,
|
||||||
|
swiftExportTask = swiftExportTask,
|
||||||
|
)
|
||||||
|
|
||||||
|
val kotlinStaticLibraryName = staticLibrary.linkTaskProvider.flatMap { it.binary.baseNameProvider }
|
||||||
|
val swiftApiLibraryName = swiftApiModuleName.map { it + "Library" }
|
||||||
|
|
||||||
|
val syntheticBuildRoot = layout.buildDirectory.dir("${taskNamePrefix}SPMPackage")
|
||||||
|
val packageGenerationTask = registerPackageGeneration(
|
||||||
|
taskNamePrefix = taskNamePrefix,
|
||||||
|
swiftApiModuleName = swiftApiModuleName,
|
||||||
|
swiftApiLibraryName = swiftApiLibraryName,
|
||||||
|
kotlinStaticLibraryName = kotlinStaticLibraryName,
|
||||||
|
swiftExportTask = swiftExportTask,
|
||||||
|
staticLibrary = staticLibrary,
|
||||||
|
syntheticBuildRoot = syntheticBuildRoot,
|
||||||
|
)
|
||||||
|
val syntheticProjectBuild = registerSyntheticProjectBuild(
|
||||||
|
taskNamePrefix = taskNamePrefix,
|
||||||
|
swiftApiModuleName = swiftApiModuleName,
|
||||||
|
swiftApiLibraryName = swiftApiLibraryName,
|
||||||
|
syntheticBuildRoot = syntheticBuildRoot,
|
||||||
|
packageGenerationTask = packageGenerationTask,
|
||||||
|
)
|
||||||
|
|
||||||
|
return registerCopyTask(
|
||||||
|
taskNamePrefix = taskNamePrefix,
|
||||||
|
staticLibrary = staticLibrary,
|
||||||
|
packageGenerationTask = packageGenerationTask,
|
||||||
|
syntheticProjectBuild = syntheticProjectBuild,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.registerSwiftExportRun(
|
||||||
|
swiftApiModuleName: Provider<String>,
|
||||||
|
taskNamePrefix: String,
|
||||||
|
mainCompilation: KotlinCompilation<*>,
|
||||||
|
): TaskProvider<SwiftExportTask> {
|
||||||
|
val swiftExportTaskName = taskNamePrefix + "SwiftExport"
|
||||||
|
return locateOrRegisterTask<SwiftExportTask>(swiftExportTaskName) { task ->
|
||||||
|
val directoryProvider = project.future {
|
||||||
|
kotlinPluginLifecycle.await(KotlinPluginLifecycle.Stage.AfterFinaliseRefinesEdges)
|
||||||
|
mainCompilation.allKotlinSourceSets.flatMap {
|
||||||
|
it.kotlin.srcDirs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val outputs = layout.buildDirectory.dir(swiftExportTaskName)
|
||||||
|
val swiftIntermediates = outputs.map { it.dir("swiftIntermediates") }
|
||||||
|
val kotlinIntermediates = outputs.map { it.dir("kotlinIntermediates") }
|
||||||
|
|
||||||
|
// Input
|
||||||
|
task.sourceRoots.from(project.files(directoryProvider.getOrThrow()))
|
||||||
|
task.bridgeModuleName.set(swiftApiModuleName.map { "${it}Bridge" })
|
||||||
|
task.debugMode.set(true)
|
||||||
|
task.konanDistribution.set(konanDistribution.root)
|
||||||
|
|
||||||
|
// Output
|
||||||
|
task.swiftApiPath.set(swiftIntermediates.map { it.file("KotlinAPI.swift") })
|
||||||
|
task.headerBridgePath.set(swiftIntermediates.map { it.file("KotlinBridge.h") })
|
||||||
|
task.kotlinBridgePath.set(kotlinIntermediates.map { it.file("KotlinBridge.kt") })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerSwiftExportCompilationAndGetBinary(
|
||||||
|
buildType: NativeBuildType,
|
||||||
|
compilations: NamedDomainObjectContainer<KotlinNativeCompilation>,
|
||||||
|
binaries: KotlinNativeBinaryContainer,
|
||||||
|
mainCompilation: KotlinCompilation<*>,
|
||||||
|
swiftExportTask: TaskProvider<SwiftExportTask>,
|
||||||
|
): StaticLibrary {
|
||||||
|
val swiftExportCompilationName = "swiftExportMain"
|
||||||
|
val swiftExportBinary = "swiftExportBinary"
|
||||||
|
|
||||||
|
compilations.getOrCreate(
|
||||||
|
swiftExportCompilationName,
|
||||||
|
invokeWhenCreated = { swiftExportCompilation ->
|
||||||
|
swiftExportCompilation.associateWith(mainCompilation)
|
||||||
|
swiftExportCompilation.defaultSourceSet.kotlin.srcDir(swiftExportTask.map { it.kotlinBridgePath.getFile().parent })
|
||||||
|
swiftExportCompilation.compileTaskProvider.configure {
|
||||||
|
it.compilerOptions.optIn.add("kotlin.experimental.ExperimentalNativeApi")
|
||||||
|
}
|
||||||
|
|
||||||
|
binaries.staticLib(swiftExportBinary) { staticLib ->
|
||||||
|
staticLib.compilation = swiftExportCompilation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return binaries.getStaticLib(
|
||||||
|
swiftExportBinary,
|
||||||
|
buildType
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.registerPackageGeneration(
|
||||||
|
taskNamePrefix: String,
|
||||||
|
swiftApiModuleName: Provider<String>,
|
||||||
|
swiftApiLibraryName: Provider<String>,
|
||||||
|
kotlinStaticLibraryName: Provider<String>,
|
||||||
|
swiftExportTask: TaskProvider<SwiftExportTask>,
|
||||||
|
staticLibrary: StaticLibrary,
|
||||||
|
syntheticBuildRoot: Provider<Directory>,
|
||||||
|
): TaskProvider<GenerateSPMPackageFromSwiftExport> {
|
||||||
|
val spmPackageGenTaskName = taskNamePrefix + "GenerateSPMPackage"
|
||||||
|
val packageGenerationTask = locateOrRegisterTask<GenerateSPMPackageFromSwiftExport>(spmPackageGenTaskName) { task ->
|
||||||
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
|
task.description = "Generates $taskNamePrefix SPM Package"
|
||||||
|
|
||||||
|
// Input
|
||||||
|
task.swiftApiPath.set(swiftExportTask.flatMap { it.swiftApiPath })
|
||||||
|
task.headerBridgePath.set(swiftExportTask.flatMap { it.headerBridgePath })
|
||||||
|
task.headerBridgeModuleName.set(swiftExportTask.flatMap { it.bridgeModuleName })
|
||||||
|
task.libraryPath.set { staticLibrary.linkTaskProvider.flatMap { it.outputFile }.get() }
|
||||||
|
task.swiftLibraryName.set(swiftApiLibraryName)
|
||||||
|
task.kotlinLibraryName.set(kotlinStaticLibraryName)
|
||||||
|
task.swiftApiModuleName.set(swiftApiModuleName)
|
||||||
|
|
||||||
|
// Output
|
||||||
|
task.packagePath.set(syntheticBuildRoot.flatMap { root ->
|
||||||
|
swiftApiModuleName.map { root.dir(it) }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
packageGenerationTask.dependsOn(staticLibrary.linkTaskProvider)
|
||||||
|
return packageGenerationTask
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.registerSyntheticProjectBuild(
|
||||||
|
taskNamePrefix: String,
|
||||||
|
swiftApiModuleName: Provider<String>,
|
||||||
|
swiftApiLibraryName: Provider<String>,
|
||||||
|
syntheticBuildRoot: Provider<Directory>,
|
||||||
|
packageGenerationTask: TaskProvider<*>,
|
||||||
|
): TaskProvider<BuildSyntheticProjectWithSwiftExportPackage> {
|
||||||
|
val buildTaskName = taskNamePrefix + "BuildSyntheticProject"
|
||||||
|
val syntheticProjectBuild = locateOrRegisterTask<BuildSyntheticProjectWithSwiftExportPackage>(buildTaskName) { task ->
|
||||||
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
|
task.description = "Builds $taskNamePrefix synthetic project"
|
||||||
|
task.swiftApiModuleName.set(swiftApiModuleName)
|
||||||
|
task.swiftLibraryName.set(swiftApiLibraryName)
|
||||||
|
task.syntheticProjectDirectory.set(syntheticBuildRoot)
|
||||||
|
}
|
||||||
|
syntheticProjectBuild.dependsOn(packageGenerationTask)
|
||||||
|
return syntheticProjectBuild
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Project.registerCopyTask(
|
||||||
|
taskNamePrefix: String,
|
||||||
|
staticLibrary: StaticLibrary,
|
||||||
|
packageGenerationTask: TaskProvider<GenerateSPMPackageFromSwiftExport>,
|
||||||
|
syntheticProjectBuild: TaskProvider<BuildSyntheticProjectWithSwiftExportPackage>,
|
||||||
|
): TaskProvider<*> {
|
||||||
|
val copyTaskName = taskNamePrefix + "CopySyntheticProjectIntermediates"
|
||||||
|
val copyTask = locateOrRegisterTask<CopySwiftExportIntermediatesForConsumer>(copyTaskName) { task ->
|
||||||
|
task.group = BasePlugin.BUILD_GROUP
|
||||||
|
task.description = "Copy $taskNamePrefix synthetic project intermediates"
|
||||||
|
task.includeBridgeDirectory.convention(layout.file(packageGenerationTask.map { it.headerBridgeIncludePath }))
|
||||||
|
task.kotlinLibraryPath.convention(layout.file(staticLibrary.linkTaskProvider.flatMap { it.outputFile }))
|
||||||
|
task.syntheticLibraryPath.convention(layout.file(syntheticProjectBuild.flatMap { it.syntheticLibraryPath.mapToFile() }))
|
||||||
|
task.syntheticInterfacesPath.convention(layout.file(syntheticProjectBuild.flatMap { it.syntheticInterfacesPath.mapToFile() }))
|
||||||
|
}
|
||||||
|
copyTask.dependsOn(syntheticProjectBuild)
|
||||||
|
return copyTask
|
||||||
|
}
|
||||||
+79
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.file.ConfigurableFileCollection
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.file.RegularFileProperty
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.tasks.*
|
||||||
|
import org.gradle.work.DisableCachingByDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.internal.LogType
|
||||||
|
import org.jetbrains.kotlin.gradle.internal.processLogMessage
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
|
import org.jetbrains.kotlin.konan.target.Distribution
|
||||||
|
import org.jetbrains.kotlin.swiftexport.standalone.*
|
||||||
|
|
||||||
|
@DisableCachingByDefault(because = "Swift Export is experimental, so no caching for now")
|
||||||
|
abstract class SwiftExportTask : DefaultTask(), SwiftExportLogger {
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val bridgeModuleName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val debugMode: Property<Boolean>
|
||||||
|
|
||||||
|
@get:InputDirectory
|
||||||
|
@get:PathSensitive(PathSensitivity.ABSOLUTE)
|
||||||
|
abstract val konanDistribution: DirectoryProperty
|
||||||
|
|
||||||
|
@get:InputFiles
|
||||||
|
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||||
|
abstract val sourceRoots: ConfigurableFileCollection
|
||||||
|
|
||||||
|
@get:OutputFile
|
||||||
|
abstract val swiftApiPath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:OutputFile
|
||||||
|
abstract val headerBridgePath: RegularFileProperty
|
||||||
|
|
||||||
|
@get:OutputFile
|
||||||
|
abstract val kotlinBridgePath: RegularFileProperty
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun run() {
|
||||||
|
runSwiftExport(
|
||||||
|
input = SwiftExportInput(
|
||||||
|
sourceRoot = sourceRoots.filter { it.exists() }.map { it.toPath() }.first()
|
||||||
|
),
|
||||||
|
config = SwiftExportConfig(
|
||||||
|
settings = mapOf(
|
||||||
|
SwiftExportConfig.DEBUG_MODE_ENABLED to debugMode.getOrElse(false).toString(),
|
||||||
|
SwiftExportConfig.BRIDGE_MODULE_NAME to bridgeModuleName.getOrElse(SwiftExportConfig.DEFAULT_BRIDGE_MODULE_NAME),
|
||||||
|
),
|
||||||
|
this,
|
||||||
|
distribution = Distribution(konanDistribution.getFile().absolutePath),
|
||||||
|
),
|
||||||
|
output = SwiftExportOutput(
|
||||||
|
swiftApi = swiftApiPath.get().asFile.toPath(),
|
||||||
|
kotlinBridges = kotlinBridgePath.get().asFile.toPath(),
|
||||||
|
cHeaderBridges = headerBridgePath.get().asFile.toPath(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun report(severity: SwiftExportLogger.Severity, message: String) {
|
||||||
|
logger.processLogMessage(message, severity.logType())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun SwiftExportLogger.Severity.logType(): LogType = when (this) {
|
||||||
|
SwiftExportLogger.Severity.Info -> LogType.INFO
|
||||||
|
SwiftExportLogger.Severity.Warning -> LogType.WARN
|
||||||
|
SwiftExportLogger.Severity.Error -> LogType.ERROR
|
||||||
|
else -> LogType.LOG
|
||||||
|
}
|
||||||
+5
-1
@@ -31,6 +31,10 @@ import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction
|
|||||||
import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeConfigureBinariesSideEffect
|
import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeConfigureBinariesSideEffect
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.SetupEmbedAndSignAppleFrameworkTaskSideEffect
|
import org.jetbrains.kotlin.gradle.targets.native.SetupEmbedAndSignAppleFrameworkTaskSideEffect
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.native.internal.AddKotlinPlatformIntegersSupportLibrary
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizedCInteropApiElementsConfigurationsSetupAction
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupCInteropApiElementsConfigurationSideEffect
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupKotlinNativePlatformDependenciesForLegacyImport
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionSetupAction
|
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionSetupAction
|
||||||
import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask
|
import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask
|
||||||
|
|
||||||
@@ -148,4 +152,4 @@ private val Project.isJvm get() = kotlinJvmExtensionOrNull != null
|
|||||||
|
|
||||||
private val Project.isJs get() = kotlinExtensionOrNull is KotlinJsProjectExtension
|
private val Project.isJs get() = kotlinExtensionOrNull is KotlinJsProjectExtension
|
||||||
|
|
||||||
private val Project.isAndroid get() = kotlinExtension is KotlinAndroidProjectExtension
|
private val Project.isAndroid get() = kotlinExtension is KotlinAndroidProjectExtension
|
||||||
|
|||||||
@@ -0,0 +1,907 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 56;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
05F2823A27BFF52F00A213D9 /* Embed App Extensions */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 13;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
name = "Embed App Extensions";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
05F281E327BFA36E00A213D9 /* ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ios.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
05F2820027BFF4EB00A213D9 /* macos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "macos.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
05F2821827BFF52C00A213D9 /* watchos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "watchos.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
05F2824827BFF63B00A213D9 /* tvos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tvos.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
05F2824827BFF73B00A213D9 /* <SwiftExportModuleName> */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = <SwiftExportModuleName>; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
05F281E027BFA36E00A213D9 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
05F2825A27BFF65D00A213D9
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F281FD27BFF4EB00A213D9 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
05F2825A27BFF65D00A213D9
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F2824527BFF63B00A213D9 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
05F2825A27BFF65D00A213D9
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
05F281BA27BFA02500A213D9 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
05F2824827BFF73B00A213D9 /* <SwiftExportModuleName> */,
|
||||||
|
05F281C627BFA08C00A213D9 /* Products */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
05F281C627BFA08C00A213D9 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
05F281E327BFA36E00A213D9 /* ios.app */,
|
||||||
|
05F2820027BFF4EB00A213D9 /* macos.app */,
|
||||||
|
05F2821827BFF52C00A213D9 /* watchos.app */,
|
||||||
|
05F2824827BFF63B00A213D9 /* tvos.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
05F281E227BFA36E00A213D9 /* ios */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 05F281F927BFA37000A213D9 /* Build configuration list for PBXNativeTarget "ios" */;
|
||||||
|
buildPhases = (
|
||||||
|
05F281DF27BFA36E00A213D9 /* Sources */,
|
||||||
|
05F281E027BFA36E00A213D9 /* Frameworks */,
|
||||||
|
05F281E127BFA36E00A213D9 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "ios";
|
||||||
|
packageProductDependencies = (
|
||||||
|
05F2825A27BFF64D00A213D9 /* <SwiftExportModuleName> */,
|
||||||
|
);
|
||||||
|
productName = "ios";
|
||||||
|
productReference = 05F281E327BFA36E00A213D9 /* ios.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
05F281FF27BFF4EB00A213D9 /* macos */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 05F2821027BFF4ED00A213D9 /* Build configuration list for PBXNativeTarget "macos" */;
|
||||||
|
buildPhases = (
|
||||||
|
05F281FC27BFF4EB00A213D9 /* Sources */,
|
||||||
|
05F281FD27BFF4EB00A213D9 /* Frameworks */,
|
||||||
|
05F281FE27BFF4EB00A213D9 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "macos";
|
||||||
|
productName = "macos-app";
|
||||||
|
productReference = 05F2820027BFF4EB00A213D9 /* macos.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
05F2821727BFF52B00A213D9 /* watchos */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 05F2823B27BFF52F00A213D9 /* Build configuration list for PBXNativeTarget "watchos" */;
|
||||||
|
buildPhases = (
|
||||||
|
05F2821627BFF52B00A213D9 /* Resources */,
|
||||||
|
05F2823A27BFF52F00A213D9 /* Embed App Extensions */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "watchos";
|
||||||
|
productName = "watchos";
|
||||||
|
productReference = 05F2821827BFF52C00A213D9 /* watchos.app */;
|
||||||
|
productType = "com.apple.product-type.application.watchapp2";
|
||||||
|
};
|
||||||
|
05F2824727BFF63B00A213D9 /* tvos */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 05F2825A27BFF63D00A213D9 /* Build configuration list for PBXNativeTarget "tvos" */;
|
||||||
|
buildPhases = (
|
||||||
|
05F2824427BFF63B00A213D9 /* Sources */,
|
||||||
|
05F2824527BFF63B00A213D9 /* Frameworks */,
|
||||||
|
05F2824627BFF63B00A213D9 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "tvos";
|
||||||
|
productName = "tvos";
|
||||||
|
productReference = 05F2824827BFF63B00A213D9 /* tvos.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
05F281BB27BFA02500A213D9 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
BuildIndependentTargetsInParallel = 1;
|
||||||
|
LastUpgradeCheck = 1320;
|
||||||
|
TargetAttributes = {
|
||||||
|
05F281E227BFA36E00A213D9 = {
|
||||||
|
CreatedOnToolsVersion = 15.0;
|
||||||
|
};
|
||||||
|
05F281FF27BFF4EB00A213D9 = {
|
||||||
|
CreatedOnToolsVersion = 15.0;
|
||||||
|
};
|
||||||
|
05F2821727BFF52B00A213D9 = {
|
||||||
|
CreatedOnToolsVersion = 15.0;
|
||||||
|
};
|
||||||
|
05F2824727BFF63B00A213D9 = {
|
||||||
|
CreatedOnToolsVersion = 15.0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 05F281BE27BFA02500A213D9 /* Build configuration list for PBXProject "<SwiftExportModuleName>" */;
|
||||||
|
compatibilityVersion = "Xcode 15.0";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 05F281BA27BFA02500A213D9;
|
||||||
|
productRefGroup = 05F281C627BFA08C00A213D9 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
05F281E227BFA36E00A213D9 /* ios */,
|
||||||
|
05F281FF27BFF4EB00A213D9 /* macos */,
|
||||||
|
05F2821727BFF52B00A213D9 /* watchos */,
|
||||||
|
05F2824727BFF63B00A213D9 /* tvos */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
05F281E127BFA36E00A213D9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F281FE27BFF4EB00A213D9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F2821627BFF52B00A213D9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F2824627BFF63B00A213D9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
05F281DF27BFA36E00A213D9 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F281FC27BFF4EB00A213D9 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
05F2824427BFF63B00A213D9 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
05F281BF27BFA02500A213D9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
05F281C027BFA02500A213D9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
05F281FA27BFA37000A213D9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = "";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 15.2;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.ios";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
05F281FB27BFA37000A213D9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = "";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 15.2;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.ios";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
05F2821127BFF4ED00A213D9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = "macos-app/macos_app.entitlements";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
|
INFOPLIST_KEY_NSMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.macos-app";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
05F2821227BFF4ED00A213D9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = "macos-app/macos_app.entitlements";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
|
INFOPLIST_KEY_NSMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.macos-app";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
05F2823C27BFF52F00A213D9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
IBSC_MODULE = watchos_target_WatchKit_Extension;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "watchos";
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.watchos.watchkitapp";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = watchos;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = 4;
|
||||||
|
WATCHOS_DEPLOYMENT_TARGET = 8.3;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
05F2823D27BFF52F00A213D9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
IBSC_MODULE = watchos_target_WatchKit_Extension;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "watchos";
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.watchos.watchkitapp";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = watchos;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = 4;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WATCHOS_DEPLOYMENT_TARGET = 8.3;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
05F2825B27BFF63D00A213D9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.tvos";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 15.2;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
05F2825C27BFF63D00A213D9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.dummy.tvos";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 15.2;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
05F281BE27BFA02500A213D9 /* Build configuration list for PBXProject "<SwiftExportModuleName>" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
05F281BF27BFA02500A213D9 /* Debug */,
|
||||||
|
05F281C027BFA02500A213D9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
05F281F927BFA37000A213D9 /* Build configuration list for PBXNativeTarget "ios" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
05F281FA27BFA37000A213D9 /* Debug */,
|
||||||
|
05F281FB27BFA37000A213D9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
05F2821027BFF4ED00A213D9 /* Build configuration list for PBXNativeTarget "macos" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
05F2821127BFF4ED00A213D9 /* Debug */,
|
||||||
|
05F2821227BFF4ED00A213D9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
05F2823B27BFF52F00A213D9 /* Build configuration list for PBXNativeTarget "watchos" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
05F2823C27BFF52F00A213D9 /* Debug */,
|
||||||
|
05F2823D27BFF52F00A213D9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
05F2825A27BFF63D00A213D9 /* Build configuration list for PBXNativeTarget "tvos" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
05F2825B27BFF63D00A213D9 /* Debug */,
|
||||||
|
05F2825C27BFF63D00A213D9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
05F2825A27BFF64D00A213D9 /* LocalLibrary */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
productName = <SwiftExportModuleName>Library;
|
||||||
|
};
|
||||||
|
/* End XCSwiftPackageProductDependency section */
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
05F2825A27BFF65D00A213D9 /* LocalLibrary in Frameworks */ = {isa = PBXBuildFile; productRef = 05F2825A27BFF64D00A213D9 /* LocalLibrary */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
};
|
||||||
|
rootObject = 05F281BB27BFA02500A213D9 /* Project object */;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user