Мультиплатформенная библиотека Kotlin для iOS с битовым кодом - PullRequest
0 голосов
/ 28 ноября 2018

мы используем 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
    }
  }
}

Но вопрос теперь, есть ли у меня, и если да, как я могу разделить между двоичными файлами выпуска и отладки и определенными флагами?Могу ли я просто добавить оба флага без каких-либо недостатков?

Может быть, кто-то может просветить меня, спасибо

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Начиная с Kotlin 1.3.20, встраивание бит-кода для каркасов iOS работает "из коробки".Вы также можете настроить встраивание вручную, если вам нужно:

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")
            }
        }
    }
}
0 голосов
/ 28 ноября 2018

В настоящее время все задачи двоичного связывания для одной и той же цели 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...