diff --git a/build.gradle.kts b/build.gradle.kts index a19fc2b..74e7f56 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,6 @@ allprojects { repositories { google() mavenCentral() - jcenter() } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 15b61a2..88cd14f 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -2,5 +2,5 @@ plugins { `kotlin-dsl` } repositories { - jcenter() + mavenCentral() } \ No newline at end of file diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index f1613c6..dcfd55d 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -4,8 +4,8 @@ object Versions { } object BuildPluginsVersion { - const val DETEKT = "1.15.0" - const val KOTLIN = "1.4.30" + const val DETEKT = "1.23.6" + const val KOTLIN = "2.0.0" const val KTLINT = "10.0.0" const val VERSIONS_PLUGIN = "0.36.0" } diff --git a/example/build.gradle.kts b/example/build.gradle.kts index dad4e57..1af5ee1 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -14,13 +14,40 @@ kotlin { } spm { - ios("11") { + ios("13") { dependencies { packages( url = "https://github.com/AFNetworking/AFNetworking.git", - version = "4.0.0", + version = "4.0.1", name = "AFNetworking" ) + /* TODO: Support building target dependencies? i.e `FirebaseCore` & `FirebaseSharedSwift` + packages( + url = "https://github.com/firebase/firebase-ios-sdk.git", + version = "10.21.0", + name = "FirebaseRemoteConfig" + ) + */ + packages( + url = "https://github.com/Alamofire/Alamofire.git", + version = "5.2.0", + name = "Alamofire" + ) + packages( + url = "https://github.com/malcommac/SwiftDate.git", + version = "7.0.0", + name = "SwiftDate" + ) + packages( + url = "https://github.com/CombineCommunity/CombineExt.git", + version = "1.8.1", + name = "CombineExt" + ) + packages( + url = "https://github.com/jozsef-vesza/AVFoundation-Combine.git", + version = "0.0.3", + name = "AVFoundationCombine" + ) } } } diff --git a/example/src/iosX64Main/kotlin/Network.kt b/example/src/iosX64Main/kotlin/Network.kt index 89f05ed..2016ae6 100644 --- a/example/src/iosX64Main/kotlin/Network.kt +++ b/example/src/iosX64Main/kotlin/Network.kt @@ -1,3 +1,4 @@ +import kotlinx.cinterop.ExperimentalForeignApi import platform.Foundation.NSError import platform.Foundation.NSProgress import platform.Foundation.NSURLSessionDataTask @@ -8,10 +9,13 @@ import spm.AFNetworking.AFNetworkReachabilityStatusNotReachable actual class Network actual constructor() { actual fun hello(): String = "Hello iOS from Kotlin" + @OptIn(ExperimentalForeignApi::class) fun manager(): String = AFHTTPSessionManager.manager().toString() + @OptIn(ExperimentalForeignApi::class) fun status() = AFNetworkReachabilityStatusNotReachable + @OptIn(ExperimentalForeignApi::class) fun restGet(): String { val manager = AFHTTPSessionManager.manager() val url = "https://httpbin.org/get" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 14e30f7..0d18421 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugin-build/build.gradle.kts b/plugin-build/build.gradle.kts index 72ec334..1c6f8b8 100644 --- a/plugin-build/build.gradle.kts +++ b/plugin-build/build.gradle.kts @@ -16,7 +16,6 @@ allprojects { repositories { google() mavenCentral() - jcenter() } apply { diff --git a/plugin-build/buildSrc/build.gradle.kts b/plugin-build/buildSrc/build.gradle.kts index 15b61a2..88cd14f 100644 --- a/plugin-build/buildSrc/build.gradle.kts +++ b/plugin-build/buildSrc/build.gradle.kts @@ -2,5 +2,5 @@ plugins { `kotlin-dsl` } repositories { - jcenter() + mavenCentral() } \ No newline at end of file diff --git a/plugin-build/buildSrc/src/main/java/Dependencies.kt b/plugin-build/buildSrc/src/main/java/Dependencies.kt index 826a589..61c030c 100644 --- a/plugin-build/buildSrc/src/main/java/Dependencies.kt +++ b/plugin-build/buildSrc/src/main/java/Dependencies.kt @@ -4,8 +4,8 @@ object Versions { } object BuildPluginsVersion { - const val DETEKT = "1.15.0" - const val KOTLIN = "1.4.30" + const val DETEKT = "1.23.6" + const val KOTLIN = "2.0.0" const val KTLINT = "10.0.0" const val PLUGIN_PUBLISH = "1.0.0" const val VERSIONS_PLUGIN = "0.36.0" diff --git a/plugin-build/gradle/wrapper/gradle-wrapper.properties b/plugin-build/gradle/wrapper/gradle-wrapper.properties index 622ab64..0d18421 100644 --- a/plugin-build/gradle/wrapper/gradle-wrapper.properties +++ b/plugin-build/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugin-build/plugin/build.gradle.kts b/plugin-build/plugin/build.gradle.kts index 9012be6..2ae1864 100644 --- a/plugin-build/plugin/build.gradle.kts +++ b/plugin-build/plugin/build.gradle.kts @@ -1,7 +1,7 @@ import BuildPluginsVersion.KOTLIN plugins { - kotlin("jvm") + kotlin("jvm")// version BuildPluginsVersion.KOTLIN apply false id("java-gradle-plugin") id("maven-publish") id("com.gradle.plugin-publish") @@ -21,18 +21,23 @@ dependencies { testImplementation(TestingLib.JUNIT) } - +/* java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } +kotlin { + jvmToolchain(17) +} +*/ gradlePlugin { plugins { create(PluginCoordinates.ID) { id = PluginCoordinates.ID displayName = PluginBundle.DISPLAY_NAME description = PluginBundle.DESCRIPTION + tags = PluginBundle.TAGS implementationClass = PluginCoordinates.IMPLEMENTATION_CLASS version = PluginCoordinates.VERSION } @@ -40,10 +45,9 @@ gradlePlugin { } // Configuration Block for the Plugin Marker artifact on Plugin Central -pluginBundle { - website = PluginBundle.WEBSITE - vcsUrl = PluginBundle.VCS - tags = PluginBundle.TAGS +gradlePlugin { + website = PluginBundle.WEBSITE + vcsUrl = PluginBundle.VCS } publishing { diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/SwiftPackageBuildDirs.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/SwiftPackageBuildDirs.kt index e16ec14..5eb8ebc 100644 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/SwiftPackageBuildDirs.kt +++ b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/SwiftPackageBuildDirs.kt @@ -11,14 +11,14 @@ class SwiftPackageBuildDirs(private val project: Project) { private val utils: File get() = project.buildDir.resolve("spmUtils") + fun derivedDataPath(): File = root.resolve("derivedData") + fun platformRoot(family: Family): File = root.resolve(family.name) fun packageSwiftFile(family: Family): File = platformRoot(family).resolve(PACKAGE_SWIFT_FILE) fun packageResolvedFile(family: Family): File = platformRoot(family).resolve(PACKAGE_SWIFT_RESOLVED_FILE) - fun xcodeProjectFile(family: Family): File = platformRoot(family).resolve("${family}.$XCODEPROJECT_EXTENSION") - fun releaseDir(family: Family): File = platformRoot(family).resolve(BUILD_DIRECTORY).resolve(family.toReleaseSdk()) fun defsDir(family: Family): File = platformRoot(family).resolve(DEF_DIRECTORY) diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/entity/impl/DependencyManager.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/entity/impl/DependencyManager.kt index fb2305d..546bbcf 100644 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/entity/impl/DependencyManager.kt +++ b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/entity/impl/DependencyManager.kt @@ -35,10 +35,16 @@ class DependencyManager { @Internal override fun getName(): String = dependencyName + @get:Internal + val packageName: String + get() = url + .subSequence(url.lastIndexOf("/") + 1, url.length - ".git".length) + .toString() + fun convertToPackageContent(): String { return """ .package( - name: "$dependencyName", + name: "$packageName", url: "$url", from: "$version" ) diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/plugin/KotlinSpmPlugin.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/plugin/KotlinSpmPlugin.kt index 710e9dd..0fb8e4e 100644 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/plugin/KotlinSpmPlugin.kt +++ b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/plugin/KotlinSpmPlugin.kt @@ -27,7 +27,6 @@ abstract class KotlinSpmPlugin : Plugin { // Integration Swift Package dependency to Kotlin registerInitializeSwiftPackageProjectTask(project, availablePlatforms) registerCreatePackageSwiftFileTask(project, availablePlatforms) - registerGenerateXcodeTask(project, availablePlatforms) registerBuildFrameworksTask(project, availablePlatforms) registerGenerateDefFileTask(project, availablePlatforms) registerConfigureLinkerOptionsTask(project, availablePlatforms, multiplatformExtension) @@ -59,11 +58,17 @@ abstract class KotlinSpmPlugin : Plugin { platforms: NamedDomainObjectContainer, ) { platforms.all { platform -> + val cleanSwiftPackageTask = project.tasks.named( + "$CLEAN_SWIFT_PACKAGE_PROJECT_TASK_NAME${platform.family}", + CleanSwiftPackageProjectTask::class.java + ) + project.tasks.register( "$INITIALIZE_SWIFT_PACKAGE_PROJECT_TASK_NAME${platform.family}", InitializeSwiftPackageProjectTask::class.java ) { task -> task.platformFamily.set(platform.family) + task.dependsOn(cleanSwiftPackageTask) } } } @@ -91,7 +96,7 @@ abstract class KotlinSpmPlugin : Plugin { } } - private fun registerGenerateXcodeTask( + private fun registerBuildFrameworksTask( project: Project, platforms: NamedDomainObjectContainer, ) { @@ -102,40 +107,17 @@ abstract class KotlinSpmPlugin : Plugin { ) project.tasks.register( - "$GENERATE_XCODE_TASK_NAME${platform.family}", - GenerateXcodeTask::class.java + "$BUILD_FRAMEWORK_TASK_NAME${platform.family}", + BuildFrameworksTask::class.java ) { task -> task.platformFamily.set(platform.family) + task.platformDependencies.set(platform.dependenciesContainer.map { it.name }) task.dependsOn(createPackageSwiftFileTask) } } } - private fun registerBuildFrameworksTask( - project: Project, - platforms: NamedDomainObjectContainer, - ) { - platforms.all { platform -> - val generateXcodeTask = project.tasks.named( - "$GENERATE_XCODE_TASK_NAME${platform.family}", - GenerateXcodeTask::class.java - ) - - platform.dependenciesContainer.all { dependency -> - project.tasks.register( - "$BUILD_FRAMEWORK_TASK_NAME${platform.family}${dependency.dependencyName}", - BuildFrameworksTask::class.java - ) { task -> - task.platformFamily.set(platform.family) - task.platformDependency.set(dependency.dependencyName) - - task.dependsOn(generateXcodeTask) - } - } - } - } - private fun registerGenerateDefFileTask( project: Project, platforms: NamedDomainObjectContainer, @@ -143,7 +125,7 @@ abstract class KotlinSpmPlugin : Plugin { platforms.all { platform -> platform.dependenciesContainer.all { dependency -> val buildFrameworkTask = project.tasks.named( - "$BUILD_FRAMEWORK_TASK_NAME${platform.family}${dependency.dependencyName}", + "$BUILD_FRAMEWORK_TASK_NAME${platform.family}", BuildFrameworksTask::class.java ) @@ -172,7 +154,7 @@ abstract class KotlinSpmPlugin : Plugin { platform.dependenciesContainer.all { dependency -> val buildFrameworkTask = project.tasks.named( - "$BUILD_FRAMEWORK_TASK_NAME${platform.family}${dependency.dependencyName}", + "$BUILD_FRAMEWORK_TASK_NAME${platform.family}", BuildFrameworksTask::class.java ) diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/BuildFrameworksTask.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/BuildFrameworksTask.kt index 05909a4..5338c83 100644 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/BuildFrameworksTask.kt +++ b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/BuildFrameworksTask.kt @@ -1,20 +1,30 @@ package com.doublesymmetry.kotlin.native.spm.tasks +import com.doublesymmetry.kotlin.native.spm.entity.impl.DependencyManager.Package import com.doublesymmetry.kotlin.native.spm.plugin.KotlinSpmPlugin import com.doublesymmetry.kotlin.native.spm.swiftPackageBuildDirs +import groovy.transform.EqualsAndHashCode +import org.apache.tools.ant.taskdefs.Pack +import org.gradle.api.DefaultTask +import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.jetbrains.kotlin.konan.target.Family import java.io.File +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.StandardCopyOption @CacheableTask -abstract class BuildFrameworksTask : Exec() { +abstract class BuildFrameworksTask : DefaultTask() { + init { /** - * Task like a command: `xcodebuild build --target ${TARGET_NAME}` + * Task description: Packages headers, modules, and binaries into a Framework. */ - description = "Build the target in the build root" + description = + "Build and assemble a framework from the Swift package, including headers and modules." group = KotlinSpmPlugin.TASK_GROUP } @@ -22,35 +32,176 @@ abstract class BuildFrameworksTask : Exec() { val platformFamily: Property = project.objects.property(Family::class.java) @Input - val platformDependency: Property = project.objects.property(String::class.java) + val platformDependencies: ListProperty = project.objects.listProperty(String::class.java) @get:OutputDirectory val outputFrameworkDirectory: Provider get() = platformFamily.map { - project.swiftPackageBuildDirs.releaseDir(it).resolve("${platformDependency.get()}.framework") + project.swiftPackageBuildDirs.releaseDir(it) + .resolve("Output") } - override fun exec() { + @TaskAction + fun buildXCFramework() { + val configuration = "Release" + val sdk = platformFamily.get().toSdk() + + buildFramework(configuration, sdk) + platformDependencies.get().forEach { dependency -> + copyBinary(dependency, configuration, sdk) + copySwiftModules(dependency, configuration) + copyHeaders(dependency, configuration) + copyResources(dependency) + createSymbolicLinks(dependency) + } + } + + private fun buildFramework(configuration: String, sdk: String) { + val packageDirectory = project.swiftPackageBuildDirs.platformRoot(platformFamily.get()) val family = platformFamily.get() + val familyPlatform = platformFamily.get().toPlatform() + val outputDirectory = outputFrameworkDirectory.get() + + project.exec { + it.workingDir = packageDirectory + it.commandLine( + "xcodebuild", "build", + "-scheme", family, + "-destination", "generic/platform=$familyPlatform", + "-sdk", sdk, + "-configuration", configuration, + "-derivedDataPath", project.swiftPackageBuildDirs.derivedDataPath(), + "-quiet", + "SKIP_INSTALL=NO", + "BUILD_LIBRARY_FOR_DISTRIBUTION=YES", + "OTHER_SWIFT_FLAGS=-no-verify-emitted-module-interface", + "SYMROOT=${outputDirectory}" + ) + } + } + + private fun copyBinary(dependency: String, configuration: String, sdk: String) { + val binaryPath = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("Output/Release-iphonesimulator/${dependency}.o") + val outputBinaryDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework/Versions/A") + outputBinaryDir.mkdirs() - workingDir = project.swiftPackageBuildDirs.platformRoot(family) - commandLine( - "xcodebuild", "build", - "-project", "${family.name}.xcodeproj", - "-target", platformDependency.get(), - "-sdk", family.toSdk(), - "-configuration", "Release", - "-quiet" - ) + if (binaryPath.exists()) { + binaryPath.copyTo(File(outputBinaryDir, dependency), overwrite = true) + } else { + // TODO: Check if SPM package contained a precompiled .framework i.e `GoogleCast.framework` + throw RuntimeException("Binary not found at ${binaryPath.path}") + } + } + + private fun copySwiftModules(dependency: String, configuration: String) { + val releaseDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("Output/Release-iphonesimulator") + val swiftmoduleName = "${dependency}.swiftmodule" + val swiftmodulePath = findSwiftModuleDirectory(releaseDir.toPath(), swiftmoduleName) - super.exec() + val outputModulesDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework/Versions/A/Modules") + outputModulesDir.mkdirs() + + if (swiftmodulePath != null) { + swiftmodulePath.toFile().copyRecursively(outputModulesDir.resolve(swiftmoduleName), overwrite = true) + } else { + createModuleMap(outputModulesDir.toPath(), dependency) + } } - private fun Family.toSdk() : String { - return when(this) { + private fun createModuleMap(outputModulesDir: Path, dependency: String) { + val moduleMapContent = """ + framework module $dependency { + umbrella "Headers" + export * + module * { export * } + } + """.trimIndent() + + val moduleMapFile = outputModulesDir.resolve("module.modulemap").toFile() + moduleMapFile.writeText(moduleMapContent) + } + + private fun copyHeaders(dependency: String, configuration: String) { + val headerPath = project.swiftPackageBuildDirs.derivedDataPath() // TODO: Use `toReleaseSdk`: + .resolve("Build/Intermediates.noindex/${dependency}.build/${configuration}-iphonesimulator/${dependency}.build/Objects-normal/arm64/${dependency}-Swift.h") + val outputHeadersDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework/Versions/A/Headers") + outputHeadersDir.mkdirs() + + if (headerPath.exists()) { + headerPath.copyTo(File(outputHeadersDir, "${dependency}-Swift.h"), overwrite = true) + } else { + project.swiftPackageBuildDirs.derivedDataPath() // TODO: Support passing `packageName` + .resolve("SourcePackages/checkouts/${dependency}/${dependency}") + .walkTopDown() + .filter { it.isFile && it.extension == "h" } + .forEach { headerFile -> + val targetFile = outputHeadersDir.resolve(headerFile.name) + headerFile.copyTo(targetFile, overwrite = true) + } + } + } + + private fun findSwiftModuleDirectory(basePath: Path, moduleName: String): Path? { + return Files.walk(basePath) + .filter { Files.isDirectory(it) && it.fileName.toString() == moduleName } + .findFirst() + .orElse(null) + } + + private fun copyResources(dependency: String) { + // This function is left as a placeholder since the original logic did not provide specifics. + // Adjust the implementation here if you need to copy specific resources. + val derivedDataPath = project.swiftPackageBuildDirs.derivedDataPath() + val family = platformFamily.get() + val bundleDir = File(derivedDataPath, "${family}_${family}.bundle") + if (bundleDir.exists()) { + bundleDir.copyRecursively( + project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework"), + overwrite = true + ) + } + } + + private fun createSymbolicLinks(dependency: String) { + val baseDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework/Versions") + val currentLink = baseDir.resolve("Current") + val aDir = baseDir.resolve("A") + + Files.createSymbolicLink(currentLink.toPath(), aDir.toPath()) + + val frameworkDir = project.swiftPackageBuildDirs.releaseDir(platformFamily.get()) + .resolve("${dependency}.framework") + val binaryLink = frameworkDir.resolve(dependency) + val headersLink = frameworkDir.resolve("Headers") + val modulesLink = frameworkDir.resolve("Modules") + val resourcesLink = frameworkDir.resolve("Resources") + + Files.createSymbolicLink(binaryLink.toPath(), aDir.resolve(dependency).toPath()) + Files.createSymbolicLink(headersLink.toPath(), aDir.resolve("Headers").toPath()) + Files.createSymbolicLink(modulesLink.toPath(), aDir.resolve("Modules").toPath()) + Files.createSymbolicLink(resourcesLink.toPath(), aDir.resolve("Resources").toPath()) + } + + private fun Family.toSdk(): String { + return when (this) { Family.OSX -> "macosx" Family.IOS -> "iphonesimulator" else -> "" } } + + private fun Family.toPlatform(): String { + return when (this) { + Family.OSX -> "Mac" + Family.IOS -> "iOS Simulator" + else -> "Unknown" + } + } } diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/CreatePackageSwiftFileTask.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/CreatePackageSwiftFileTask.kt index 67db0c4..3aeed70 100644 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/CreatePackageSwiftFileTask.kt +++ b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/CreatePackageSwiftFileTask.kt @@ -40,11 +40,11 @@ abstract class CreatePackageSwiftFileTask : DefaultTask() { val dependencyArea = platformDependencies .toList() - .joinToString(", ") { it.convertToPackageContent() } + .joinToString(",\n") { it.convertToPackageContent() } val targetDependencyArea = platformDependencies .toList() - .joinToString(", ") { "\"${it.dependencyName}\"" } + .joinToString(",\n") { ".productItem(name: \"${it.dependencyName}\", package: \"${it.packageName}\")" } project.swiftPackageBuildDirs.platformRoot(family) .resolve("Package.swift") diff --git a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/GenerateXcodeTask.kt b/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/GenerateXcodeTask.kt deleted file mode 100644 index 5145bcc..0000000 --- a/plugin-build/plugin/src/main/java/com/doublesymmetry/kotlin/native/spm/tasks/GenerateXcodeTask.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.doublesymmetry.kotlin.native.spm.tasks - -import com.doublesymmetry.kotlin.native.spm.plugin.KotlinSpmPlugin -import com.doublesymmetry.kotlin.native.spm.swiftPackageBuildDirs -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import org.jetbrains.kotlin.konan.target.Family -import java.io.File - -@CacheableTask -abstract class GenerateXcodeTask : Exec() { - init { - /** - * Task like a command: `swift package generate-xcodeproj` - */ - description = "Generate Xcode project" - group = KotlinSpmPlugin.TASK_GROUP - } - - @Input - val platformFamily: Property = project.objects.property(Family::class.java) - - @get:OutputFile - val outputPackageResolvedFile: Provider - get() = platformFamily.map { - project.swiftPackageBuildDirs.packageResolvedFile(it) - } - - @get:OutputDirectory - val outputXcodeProjectFile: Provider - get() = platformFamily.map { - project.swiftPackageBuildDirs.xcodeProjectFile(it) - } - - override fun exec() { - workingDir = project.swiftPackageBuildDirs.platformRoot(platformFamily.get()) - commandLine("swift", "package", "generate-xcodeproj") - - super.exec() - } -} diff --git a/plugin-build/plugin/src/main/resources/Package.swift b/plugin-build/plugin/src/main/resources/Package.swift index 91b1676..3a97a6c 100644 --- a/plugin-build/plugin/src/main/resources/Package.swift +++ b/plugin-build/plugin/src/main/resources/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.6 import PackageDescription @@ -10,6 +10,7 @@ let package = Package( products: [ .library( name: "$PLATFORM_NAME", + // type: .dynamic, targets: ["$PLATFORM_NAME"]), ], dependencies: [ diff --git a/plugin-build/settings.gradle.kts b/plugin-build/settings.gradle.kts index ea2ba78..d21e0d1 100644 --- a/plugin-build/settings.gradle.kts +++ b/plugin-build/settings.gradle.kts @@ -2,7 +2,6 @@ pluginManagement { repositories { gradlePluginPortal() mavenCentral() - jcenter() } } diff --git a/settings.gradle.kts b/settings.gradle.kts index a3a3835..1af4a09 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,7 +2,6 @@ pluginManagement { repositories { gradlePluginPortal() mavenCentral() - jcenter() } }