iOS

Xcode14 Apple Clang Compiler gnu++20

StudySpare 2023. 1. 3. 14:03
반응형

Pixabay님의 사진: https://www.pexels.com/ko-kr/photo/159751/

 

Xcode14 ReleaseNote

Xcode14 Release Note Apple Clang Compiler를 보면 C++ 컴파일러의 기본 옵션이 변경(93456065)된 걸 알 수 있다.

 

더보기

Apple Clang Compiler

New Features

  • New C++ projects you create in Xcode use C++20 language dialect by default. (93456065)
  • Several C++20 and C++2b papers have been implemented:
    • C++20 papers that have been implemented:
      • P0692R1 - Access checking on specializations
      • P0388R4 - Permit conversions to arrays of unknown bound
    • C++2b papers that have been implemented:
      • P1938R3 - if consteval
      • P1401R5 - Narrowing contextual conversions to bool
      • P1949R7 - C++ identifier syntax using Unicode Standard Annex 31
      • P2360R0 - Extend init statement to allow alias declaration (93898598)

Resolved Issues

  • Fixed: Xcode doesn’t provide semantic highlighting and jump-to-definition support for C++20 concept declarations and the requires clauses in templates. (93046529)

Deprecations

  •  
  • Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14.
  • Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” The capability to build with bitcode will be removed in a future Xcode release. IPAs that contain bitcode will have the bitcode stripped before being submitted to the App Store. Debug symbols can only be downloaded from App Store Connect / TestFlight for existing bitcode submissions and are no longer available for submissions made with Xcode 14. (86118779)

 

그 외 주요 변경 사항을 같이 보자면, 

  • Xcode14 부터 bitcode 옵션이 deprecated 되었고, 이를 이용해 빌드한 경우 앱스토어에서 승인하지 않는다고 한다.(86118779)
  • C++ 20부터 지원하는 템플릿 내 concept 선언과 require 절로 점프하지 못하던 이슈를 해결했다고 한다.(93046529)
    • 컴파일 단의 에러의 위치나 원인을 좀 더 명확히 표시 할 수 있게 되었다는 뜻.

 

What can we do with GUN++20

Xcode14 이상에서 신규 프로젝트를 생성하면 아래 그림과 같이 build settings에서 `C Language Dialect` 와 `C++ Launguage Dialect` 의 값이 각각 `gun11`과 `gun++20`으로 설정된 걸 확인 할 수 있다.

xcode14 에서 생성한 프로젝트의 build settings

 

Xcode14 Release Note Apple Clang Compiler를 보면 C++ 컴파일러의 기본 옵션이 변경(93456065)된 걸 알 수 있다.

  • C++20 papers that have been implemented:
    • P0692R1 - Access checking on specializations
    • P0388R4 - Permit conversions to arrays of unknown bound

위 변경 사항에 대한 자세한 내용은 여기(docs for C++20)를 참고.

아마 SIGABRT 나 SIGSEGV 같은 crash의 원인이나 위치가 조금 더 정확해질 수 있을 것 같다(아닐수도....). 가끔 '여기서 왜 OutOfIndex 가 나지?' 하고 이해가 안돼는 크래시도 조금 줄어들지도 모르겠다.

C++ compiler의 가본값 변경과 함께 C compiler의 기본값도 gnu11 로 변경되었다. gnu11 current support library

 

 

Upgrade to GNU++20

Xcode14가 나오기 전에 생성한 프로젝트라면, GNU 버전이 각각 `gun11`과 `gun++20`미만일 것이다.  Xcode14부터 바뀐 기본 값이 변경 되었으니, 변경된 값으로 빌드 세팅을 바꾸고 테스트해봐도 좋을 것 같다.

반응형