мы используем 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 совместно используют параметры компилятора и компоновщика, поэтому нет возможности настроить их отдельно. Следите за обновлениями КТ-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
Начиная с 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")
}
}
}
}
Я хочу использовать Bitcode только тогда, когда это действительно необходимо. Xcode передает переменную среды ENABLE_BITCODE, которую мы можем использовать для условного встраивания битового кода.
kotlin {
iosArm64("ios") {
binaries {
framework {
embedBitcode("YES".equals(System.getenv("ENABLE_BITCODE")) ? "bitcode" : "marker")
}
}
}
}
Это не совсем правильно, Xcode установит ENABLE_BITCODE как для отладочной, так и для выпускной сборок, вы должны использовать bitcode только для выпускных сборок, так как это замедлит процесс компиляции, и mark для отладочных сборок. Если ENABLE_BITCODE неверен (или отсутствует), вам следует использовать disable.
Вы можете использовать env var CONFIGURATION, чтобы узнать, является ли это отладочной или выпускной сборкой.
(По умолчанию для CONFIGURATION есть 2 возможных значения: «Отладка» или «Выпуск», но вы можете добавить больше через Xcode, поэтому проверьте конфигурацию вашего проекта ...)
Как я могу отключить генерацию битового кода с помощью Groovy в 1.3.20?