首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于iOS的Kotlin多平台库

用于iOS的Kotlin多平台库
EN

Stack Overflow用户
提问于 2018-11-29 04:13:14
回答 3查看 996关注 0票数 10

我们使用Kotlin在Android和iOS之间共享库。

我们设置好了所有东西,但在iOS上我需要启用Bitcode。经过研究,我找到了解决方案:

代码语言:javascript
复制
kotlin {
targets {
    fromPreset(presets.jvm, 'jvm') {
        mavenPublication {
            artifactId = 'my-lib-name'
        }
    }
    // Switch here to presets.iosArm64 to build library for iPhone device || iosX64 for emulator
    fromPreset(presets.iosArm64, 'iOS') {
        compilations.main.outputKinds('FRAMEWORK')
        compilations.main.extraOpts '-Xembed-bitcode' // for release binaries
        compilations.main.extraOpts '-Xembed-bitcode-marker'//  for debug binaries
    }
  }
}

但现在的问题是,我是否有,如果有,我如何区分发布和调试二进制文件以及特定的标志?我可以简单地添加这两个标志而没有任何缺点吗?

也许有人能开导我谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-01-24 13:21:46

自Kotlin 1.3.20以来,iOS框架的位码嵌入可以开箱即用。如果需要,您也可以手动配置嵌入:

代码语言:javascript
复制
kotlin {
    iosArm64("ios") {
        binaries {
            framework {
                // The following embedding modes are available:
                //   - "marker"  - Embed placeholder LLVM IR data as a marker.
                //                 Has the same effect as '-Xembed-bitcode-marker.'
                //   - "bitcode" - Embed LLVM IR bitcode as data.
                //                 Has the same effect as the '-Xembed-bitcode'.
                //   - "disable" - Don't embed LLVM IR bitcode.
                embedBitcode("marker")
            }
        }
    }
}
票数 8
EN

Stack Overflow用户

发布于 2018-11-29 04:48:25

目前,同一iOS目标的所有二进制链接任务共享编译器和链接器选项,因此无法分别为它们设置选项。请关注KT-26887以获取更新。

如果您可以使用不同的选项运行多个构建,则可以有条件地设置这些选项,并使用一个标志运行构建:

代码语言:javascript
复制
compilations.main.outputKinds('FRAMEWORK')

if (project.findProperty("releaseFramework") == "true")
    compilations.main.extraOpts '-Xembed-bitcode' // for release binaries
else
    compilations.main.extraOpts '-Xembed-bitcode-marker'//  for debug binaries

然后,分别使用或不使用该标志运行构建:

代码语言:javascript
复制
./gradlew linkDebugFrameworkIOS

代码语言:javascript
复制
./gradlew linkReleaseFrameworkIOS -PreleaseFramework=true
票数 5
EN

Stack Overflow用户

发布于 2020-01-17 04:15:34

我只想在真正需要的时候使用Bitcode。Xcode向下传递了一个环境变量ENABLE_BITCODE,我们可以使用它有条件地嵌入bitcode。

代码语言:javascript
复制
kotlin {
  iosArm64("ios") {
    binaries {
      framework {
        embedBitcode("YES".equals(System.getenv("ENABLE_BITCODE")) ? "bitcode" : "marker")
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53527386

复制
相关文章

相似问题

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