Skip to content

Kotlin/Native 바이너리 옵션

이 페이지에서는 Kotlin/Native 최종 바이너리를 구성하는 데 사용할 수 있는 유용한 Kotlin/Native 바이너리 옵션과 프로젝트에서 바이너리 옵션을 설정하는 방법을 나열합니다.

활성화 방법

gradle.properties 파일, 빌드 파일 또는 컴파일러 인수로 바이너리 옵션을 활성화할 수 있습니다.

Gradle 속성에서

프로젝트의 gradle.properties 파일에서 kotlin.native.binary 속성을 사용하여 바이너리 옵션을 설정할 수 있습니다. 예를 들어:

none
kotlin.native.binary.gc=cms
kotlin.native.binary.latin1Strings=true

빌드 파일에서

build.gradle.kts 파일에서 프로젝트의 바이너리 옵션을 설정할 수 있습니다.

  • binaryOption 속성을 사용하여 특정 바이너리에 대해 설정할 수 있습니다. 예를 들어:

    kotlin
    kotlin {
        iosArm64 {
            binaries {
                framework {
                    binaryOption("smallBinary", "true")
                }
            }
        }
    }
  • freeCompilerArgs 속성에서 -Xbinary=$option=$value 컴파일러 옵션으로 설정할 수 있습니다. 예를 들어:

    kotlin
    kotlin {
        iosArm64 {
            compilations.configureEach {
                compilerOptions.configure {
                    freeCompilerArgs.add("-Xbinary=smallBinary=true")
                }
            }
        }
    }

명령줄 컴파일러에서

Kotlin/Native 컴파일러를 실행할 때 명령줄에서 -Xbinary=$option=$value로 바이너리 옵션을 직접 전달할 수 있습니다. 예를 들어:

bash
kotlinc-native main.kt -Xbinary=enableSafepointSignposts=true

바이너리 옵션

이 표는 모든 기존 옵션의 포괄적인 목록이 아니며, 가장 주목할 만한 옵션만 포함되어 있습니다.

옵션설명상태
smallBinary
  • true
  • false (기본값)
릴리스 바이너리의 바이너리 크기를 줄입니다.2.2.20부터 실험적
stackProtector
  • yes
  • strong
  • all
  • no (기본값)
스택 카나리(stack canaries)를 활성화합니다. 취약한 함수에는 yes를 사용하고, 모든 함수에는 all을, 더 강력한 휴리스틱을 사용하려면 strong을 사용합니다.2.2.20부터 사용 가능
pagedAllocator
  • true (기본값)
  • false
할당 페이징(버퍼링)을 제어합니다. false인 경우, 메모리 할당자는 객체별로 메모리를 예약합니다.2.2.0부터 실험적
latin1Strings
  • true
  • false (기본값)
애플리케이션 바이너리 크기를 줄이고 메모리 소비를 조정하기 위해 Latin-1 인코딩된 문자열 지원을 제어합니다.2.2.0부터 실험적
mmapTagUInt메모리 태그 지정을 제어하며, Apple 플랫폼에서 메모리 소비 추적에 필요합니다. 240-255 값이 사용 가능하며 (기본값은 246), 0은 태그 지정을 비활성화합니다.2.2.0부터 사용 가능
disableMmap
  • true
  • false (기본값)
기본 할당자를 제어합니다. true인 경우, mmap 대신 malloc 메모리 할당자를 사용합니다.2.2.0부터 사용 가능
gc가비지 컬렉션 동작을 제어합니다.
  • pmcs는 병렬 마크 동시 스윕(parallel mark concurrent sweep)을 사용합니다
  • stwms는 간단한 스톱-더-월드 마크 앤 스윕(simple stop-the-world mark and sweep)을 사용합니다
  • cms는 GC 일시 중지 시간을 줄이는 데 도움이 되는 동시 마킹을 활성화합니다
  • noop는 가비지 컬렉션을 비활성화합니다
cms는 2.0.20부터 실험적
gcMarkSingleThreaded
  • true
  • false (기본값)
가비지 컬렉션의 마크 단계 병렬화를 비활성화합니다. 대규모 힙에서 GC 일시 중지 시간을 증가시킬 수 있습니다.1.7.20부터 사용 가능
enableSafepointSignposts
  • true
  • false (기본값)
Xcode Instruments에서 디버깅하기 위해 프로젝트에서 GC 관련 일시 중지를 추적할 수 있도록 활성화합니다.2.0.20부터 사용 가능
preCodegenInlineThresholdUInt

실제 코드 생성 단계 이전에 수행되는 Kotlin IR 컴파일러의 인라이닝 최적화 패스를 구성합니다(기본적으로 비활성화됨).

권장되는 토큰 수(컴파일러가 파싱하는 코드 단위)는 40입니다.

2.1.20부터 실험적
objcDisposeOnMain
  • true (기본값)
  • false
Swift/Objective-C 객체의 초기화 해제(deinitialization)를 제어합니다. false인 경우, 초기화 해제는 메인 스레드 대신 특수 GC 스레드에서 발생합니다.1.9.0부터 사용 가능
appStateTracking
  • enabled
  • disabled (기본값)

애플리케이션이 백그라운드에서 실행될 때 타이머 기반으로 가비지 컬렉터 호출을 제어합니다.

enabled인 경우, GC는 메모리 소비가 너무 높아질 때만 호출됩니다.

1.7.20부터 실험적
bundleId
  • String
Info.plst 파일에서 번들 ID(CFBundleIdentifier)를 설정합니다.1.7.20부터 사용 가능
bundleShortVersionString
  • String
Info.plst 파일에서 짧은 번들 버전(CFBundleShortVersionString)을 설정합니다.1.7.20부터 사용 가능
bundleVersion
  • String
Info.plst 파일에서 번들 버전(CFBundleVersion)을 설정합니다.1.7.20부터 사용 가능
sourceInfoType
  • libbacktrace
  • coresymbolication (Apple 타겟)
  • noop (기본값)

예외 스택 트레이스에 파일 위치와 줄 번호를 추가합니다.

coresymbolication은 Apple 타겟에서만 사용할 수 있으며 디버그 모드의 macOS 및 Apple 시뮬레이터에서는 기본적으로 활성화됩니다.

1.6.20부터 실험적

안정성 수준에 대한 자세한 내용은 문서를 참조하십시오.

다음 단계

최종 네이티브 바이너리를 빌드하는 방법을 알아보세요.