Skip to content

Kotlin/Native 바이너리 옵션

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

활성화 방법

gradle.properties 파일, 빌드 파일에서 바이너리 옵션을 활성화하거나 컴파일러 인수로 전달할 수 있습니다.

Gradle 속성에서 설정

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

none
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

바이너리 옵션

아래 표는 기존의 모든 옵션을 나열한 것이 아니며, 가장 주목할 만한 옵션들만 포함하고 있습니다.

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

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

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

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

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

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

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

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

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

1.6.20부터 실험적(Experimental)

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

다음 단계

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