簡體   English   中英

適用於 iOS 的 Kotlin 多平台庫,帶有位碼

[英]Kotlin Multiplatform library for iOS with bitcode

我們使用 Kotlin 在 Android 和 iOS 之間共享一個庫。

我們設置了一切,但在 iOS 上我需要啟用 Bitcode。 經過研究,我找到了解決方案:

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
    }
  }
}

但現在的問題是,我是否有,如果有,我如何區分發布和調試二進制文件以及特定標志? 我可以簡單地添加兩個標志而沒有任何缺點嗎?

也許有人可以啟發我謝謝

由於適用於 iOS 框架的 Kotlin 1.3.20 位碼嵌入開箱即用。 如果需要,您還可以手動配置嵌入:

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")
            }
        }
    }
}

目前,同一 iOS 目標的所有二進制鏈接任務都共享編譯器和鏈接器選項,因此無法單獨為它們設置選項。 請關注KT-26887獲取更新。

如果您可以負擔使用不同選項運行多個構建,則可以有條件地設置選項並使用標​​志運行構建:

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

然后分別運行帶有或不帶有標志的構建:

./gradlew linkDebugFrameworkIOS

./gradlew linkReleaseFrameworkIOS -PreleaseFramework=true

我只想在真正需要時使用 Bitcode。 Xcode 傳遞一個環境變量ENABLE_BITCODE ,我們可以使用它來有條件地嵌入位碼。

kotlin {
  iosArm64("ios") {
    binaries {
      framework {
        embedBitcode("YES".equals(System.getenv("ENABLE_BITCODE")) ? "bitcode" : "marker")
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM