首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS复制捆绑到XCFramework

iOS复制捆绑到XCFramework
EN

Stack Overflow用户
提问于 2021-03-22 00:57:32
回答 1查看 424关注 0票数 1

我目前正在做一个Kotlin多平台项目。我们正在使用Moko (https://github.com/icerockdev/moko-resources)创建一个资源共享目录。这对于FAT框架非常有用,但是我们有一个使用XCFrameworks的需求。我不太熟悉iOS和框架环境,所以请原谅我的无知。

现在,当我们构建XCFramework时,似乎出现了一些问题,因为运行该应用程序显示commainMain.MR不可用,所以我认为我们的包没有被正确复制。

下面是我们的fatFramework Gradle任务:

代码语言:javascript
复制
        register("buildFatFrameworkWithResources", TestFatFramework::class) {
        val debugMode = "DEBUG"
        val mode = System.getenv("CONFIGURATION") ?: debugMode
        destinationDir = buildDir.resolve("xcode-universal-framework")
        group = "Universal framework"
        description = "Builds a universal (fat) $mode framework"

        from(iosArm64Framework, iosX64Framework)
        dependsOn(iosArm64Framework.linkTask)
        dependsOn(iosX64Framework.linkTask)
    }

我们的XCFramework任务

代码语言:javascript
复制
        register("buildXcFrameworkWithResources") {
        dependsOn("deleteXcFramework")
        val mode = "DEBUG"
        val frameworks = arrayOf("iosArm64", "iosX64").map {
            kotlin.targets.getByName<KotlinNativeTarget>(it).binaries.getFramework(mode)
        }

        inputs.property("mode", mode)
        dependsOn(frameworks.map { it.linkTask })
        group = "Universal framework"
        description = "Builds a universal (xc) $mode framework"

        frameworks.first().outputFile.listFiles()
            ?.asSequence()
            ?.filter { it.name.contains(".bundle") }
            ?.forEach { bundleFile ->
                project.copy {
                    from(bundleFile)
                    into("$xcFrameworkPath/${bundleFile.name}")
                }
            }

        doLast {
            val buildArgs: () -> List<String> = {
                val arguments = mutableListOf("-create-xcframework")
                frameworks.forEach {
                    arguments += "-framework"
                    arguments += "${it.outputDirectory}/${project.name}.framework"
                }
                arguments += "-output"
                arguments += xcFrameworkPath
                arguments
            }

            exec {
                executable = "xcodebuild"
                args = buildArgs()
            }
        }
    }

我不太确定需要改变什么才能使它正常工作。感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-10-25 08:14:32

正如注释中所提到的@ArtyomDegtyarev,您可以通过在Xcode的构建阶段添加一个运行脚本来直接构建XCFramework

为此:

  • Open Xcode.

选择第一个文件(YourApp.xcodeproj).的

  • 从左侧选择目标,然后转到右侧的构建阶段.

  • 单击左上角的+符号并选择新的运行脚本阶段。

  • 插入以下脚本:

$SRCROOT/./gradlew“-p”$SRCROOT/./“共享:copyFrameworkResourcesToApp\ -Pmoko.resources.PLATFORM_NAME=$PLATFORM_NAME \ -Pmoko.resources.CONFIGURATION=$CONFIGURATION \ -Pmoko.resources.CONTENTS_FOLDER_PATH=$CONTENTS_FOLDER_PATH\ -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ -Pkotlin.native.cocoapods.configuration=$CONFIGURATION \ -Pkotlin.native.cocoapods.cflags="$OTHER_CFLAGS”\-Pkotlin.native。cocoapods.paths.headers="$HEADER_SEARCH_PATHS“\ -Pkotlin.native.cocoapods.paths.frameworks="$FRAMEWORK_SEARCH_PATHS"

  • 注意共享模块的名称。在我的项目中,它被称为“共享”。如果不同,请用您的替换。

现在构建和运行,您应该能够访问您的共享资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66739111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档