Jérémy CROS
06/28/2021, 3:36 PMCasey Brooks
06/28/2021, 3:51 PMCasey Brooks
06/28/2021, 3:56 PMCasey Brooks
06/28/2021, 3:59 PMJérémy CROS
06/28/2021, 4:12 PMCasey Brooks
06/28/2021, 4:19 PMCasey Brooks
06/28/2021, 4:21 PMbgiori
06/28/2021, 7:39 PMkotlin {
macosX64().binaries.framework { baseName = frameworkName }
iosArm32().binaries.framework { baseName = frameworkName }
iosArm64().binaries.framework { baseName = frameworkName }
iosX64().binaries.framework { baseName = frameworkName }
tvosArm64().binaries.framework { baseName = frameworkName }
tvosX64().binaries.framework { baseName = frameworkName }
watchosArm32().binaries.framework { baseName = frameworkName }
watchosArm64().binaries.framework { baseName = frameworkName }
watchosX86().binaries.framework { baseName = frameworkName }
watchosX64().binaries.framework { baseName = frameworkName }
}
2. Add a post build script to your modules' build.gradle.kts which creates fat frameworks and builds a universal xcframework
bgiori
06/28/2021, 7:39 PMtasks["build"].doLast {
// Clear the old xcframework
exec { commandLine("rm", "-rf", "build/xcframework") }
// Setup fat-frameworks directory for 32-bit and 64-bit platforms with the same arch
exec { commandLine("mkdir", "-p", "build/fat-frameworks") }
exec { commandLine("cp", "-R", "build/bin/iosArm64", "build/fat-frameworks/iosArm") }
exec { commandLine("cp", "-R", "build/bin/watchosArm64", "build/fat-frameworks/watchosArm") }
exec { commandLine("cp", "-R", "build/bin/watchosX64", "build/fat-frameworks/watchosX") }
// For debug and release frameworks, create fat frameworks and create the final xcframework
listOf("debugFramework", "releaseFramework").forEach { debugOrReleaseFramework ->
exec {
commandLine(
"lipo", "-create",
"build/bin/iosArm32/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"build/bin/iosArm64/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"-output", "build/fat-frameworks/iosArm/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName"
)
}
exec {
commandLine(
"lipo", "-create",
"build/bin/watchosArm32/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"build/bin/watchosArm64/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"-output", "build/fat-frameworks/watchosArm/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName"
)
}
exec {
commandLine(
"lipo", "-create",
"build/bin/watchosX86/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"build/bin/watchosX64/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName",
"-output", "build/fat-frameworks/watchosX/$debugOrReleaseFramework/$frameworkName.framework/$frameworkName"
)
}
exec {
commandLine(
"xcodebuild", "-create-xcframework",
"-framework", "build/fat-frameworks/iosArm/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/bin/iosX64/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/bin/macosX64/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/bin/tvosArm64/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/bin/tvosX64/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/fat-frameworks/watchosArm/$debugOrReleaseFramework/$frameworkName.framework",
"-framework", "build/fat-frameworks/watchosX/$debugOrReleaseFramework/$frameworkName.framework",
"-output", "build/xcframework/$debugOrReleaseFramework/$frameworkName.xcframework"
)
}
}
}
The resulting .xcframework
in build/xcframework
can be added to your xcode project and linked to your ios app in the General tag under Frameworks and Libraries.
Hope this helpsJérémy CROS
06/29/2021, 9:27 AMlouiscad
06/29/2021, 9:29 AMJérémy CROS
06/29/2021, 9:34 AMlouiscad
06/29/2021, 10:35 AMtylerwilson
07/09/2021, 6:16 PMFYI, Kotlin 1.5.30 (next non-bugfix-only version) will have a built-in way to make XCFrameworks.Do you have a link to any Kotlin youtrack issue related to this? I am very interested in using this. The ge-org one is not working for me yet…
louiscad
07/10/2021, 8:36 AMtylerwilson
07/13/2021, 7:06 PMlouiscad
07/14/2021, 12:12 AMtylerwilson
07/14/2021, 1:26 PMlouiscad
07/14/2021, 4:42 PM