iOS) CPU Architecture에 관하여

어흥·2024년 4월 2일
0

iOS

목록 보기
2/10

안녕하세요! 오늘은 CPU Architecture에 대해서 포스팅해보려고 합니다. 2020년 Apple이 M1 칩을 발표했습니다. 저는 M1을 구입했는데 벌써 M3까지 나왔네요! 이렇게 Apple silicon 기반의 Mac이 출시되어 MacOS에서 두 개의 아키텍처를 갖게 되었습니다. 이 변화가 Xcode에서 시뮬레이터 빌드에 영향을 끼칩니다. 그래서 오늘은 Apple Architecture에 대해서 작성해보겠습니다!
WWDC 2020

CPU Architecture

CPU Architecture는 명령어 세트 아키텍처(ISA)를 기준으로 분류할 수 있습니다. CISC, RISC 2종류로 나눌 수 있습니다.

CISC (~Intel)

  • 모든 코드 언어 문장들에 대해 각각 기계 명령어가 대응
  • 호환성이 좋음
  • 전력소모가 크고 속도가 느림

RISC (~ARM)

  • CISC 명령어 중 주로 쓰이는 것만 추려서 하드웨어로 구현
  • CPI(Cycle Per Instruction)을 최소화한 단순한 형태
  • 속도가 빠르고 가격이 저렴
  • 전력소모가 적어 효율적
  • 호환성 부족

iOS CPU Architecture

iOS는 arm 계열의 CPU 아키텍처를 사용합니다.

CPU Architecture모델
arm7iPhone 4S 이전 기종
armv7siPhone 4S 이전 기종
arm64아이폰 5S 이후 기종

Mac CPU Architecture

Mac의 2 종류의 CPU 아키텍처를 사용합니다. Xcode의 시뮬레이터는 Mac의 CPU 아키텍처에 종속됩니다.

CPU Architecture모델
x86_64(x64)2005년부터 2021년 사이에 출하된 Intel 기반의 Mac
arm642020년 말 이후에 출하된 Apple Silicon 기반의 Mac

Apple Silicon이 나오기 전 Mac에서 시뮬레이터 빌드를 할때 x86_64 아키텍처 만을 사용하였습니다. Apple silicon를 출시하면서 Xcode12 이후부터 x86_64, arm64 두 개의 아키텍처를 호환하게 되었습니다.

아이폰 시뮬레이터는 맥에서 실행되기 때문에, 실행한 맥의 CPU아키텍처를 따라갑니다. 현재 맥은 x64에서 arm로 넘어가는 과도기로, Xcode12는 두 칩셋을 모두 지원합니다. 이에 따라 Xcode12는 두 칩셋에 해당하는 시뮬레이터를 빌드하려고 합니다.

이때 x64칩셋의 맥에서, arm 시뮬레이터를 빌드하는데에서 오류가 발생합니다. 원래 iOS 앱은 arm 기반이므로 arm용 앱을 빌드하는 것이 당연히 가능했습니다.

문제는 x64 맥에서 arm 기반 시뮬레이터를 빌드하는 것이 문제인 것입니다.

따라서 x64 기반(인텔) 맥에서는 arm시뮬레이터를 빌드하지 말라는 조정이 필요합니다. 해결하기 위해 빌드 시 ARM 아키텍처인 시뮬레이터는 제외하겠다고 설정하면 됩니다.

  • Build Settings — Excluded Architecture에서 Debug 부분에 Any iOS Simulator SDK: arm64를 설정하면 됩니다.
  • 이렇게 되면 Xcode가 시뮬레이터를 Rosetta(x86)로 돌리게 되며 성능 저하가 발생합니다.

정리

지금까지 ios 관점에서 cpu architecture에 대해서 알아보았습니다. 컴퓨터 구조 및 하드웨어 쪽이어서 많이 생소해서 이해하는데 힘들었는데 이 포스팅 작성하면서 많이 정리가 된거 같아요. 어려운 내용이어도 꼭 배워야할 내용인 거 같아서 다른 분들도 읽어보시면 좋을 거 같아요!

참고
iOS'DoggyFootstep:티스토리
오류를 마주친 그대에게; building for iOS Simulator, but linking in object file built for iOS

0개의 댓글