먹고 기도하고 코딩하라

Xcode 15에서 iOS 15 미만 기기 빌드 에러 이슈 본문

Xcode 15에서 iOS 15 미만 기기 빌드 에러 이슈

사과먹는사람 2023. 11. 24. 21:23
728x90
728x90

 

우리 회사 앱은 iOS 12까지 지원하고 있는데, 얼마 전에 12.5 유저가 앱을 켜자마자 바로 강제종료된다는 CS가 들어왔다.

센트리에도, 크래시리틱스에도 에러가 잡히지 않아서 이상하게 생각하고 있었다.

정상적으로 사용했다고 보고된 마지막 사용 로그를 살펴보는데 앱 버전이 달랐다. 그렇다면 업데이트된 버전 사이에서 뭔가 달라졌을 텐데 하는 생각이 들어 iOS 12 테스트 폰을 빌려 빌드를 해봤다.

과연 앱이 실행하자마자 바로 강종됐다. 콜스택에 뭐가 쌓인 것도 아니고, AppDelegate의 가장 첫 메소드에 찍은 브레이크포인트도 안 타고 그냥 강제종료. Thread 1: EXC_BAD_ACCESS 와 나에겐 별 도움이 되지 않는 주소값을 함께 제공하는 차가운 메시지와 함께…

지푸라기라도 잡는 마음에 사이드바의 에러 메시지를 긁어 검색을 해봤다.

 

__cxx_global_var_init

 

결과로 iOS 14 앱이 Xcode 15에서 빌드하면 켜지지 않고, Xcode 14에서 빌드하면 켜진다는 깃허브 이슈를 찾아볼 수 있었다. React Native 쪽이어서 반신반의하는 마음으로 문서를 봤는데 우리 이슈와 비슷한 것 같아서 아직 지우지 않은 Xcode 14.3.1 버전으로 빌드를 해봤다.

그랬더니..

된다…

 

운영 이슈 중 중요도가 높은 강제종료, 이용 불가 이슈는 슬랙방에 올라올 때마다 항상 심장이 떨리는데, 해결하면 또 긴장한만큼 도파민이 폭발한다. 이런 묘미(?)에 운영 이슈의 늪에서 허덕이는 듯하다… ^^;

아무튼 얼른 공유를 드렸다. 그리고 iOS 13, 14 폰으로도 똑같이 해봤는데 과연 iOS 15 미만 폰은 Xcode 15로 빌드했을 때 빌드 성공 후 앱이 시동되자마자 강제종료됐다.

 

원인은 Xcode 15에서 새로 도입된 링커가 iOS 15 미만 지원을 안 하는 데에 있었다. 자세한 내용은 Release Notes에 있는데, 이미 iOS 15, macOS 12, watchOS 8, tvOS 15 미만은 충돌이 나는 것을 알고 있는지 Known Issues로 관리하고 있었다.

 

이 문제를 해결하는 방법은 2가지다.

  • minimum deployment target을 15로 올리기
  • Build Settings 탭에서 OTHER_LDFLAGS에 -Wl, -ld_classic을 각각 추가

OTHER_LDFLAGS에 플래그를 이렇게 추가해주면, 예전 링커를 사용하게 되어 이전 버전을 지원할 수 있다.

 

 

728x90
반응형

'' 카테고리의 다른 글

Xcode 15 App Extension 버전 조정하기  (1) 2023.11.14
[Xcode] 14.3와 [weak self] 캡처  (0) 2023.06.15
Comments