EXPERIMENT: produce dynamic frameworks for CocoaPods
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index d2cb59b..90d48b0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.addExtension +import org.jetbrains.kotlin.gradle.plugin.mpp.Framework import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.tasks.* @@ -65,7 +66,7 @@ private fun createDefaultFrameworks(kotlinExtension: KotlinMultiplatformExtension) { kotlinExtension.supportedTargets().all { target -> target.binaries.framework { - isStatic = true + isStatic = false } } } @@ -225,6 +226,13 @@ } } + + target.binaries.withType(Framework::class.java) { + it.linkerOpts("-framework", pod.moduleName) + project.findProperty(FRAMEWORK_PATHS_PROPERTY)?.toString()?.let { args -> + it.linkerOpts.addAll(args.splitQuotedArgs().map { "-F$it" }) + } + } } } }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/CocoapodsTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/CocoapodsTasks.kt index af06bc1..f8cc9b94 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/CocoapodsTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/CocoapodsTasks.kt
@@ -66,7 +66,6 @@ | spec.license = '${settings.license.orEmpty()}' | spec.summary = '${settings.summary.orEmpty()}' | - | spec.static_framework = true | spec.vendored_frameworks = "$frameworkDir/#{spec.name}.framework" | spec.libraries = "c++" | spec.module_name = "#{spec.name}_umbrella"
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Headers/dummy.h b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Headers/dummy.h index a913202..891e763 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Headers/dummy.h +++ b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Headers/dummy.h
@@ -1,5 +1,146 @@ -//! Project version number for dummy. -FOUNDATION_EXPORT double dummyVersionNumber; +#import <Foundation/NSArray.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSError.h> +#import <Foundation/NSObject.h> +#import <Foundation/NSSet.h> +#import <Foundation/NSString.h> +#import <Foundation/NSValue.h> -//! Project version string for dummy. -FOUNDATION_EXPORT const unsigned char dummyVersionString[]; +NS_ASSUME_NONNULL_BEGIN + +@interface KotlinBase : NSObject +- (instancetype)init __attribute__((unavailable)); ++ (instancetype)new __attribute__((unavailable)); ++ (void)initialize __attribute__((objc_requires_super)); +@end; + +@interface KotlinBase (KotlinBaseCopying) <NSCopying> +@end; + +__attribute__((objc_runtime_name("KotlinMutableSet"))) +__attribute__((swift_name("KotlinMutableSet"))) +@interface DummyMutableSet<ObjectType> : NSMutableSet<ObjectType> +@end; + +__attribute__((objc_runtime_name("KotlinMutableDictionary"))) +__attribute__((swift_name("KotlinMutableDictionary"))) +@interface DummyMutableDictionary<KeyType, ObjectType> : NSMutableDictionary<KeyType, ObjectType> +@end; + +@interface NSError (NSErrorKotlinException) +@property (readonly) id _Nullable kotlinException; +@end; + +__attribute__((objc_runtime_name("KotlinNumber"))) +__attribute__((swift_name("KotlinNumber"))) +@interface DummyNumber : NSNumber +- (instancetype)initWithChar:(char)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedChar:(unsigned char)value __attribute__((unavailable)); +- (instancetype)initWithShort:(short)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedShort:(unsigned short)value __attribute__((unavailable)); +- (instancetype)initWithInt:(int)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedInt:(unsigned int)value __attribute__((unavailable)); +- (instancetype)initWithLong:(long)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedLong:(unsigned long)value __attribute__((unavailable)); +- (instancetype)initWithLongLong:(long long)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedLongLong:(unsigned long long)value __attribute__((unavailable)); +- (instancetype)initWithFloat:(float)value __attribute__((unavailable)); +- (instancetype)initWithDouble:(double)value __attribute__((unavailable)); +- (instancetype)initWithBool:(BOOL)value __attribute__((unavailable)); +- (instancetype)initWithInteger:(NSInteger)value __attribute__((unavailable)); +- (instancetype)initWithUnsignedInteger:(NSUInteger)value __attribute__((unavailable)); ++ (instancetype)numberWithChar:(char)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedChar:(unsigned char)value __attribute__((unavailable)); ++ (instancetype)numberWithShort:(short)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedShort:(unsigned short)value __attribute__((unavailable)); ++ (instancetype)numberWithInt:(int)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedInt:(unsigned int)value __attribute__((unavailable)); ++ (instancetype)numberWithLong:(long)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedLong:(unsigned long)value __attribute__((unavailable)); ++ (instancetype)numberWithLongLong:(long long)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedLongLong:(unsigned long long)value __attribute__((unavailable)); ++ (instancetype)numberWithFloat:(float)value __attribute__((unavailable)); ++ (instancetype)numberWithDouble:(double)value __attribute__((unavailable)); ++ (instancetype)numberWithBool:(BOOL)value __attribute__((unavailable)); ++ (instancetype)numberWithInteger:(NSInteger)value __attribute__((unavailable)); ++ (instancetype)numberWithUnsignedInteger:(NSUInteger)value __attribute__((unavailable)); +@end; + +__attribute__((objc_runtime_name("KotlinByte"))) +__attribute__((swift_name("KotlinByte"))) +@interface DummyByte : DummyNumber +- (instancetype)initWithChar:(char)value; ++ (instancetype)numberWithChar:(char)value; +@end; + +__attribute__((objc_runtime_name("KotlinUByte"))) +__attribute__((swift_name("KotlinUByte"))) +@interface DummyUByte : DummyNumber +- (instancetype)initWithUnsignedChar:(unsigned char)value; ++ (instancetype)numberWithUnsignedChar:(unsigned char)value; +@end; + +__attribute__((objc_runtime_name("KotlinShort"))) +__attribute__((swift_name("KotlinShort"))) +@interface DummyShort : DummyNumber +- (instancetype)initWithShort:(short)value; ++ (instancetype)numberWithShort:(short)value; +@end; + +__attribute__((objc_runtime_name("KotlinUShort"))) +__attribute__((swift_name("KotlinUShort"))) +@interface DummyUShort : DummyNumber +- (instancetype)initWithUnsignedShort:(unsigned short)value; ++ (instancetype)numberWithUnsignedShort:(unsigned short)value; +@end; + +__attribute__((objc_runtime_name("KotlinInt"))) +__attribute__((swift_name("KotlinInt"))) +@interface DummyInt : DummyNumber +- (instancetype)initWithInt:(int)value; ++ (instancetype)numberWithInt:(int)value; +@end; + +__attribute__((objc_runtime_name("KotlinUInt"))) +__attribute__((swift_name("KotlinUInt"))) +@interface DummyUInt : DummyNumber +- (instancetype)initWithUnsignedInt:(unsigned int)value; ++ (instancetype)numberWithUnsignedInt:(unsigned int)value; +@end; + +__attribute__((objc_runtime_name("KotlinLong"))) +__attribute__((swift_name("KotlinLong"))) +@interface DummyLong : DummyNumber +- (instancetype)initWithLongLong:(long long)value; ++ (instancetype)numberWithLongLong:(long long)value; +@end; + +__attribute__((objc_runtime_name("KotlinULong"))) +__attribute__((swift_name("KotlinULong"))) +@interface DummyULong : DummyNumber +- (instancetype)initWithUnsignedLongLong:(unsigned long long)value; ++ (instancetype)numberWithUnsignedLongLong:(unsigned long long)value; +@end; + +__attribute__((objc_runtime_name("KotlinFloat"))) +__attribute__((swift_name("KotlinFloat"))) +@interface DummyFloat : DummyNumber +- (instancetype)initWithFloat:(float)value; ++ (instancetype)numberWithFloat:(float)value; +@end; + +__attribute__((objc_runtime_name("KotlinDouble"))) +__attribute__((swift_name("KotlinDouble"))) +@interface DummyDouble : DummyNumber +- (instancetype)initWithDouble:(double)value; ++ (instancetype)numberWithDouble:(double)value; +@end; + +__attribute__((objc_runtime_name("KotlinBoolean"))) +__attribute__((swift_name("KotlinBoolean"))) +@interface DummyBoolean : DummyNumber +- (instancetype)initWithBool:(BOOL)value; ++ (instancetype)numberWithBool:(BOOL)value; +@end; + +NS_ASSUME_NONNULL_END
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist index bb36316..3d29f91 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist +++ b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist Binary files differ
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Modules/module.modulemap b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Modules/module.modulemap index 9a96072..929996c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Modules/module.modulemap +++ b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Modules/module.modulemap
@@ -1,6 +1,6 @@ framework module dummy { - umbrella header "dummy.h" + umbrella header "dummy.h" - export * - module * { export * } -} + export * + module * { export * } +} \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/dummy b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/dummy old mode 100644 new mode 100755 index 99a9ede..5069c145 --- a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/dummy +++ b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/dummy Binary files differ