Xcode 빌드 옵션의 영향 "비트 코드 사용"예 / 아니요
어제 parse.com 라이브러리와 관련하여 많은 경고가있었습니다.
긴급 : '[path] /Parse.framework/Parse (PFAnalytics.o)'가 비트 코드없이 빌드되었으므로 모든 비트 코드가 삭제됩니다. 비트 코드 활성화 (Xcode 설정 ENABLE_BITCODE)로 다시 빌드하거나 공급 업체로부터 업데이트 된 라이브러리를 얻거나이 대상에 대한 비트 코드를 비활성화해야합니다. 참고 : 이것은 나중에 오류가 될 것입니다.
이 답변으로 경고를 제거 할 수 있다는 사실을 알고 있지만 이제는 AppStore 제출 및 / 또는 실제 앱 성능과 관련하여 부정적인 영향을 미칠지 궁금합니다.
Xcode는 비트 코드와 관련하여 알려줍니다
이 설정을 활성화하면 대상 또는 프로젝트가이를 지원하는 플랫폼 및 아키텍처의 컴파일 중에 비트 코드를 생성해야 함을 나타냅니다. 보관 빌드의 경우 비트 코드는 연결된 바이너리에 생성되어 앱 스토어에 제출됩니다. 다른 빌드의 경우 컴파일러와 링커는 코드가 비트 코드 생성 요구 사항을 준수하는지 확인하지만 실제 비트 코드는 생성하지 않습니다. [ENABLE_BITCODE]
그러나 나는이 텍스트에서 실제로 유용한 정보를 얻지 못했습니다.
- 링크 된 답변을 사용하여 부정적인 영향이나 향후 AppStore 제출을 손상시키지 않고 문제를 피할 수 있습니까?
ENABLE_BITCODE
실제로 무엇을 하는가? 향후 비 선택적 요건이 될 것인가?- 활성화 / 비활성화하면 성능에 영향이 있습니까?
- ENABLE_BITCODE는 실제로 무엇을합니까? 향후 비 선택적 요구 사항이 있습니까?
어느 수준에서 답을 찾고 있는지 잘 모르겠으므로 약간의 여행을하겠습니다. 이 중 일부는 이미 알고있을 것입니다.
프로젝트를 빌드 할 때 Xcode는 clang
Objective-C 대상 및 swift
/ swiftc
for Swift 대상을 호출합니다 . 이 두 컴파일러는 앱을 중간 표현 (IR)으로 컴파일 하며이 IR 중 하나는 비트 코드입니다. 이 IR에서 LLVM이라는 프로그램이 x86 32 및 64 비트 모드 (시뮬레이터 용) 및 arm6 / arm7 / arm7s / arm64 (장치 용)에 필요한 이진 파일을 가져옵니다. 일반적으로 이러한 서로 다른 바이너리는 모두 fat binary 라는 단일 파일로 묶습니다 .
ENABLE_BITCODE 옵션은이 마지막 단계를 잘라냅니다. IR 비트 코드 바이너리를 사용하여 앱 버전을 만듭니다. 여기에는 여러 가지 훌륭한 기능이 있지만 한 가지 큰 단점이 있습니다. 비트 코드 바이너리가있는 앱을 실행하려면 비트 코드를 x86 또는 ARM 바이너리 로 다시 컴파일해야합니다 ( 어쩌면 올바른 코드인지 확실하지 않습니다 ).
비트 코드 앱이 App Store에 제출되면 Apple은이 마지막 단계를 수행하고 완성 된 바이너리를 생성합니다.
현재 비트 코드 응용 프로그램은 선택 사항이지만 기록에 따르면 Apple은 선택 사항을 요구 사항 (예 : 64 비트 지원)으로 바꿉니다. 일반적으로 몇 년이 걸리므로 Parse와 같은 타사 개발자는 업데이트 할 시간이 있습니다.
- 부정적인 영향이나 향후 앱 스토어 제출을 손상시키지 않고 위의 방법을 사용할 수 있습니까?
예, ENABLE_BITCODE를 사용 중지하면 모든 것이 이전처럼 작동합니다. Apple이 비트 코드 앱을 App Store의 요구 사항으로 만들 때까지 괜찮습니다.
- 활성화 / 비활성화하면 성능에 영향이 있습니까?
이 기능을 사용하면 성능에 부정적인 영향을 미치지 않지만 테스트를위한 앱의 내부 배포는 더 복잡해질 수 있습니다.
긍정적 인 영향에 관해서는…
App Store에서 배포하기 위해 Apple은 지방 바이너리가있는 하나의 앱 대신 각 머신 아키텍처 (arm6 / arm7 / arm7s / arm64)에 대해 별도의 버전의 앱을 만듭니다. 즉, iOS 기기에 설치된 앱이 더 작아집니다.
또한 비트 코드가 다시 컴파일 될 때 ( 어쩌면 조립 또는 트랜스 코딩 될 수 있습니다 ... 다시, 올바른 동사를 잘 모르겠습니다 ) 최적화되어 있습니다. LLVM은 항상 새로운 최적화를 위해 노력하고 있습니다. 이론적으로 App Store는 새로운 LLVM 릴리스마다 App Store에서 별도의 버전의 앱을 다시 만들 수 있으므로 최신 LLVM 기술로 앱을 다시 최적화 할 수 있습니다.
비트 코드 빌드 사용 설정을 찾으려면 "모두"를 선택하십시오.
비트 코드는 iOS 9 의 새로운 기능입니다
비트 코드는 컴파일 된 프로그램의 중간 표현입니다. 비트 코드가 포함 된 iTunes Connect에 업로드 한 앱은 App Store에서 컴파일되고 링크됩니다. 비트 코드를 포함하면 Apple은 향후 새로운 버전의 앱을 스토어에 제출할 필요없이 향후 앱 바이너리를 다시 최적화 할 수 있습니다.
참고 : iOS 앱의 경우 비트 코드가 기본값이지만 선택 사항입니다. 비트 코드를 제공하는 경우 앱 번들의 모든 앱 및 프레임 워크에 비트 코드가 포함되어야합니다. watchOS 앱의 경우 비트 코드가 필요합니다
따라서 앱의 모든 프레임 워크에서 비트 코드가 활성화 될 때까지 비트 코드를 비활성화해야합니다.
비트 코드는 충돌보고를 더욱 어렵게 만듭니다 . 다음은 HockeyApp 의 인용문입니다 ( 다른 충돌보고 솔루션 에도 해당 ).
응용 프로그램을 App Store에 업로드하고 "비트 코드"체크 상자를 활성화 상태로두면, Apple은 해당 비트 코드 빌드를 사용하여 장치에 배포하기 전에 마지막에 다시 컴파일합니다. 바이너리가 새로운 UUID를 얻게되고 Xcode를 통해 해당 dSYM을 다운로드하는 옵션이 있습니다.
참고 : 답변은 2016 년 1 월에 가장 최근의 변경 사항을 반영하도록 편집되었습니다.
@ vj9 thx. xcode 7로 업데이트합니다. 나에게 같은 오류가 표시됩니다. "NO"로 설정 한 후 빌드
"아니오"로 설정하면 제대로 작동합니다.
여기에서 비트 코드 에 관한 모든 솔루션을 찾을 수 있습니다
Apple Doc에 따라
비트 코드는 컴파일 된 프로그램의 중간 표현입니다. 비트 코드가 포함 된 iTunes Connect에 업로드 한 응용 프로그램은 저장되어 컴파일됩니다. 비트 코드를 포함하면 Apple은 향후 새로운 버전의 앱을 스토어에 제출할 필요없이 향후 앱 바이너리를 다시 최적화 할 수 있습니다.
Xcode는 기본적으로 빌드 시간 동안 생성 된 심볼을 숨기므로 Apple에서 읽을 수 없습니다. 앱을 iTunes Connect에 업로드 할 때 심볼을 포함하도록 선택한 경우에만 심볼이 Apple로 전송됩니다. Apple에서 충돌 보고서를 받으려면 기호를 포함해야합니다.
참고 : iOS 앱의 경우 비트 코드가 기본값이지만 선택 사항입니다. watchOS 및 tvOS 앱의 경우 비트 코드가 필요합니다. 비트 코드를 제공하는 경우 앱 번들의 모든 앱 및 프레임 워크 (프로젝트의 모든 대상)에 비트 코드가 포함되어야합니다. iTunes Connect를 사용하여 응용 프로그램을 배포 한 후 , 장비 윈도우에서 충돌보기 및 가져 오기에 설명 된대로 빌드 용 dSYM 파일을 다운로드 할 수 있습니다
한 유형의 하드웨어에서 다른 유형의 하드웨어로 업그레이드하는 데 문제가 올바른 버전의 바이너리를 복원하지 못했기 때문에 Apple의 비트 코드 및 앱 씬닝 서비스의 초기 출시가 보류되었습니다. 이 문제는 이후 iOS 9.0.2에서 수정되었으며 기능이 다시 활성화되었습니다.
비트 코드는 항상 LLVM 컴파일 및 최적화 단계의 일부 였지만 백엔드 논리를 Apple 서버로 이동함으로써 개발자 컴파일 시간에서 App Store 배포로 최적화 및 어셈블 단계를 이동합니다. 이를 통해 미래에 더 새롭고 더 빠른 프로세서를 지원할 수 있도록 향후 재 최적화 또는 재번역의 잠재력을 활용할 수 있습니다. 비트 코드 배포는 watchOS 및 tvOS 디플로먼트에 필요하며 프로젝트 설정의 "비트 코드 사용"옵션을 사용하여 기존 iOS 배포에 조건부로 활성화 할 수 있습니다. 디버그 빌드에는 플래그 임베디드 비트 코드 마커가, 아카이브 / 디바이스 빌드에는 임베디드 비트 코드가 추가됩니다. 이것들은 -embed-bitcode와 함께 또는 Swift 컴파일러에 -fembed-bitcode와 함께 clang을 사용하여 전달 될 수 있습니다.
비트 코드에도 몇 가지 단점이 있습니다.개발자는 Apple에 제공된 바이너리에 해당하는 디버그 기호의 복사본을 저장하여 응용 프로그램에서 충돌 보고서를 디버깅 할 수 있습니다. 주어진 스택에서 충돌이 발생하면 개발자는 이러한 디버그 기호를 사용하여 충돌 보고서를 상징화하여 원래 스택 추적을 복원 할 수 있습니다. 그러나, 심볼은 중간 형태를 이진으로 변환하는 부산물이며; 그러나 해당 단계가 서버에서 수행되면이 정보가 손실됩니다. Apple은 개발자가 응용 프로그램을 게시 할 때 디버그 기호를 업로드 한 경우 디버거의 일부를 재생할 수있는 충돌보고 서비스를 제공합니다. 개발자가 정확한 바이너리를 보지 못한다는 것은 새로운 하드웨어가 발전함에 따라 특정 문제를 테스트하지 못할 수도 있음을 의미합니다.
마지막으로, 서버 의 비트 코드 는 새로운 아키텍처 및 명령어 세트가 발전함에 따라 지원되도록 변환 될 수 있습니다. 그들이 호출 규칙과 정렬 및 단어의 크기를 유지한다면, 비트 코드 응용 프로그램은 다른 아키텍처 유형으로 변환되어 새로운 프로세서에 맞게 최적화 될 수 있습니다. 수학 및 벡터 루틴을위한 표준 라이브러리를 사용하는 경우 지정된 어플리케이션에 대해 최고의 성능을 얻기 위해 프로세서 별 벡터 명령어로 최적화 할 수 있습니다. 옵티마이 저는 여러 개의 다른 인코딩을 생성하고 크기 또는 실행 속도에 따라 판단 할 수도 있습니다.
로부터 문서
- 부정적인 영향이나 향후 앱 스토어 제출을 손상시키지 않고 위의 방법을 사용할 수 있습니까?
비트 코드를 사용하면 다른 빌드를 제출하지 않고도 애플이 앱을 최적화 할 수 있습니다. 그러나 앱 번들의 모든 프레임 워크 및 앱에서이 기능을 활성화 한 경우에만이 기능을 활성화 할 수 있습니다. 도움이되지만 부정적인 영향을 미치지 않아야합니다.
- ENABLE_BITCODE는 실제로 무엇을합니까? 향후 비 선택적 요구 사항이 있습니까?
iOS 앱의 경우 비트 코드가 기본값이지만 선택 사항입니다. 비트 코드를 제공하는 경우 앱 번들의 모든 앱 및 프레임 워크에 비트 코드가 포함되어야합니다. watchOS 앱의 경우 비트 코드가 필요합니다.
- 활성화 / 비활성화하면 성능에 영향이 있습니까?
App Store 및 운영 체제는 설치 공간을 최소화하면서 사용자의 특정 장치 기능에 맞게 앱 제공을 조정하여 iOS 및 watchOS 앱 설치를 최적화합니다. App Thinning이라고하는이 최적화를 통해 가장 많은 장치 기능을 사용하고 최소 디스크 공간을 차지하며 Apple에서 적용 할 수있는 향후 업데이트를 수용하는 앱을 만들 수 있습니다. 더 빠른 다운로드와 다른 앱 및 콘텐츠를위한 더 많은 공간은 더 나은 사용자 경험을 제공합니다.
성능에 영향을 미치지 않아야합니다.
참고 URL : https://stackoverflow.com/questions/31088618/impact-of-xcode-build-options-enable-bitcode-yes-no
'IT story' 카테고리의 다른 글
쉘 스크립트에서 주석 차단 (0) | 2020.04.20 |
---|---|
jQuery를 사용하여 페이지로드시 양식 입력 텍스트 필드에 집중하는 방법은 무엇입니까? (0) | 2020.04.20 |
큰 MS SQL .sql 파일을 어떻게 가져 옵니까? (0) | 2020.04.19 |
HTML에서는 ✓로 확인 표시를 할 수 있습니다. (0) | 2020.04.19 |
여러 클래스에 스타일을 한 번에 적용하려면 어떻게해야합니까? (0) | 2020.04.19 |