podspec user_target_xcconfig add GCC_PREPROCESSOR_DEFINITIONS option not work in KMM
j
podspec user_target_xcconfig add GCC_PREPROCESSOR_DEFINITIONS option not work in KMM
🧵 1
in kmm project, my pod add a dependent pod "Protobuf" In Protobuf 's head file have use a micro GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
Copy code
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 1
#endif

// Well-known proto types
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/Any.pbobjc.h>
 #import <Protobuf/Api.pbobjc.h>
 #import <Protobuf/Duration.pbobjc.h>
 #import <Protobuf/Empty.pbobjc.h>
 #import <Protobuf/FieldMask.pbobjc.h>
 #import <Protobuf/SourceContext.pbobjc.h>
 #import <Protobuf/Struct.pbobjc.h>
 #import <Protobuf/Timestamp.pbobjc.h>
 #import <Protobuf/Type.pbobjc.h>
 #import <Protobuf/Wrappers.pbobjc.h>
#else
 #import "google/protobuf/Any.pbobjc.h"
 #import "google/protobuf/Api.pbobjc.h"
 #import "google/protobuf/Duration.pbobjc.h"
 #import "google/protobuf/Empty.pbobjc.h"
 #import "google/protobuf/FieldMask.pbobjc.h"
I have added micro define by extraSpecAttributes in build.gradle.kts file
Copy code
extraSpecAttributes["pod_target_xcconfig"] =  "{\n" +
        "            'KOTLIN_PROJECT_PATH' => ':PBService',\n" +
        "            'PRODUCT_MODULE_NAME' => 'PBService',\n" +
        "            'GCC_PREPROCESSOR_DEFINITIONS' => '\$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',\n" +
        "        }"
extraSpecAttributes["user_target_xcconfig"] = """{
    'GCC_PREPROCESSOR_DEFINITIONS' => 'GPB_USE_PROTOBUF_FRAMEWORK=1'
}""".trimIndent()
and have success config user_target_xcconfig option in podspec file
Copy code
spec.pod_target_xcconfig = {
        'KOTLIN_PROJECT_PATH' => ':PBService',
        'PRODUCT_MODULE_NAME' => 'PBService',
        'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',
    }
spec.user_target_xcconfig = {
        'GCC_PREPROCESSOR_DEFINITIONS' => 'GPB_USE_PROTOBUF_FRAMEWORK=1'
    }
But below code still follow else logic, the above GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS micro not work
Copy code
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 1
#endif

// Well-known proto types
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/Any.pbobjc.h>
 #import <Protobuf/Api.pbobjc.h>
 #import <Protobuf/Duration.pbobjc.h>
 #import <Protobuf/Empty.pbobjc.h>
 #import <Protobuf/FieldMask.pbobjc.h>
 #import <Protobuf/SourceContext.pbobjc.h>
 #import <Protobuf/Struct.pbobjc.h>
 #import <Protobuf/Timestamp.pbobjc.h>
 #import <Protobuf/Type.pbobjc.h>
 #import <Protobuf/Wrappers.pbobjc.h>
#else
 #import "google/protobuf/Any.pbobjc.h"
 #import "google/protobuf/Api.pbobjc.h"
 #import "google/protobuf/Duration.pbobjc.h"
 #import "google/protobuf/Empty.pbobjc.h"
 #import "google/protobuf/FieldMask.pbobjc.h"
k
j
thanks very mush
100 Views