인디노트

Bitcode 본문

개발 플랫폼 및 언어

Bitcode

인디개발자 2021. 5. 14. 06:04

Apple 관련 앱을 개발하다보면 아카이브 단계에서 괴롭히는것이 Bitcode 가 Full 로 지원하지 않고 있다는 메시지일 경우가 많다.

개발 중에 빌드 단계에서는 전혀 잘 눈치채지 못하다가 꼭 아카이브 상황에서 발견하는 경우가 많기 때문이다.

어쨋든 iOS 는 Bitcode 를 꺼도 스토어에 등록은 시켜 주지만

watchOS, tvOS 와 같은것은 Full Bitcode 를 지원하지 않으면 리젝을 당하기 때문에 더욱 중요하다고 할 수 있다.

빌드 단계에서 Bitcode 를 사용하기 위해서는

User Defined Settings 에 BITCODE_GENERATION_MODE 를 bitcode 로 설정하여 컴파일 하는 것이다.

기본적으로 이 옵션은 marker 혹은 bitcode 이렇게 값을 줄 수 있는데 marker 는 bitcode 를 실제로 포함은 하지 않고 그냥 bitcode 가 존재한다는 마커만 할 뿐이다.

실제 gcc 같은 컴파일에서 -embed-bitcode-marker 옵션이 marker 에 해당한다. 이는 컴파일 시 bitcode 관련 flag 를 추가해 주는 역할이다.

아카이브에서는 -embed-bitcode 옵션을 주고 컴파일하게 된다. 이것은 실제 bitcode 를 포함하여 컴파일 하게 되는 것이다.

 

otool 을 이용하여 바이너리의 bitcode 확인이 가능하다.

$ otool -arch arm64 -l Framewotk/Framework | grep __LLVM

$ otool -arch armv7k -l libFile.a | grep __LLVM

하지만, 이것이 Full Bitcode 를 포함하고 있는지 확인은 되지 않는다.

 

Xcode 에서 BITCODE_GENERATION_MODE 를 bitcode 로 설정한 후 빌드를 해보는게 가장 확실하다.

Xcode 는 기본적으로 빌드 단계에서는 Bitcode 를 marker 로 설정한다. 이것은 빌드 (흔히 개발중 혹은 디버깅) 단계에서는 코드의 컴파일 속도가 오래 걸리면 개발하기 어렵기 때문이다.

bitcode 를 모두 포함한다는 것은 각 아키텍처에 맞는 모든 코드를 빌드해야 하기 때문에 컴파일 속도가 다소 오래 걸리게 되기 때문이다. 그래서 marker 가 필요한 것이다.

이런 저런 이유로 당연히 아카이브 단계에서는 marker 같은것이 통하지 않는다.

반응형
Comments