diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index 29a997da4b1..607dc390545 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -136,6 +136,14 @@ internal val PodBuildSettingsProperties.frameworkSearchPaths: List return frameworkPathsSelfIncluding } +//Make frameworks headers discoverable with any syntax (quotes, brackets, @import, etc.) +//https://github.com/CocoaPods/CocoaPods/blob/d18f49392c5e9ed9a2cdcb2ee89391cf7690ee5d/lib/cocoapods/target/build_settings.rb#L1188 +private val PodBuildSettingsProperties.frameworkHeadersSearchPaths: List + get() = mutableListOf().apply { + headerPaths?.let { addAll(it.splitQuotedArgs()) } + publicHeadersFolderPath?.let { add("${configurationBuildDir.trimQuotes()}/${it.trimQuotes()}") } + } + /** * Splits a string using a whitespace characters as delimiters. * Ignores whitespaces in quotes and drops quotes, e.g. a string @@ -340,10 +348,8 @@ open class KotlinCocoapodsPlugin : Plugin { // Here and below we need to split such paths taking this into account. interop.compilerOpts.addAll(args.splitQuotedArgs()) } - podBuildSettings.headerPaths?.let { args -> - interop.compilerOpts.addAll(args.splitQuotedArgs().map { "-I$it" }) - } + interop.compilerOpts.addAll(podBuildSettings.frameworkHeadersSearchPaths.map { "-I$it" }) interop.compilerOpts.addAll(podBuildSettings.frameworkSearchPaths.map { "-F$it" }) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt index 95cb5badbcf..99346762591 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt @@ -608,6 +608,7 @@ data class PodBuildSettingsProperties( internal val podsTargetSrcRoot: String, internal val cflags: String? = null, internal val headerPaths: String? = null, + internal val publicHeadersFolderPath: String? = null, internal val frameworkPaths: String? = null ) { @@ -627,6 +628,7 @@ data class PodBuildSettingsProperties( appendText("$PODS_TARGET_SRCROOT=$podsTargetSrcRoot\n") cflags?.let { appendText("$OTHER_CFLAGS=$it\n") } headerPaths?.let { appendText("$HEADER_SEARCH_PATHS=$it\n") } + publicHeadersFolderPath?.let { appendText("$PUBLIC_HEADERS_FOLDER_PATH=$it\n") } frameworkPaths?.let { appendText("$FRAMEWORK_SEARCH_PATHS=$it") } } } @@ -638,6 +640,7 @@ data class PodBuildSettingsProperties( const val PODS_TARGET_SRCROOT = "PODS_TARGET_SRCROOT" const val OTHER_CFLAGS = "OTHER_CFLAGS" const val HEADER_SEARCH_PATHS = "HEADER_SEARCH_PATHS" + const val PUBLIC_HEADERS_FOLDER_PATH = "PUBLIC_HEADERS_FOLDER_PATH" const val FRAMEWORK_SEARCH_PATHS = "FRAMEWORK_SEARCH_PATHS" fun readSettingsFromReader(reader: Reader): PodBuildSettingsProperties { @@ -650,6 +653,7 @@ data class PodBuildSettingsProperties( readProperty(PODS_TARGET_SRCROOT), readNullableProperty(OTHER_CFLAGS), readNullableProperty(HEADER_SEARCH_PATHS), + readNullableProperty(PUBLIC_HEADERS_FOLDER_PATH), readNullableProperty(FRAMEWORK_SEARCH_PATHS) ) }