Wizard: fix not created by default xcode framework in shared module
the runForXcode task is not generating xcode framework if there is no source files in shared module
This commit is contained in:
+2
@@ -0,0 +1,2 @@
|
||||
// This file is needed because the packForXcode task requires the source code to be present to generate the XCode framework.
|
||||
// Feel free to remove this file as soon as you have created some code in this source set.
|
||||
+5
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||
|
||||
interface NativeTargetConfigurator : TargetConfigurator {
|
||||
val isDesktopTarget: Boolean
|
||||
val isIosTarget: Boolean
|
||||
}
|
||||
|
||||
class RealNativeTargetConfigurator private constructor(
|
||||
@@ -25,6 +26,9 @@ class RealNativeTargetConfigurator private constructor(
|
||||
override val isDesktopTarget: Boolean
|
||||
get() = moduleSubType.isNativeDesktop
|
||||
|
||||
override val isIosTarget: Boolean
|
||||
get() = moduleSubType.isIOS
|
||||
|
||||
override fun createInnerTargetIrs(reader: Reader, module: Module): List<BuildSystemIR> = if (moduleSubType.isIOS) irsList {
|
||||
"binaries" {
|
||||
"framework" {
|
||||
@@ -45,6 +49,7 @@ class RealNativeTargetConfigurator private constructor(
|
||||
object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenceTargetConfigurator {
|
||||
override val moduleType = ModuleType.native
|
||||
override val isDesktopTarget: Boolean = true
|
||||
override val isIosTarget: Boolean = false
|
||||
|
||||
@NonNls
|
||||
override val id = "nativeForCurrentSystem"
|
||||
|
||||
+8
-1
@@ -124,7 +124,14 @@ class ModulesToIRsConverter(
|
||||
|
||||
with(dependencyType) {
|
||||
@Suppress("DEPRECATION")
|
||||
with(unsafeSettingWriter) { runArbitraryTask(module, to, data).ensure() }
|
||||
with(unsafeSettingWriter) {
|
||||
runArbitraryTask(
|
||||
module,
|
||||
to,
|
||||
to.path.considerSingleRootModuleMode(data.isSingleRootModuleMode).asPath(),
|
||||
data
|
||||
).ensure()
|
||||
}
|
||||
irsToAddToModules.getOrPut(to) { mutableListOf() } += createToIRs(module, to, data).get()
|
||||
createDependencyIrs(module, to, data)
|
||||
}
|
||||
|
||||
+33
-7
@@ -17,7 +17,11 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.isIOS
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
import kotlin.collections.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||
import java.nio.file.Path
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
sealed class ModuleDependencyType(
|
||||
@@ -25,7 +29,11 @@ sealed class ModuleDependencyType(
|
||||
val to: KClass<out ModuleConfigurator>
|
||||
) {
|
||||
fun accepts(from: Module, to: Module) =
|
||||
this.from.isInstance(from.configurator) && this.to.isInstance(to.configurator)
|
||||
this.from.isInstance(from.configurator)
|
||||
&& this.to.isInstance(to.configurator)
|
||||
&& additionalAcceptanceChecker(from, to)
|
||||
|
||||
open fun additionalAcceptanceChecker(from: Module, to: Module) = true
|
||||
|
||||
open fun createDependencyIrs(from: Module, to: Module, data: ModulesToIrConversionData): List<BuildSystemIR> {
|
||||
val path = to.path
|
||||
@@ -42,7 +50,12 @@ sealed class ModuleDependencyType(
|
||||
}.asSingletonList()
|
||||
}
|
||||
|
||||
open fun SettingsWriter.runArbitraryTask(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<Unit> =
|
||||
open fun SettingsWriter.runArbitraryTask(
|
||||
from: Module,
|
||||
to: Module,
|
||||
toModulePath: Path,
|
||||
data: ModulesToIrConversionData
|
||||
): TaskResult<Unit> =
|
||||
UNIT_SUCCESS
|
||||
|
||||
open fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> =
|
||||
@@ -68,18 +81,31 @@ sealed class ModuleDependencyType(
|
||||
override fun SettingsWriter.runArbitraryTask(
|
||||
from: Module,
|
||||
to: Module,
|
||||
toModulePath: Path,
|
||||
data: ModulesToIrConversionData
|
||||
): TaskResult<Unit> = withSettingsOf(from) {
|
||||
IOSSinglePlatformModuleConfigurator.dependentModule.reference
|
||||
.setValue(IOSSinglePlatformModuleConfigurator.DependentModuleReference(to))
|
||||
UNIT_SUCCESS
|
||||
val dummyFilePath = Defaults.SRC_DIR / "${to.iosTargetSafe()!!.name}Main" / to.configurator.kotlinDirectoryName / "dummyFile.kt"
|
||||
TemplatesPlugin::addFileTemplate.execute(
|
||||
FileTemplate(
|
||||
FileTemplateDescriptor("ios/dummyFile.kt", dummyFilePath),
|
||||
projectPath / toModulePath
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun additionalAcceptanceChecker(from: Module, to: Module): Boolean =
|
||||
to.iosTargetSafe() != null
|
||||
|
||||
private fun Module.iosTargetSafe(): Module? = subModules.firstOrNull { module ->
|
||||
module.configurator.safeAs<NativeTargetConfigurator>()?.isIosTarget == true
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
override fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> {
|
||||
val iosTargetName = to.subModules.firstOrNull { module ->
|
||||
module.configurator.safeAs<SimpleTargetConfigurator>()?.moduleSubType?.isIOS == true
|
||||
}?.name ?: return Failure(InvalidModuleDependencyError(from, to, "Module ${to.name} should contain at least one iOS target"))
|
||||
val iosTargetName = to.iosTargetSafe()?.name
|
||||
?: return Failure(InvalidModuleDependencyError(from, to, "Module ${to.name} should contain at least one iOS target"))
|
||||
|
||||
|
||||
return irsList {
|
||||
|
||||
+3
@@ -9,11 +9,14 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import java.nio.file.Paths
|
||||
|
||||
inline class ModulePath(val parts: List<String>) {
|
||||
constructor(path: String) : this(path.trim().split('.'))
|
||||
|
||||
fun asString(separator: String = ".") = parts.joinToString(separator)
|
||||
fun asPath() = Paths.get(parts.first(), *parts.subList(1, parts.size).toTypedArray())
|
||||
|
||||
override fun toString(): String = asString()
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user