일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리펙토링
- Xcode
- uiscrollview
- swift documentation
- Clean Code
- UITextView
- tableView
- UICollectionView
- Human interface guide
- SWIFT
- clean architecture
- 리팩토링
- combine
- RxCocoa
- ios
- map
- uitableview
- Refactoring
- 클린 코드
- collectionview
- ribs
- rxswift
- 리펙터링
- 스위프트
- Protocol
- MVVM
- 애니메이션
- Observable
- HIG
- swiftUI
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - XCode] Universal App, armv7, arm64 멀티 디바이스 대응, 바이너리 파일 설정 (CISC, RISC) 본문
[iOS - XCode] Universal App, armv7, arm64 멀티 디바이스 대응, 바이너리 파일 설정 (CISC, RISC)
jake-kim 2021. 12. 18. 02:01arm이란?
- ARM(Acorn RISC Machine) 기반의 cpi를 탑재한 것
- 컴퓨터 구조 기초 - Architecture의 종류
- CISC (Complex Instruction Set Computer): 모든 코드 언어 문장들에 대해 각각 기계 명령어가 대응
(복잡하고 기능이 많은 명령어, 복합 명령을 갖고 있어서 호환성이 높은 장점, 전력소모가 크고 속도가 느린 단점) - RISC (Reduced Instruction Set Computer): CISC의 명령어 중 주로 쓰이는 것만을 추려서 하드웨어로 구현
(CPI의 명령어를 최소하하여 단순한 형태, 효율적, 호환성 부족, 속도가 빠르고 전력 소모가 적고 가격이 저렴)
- CISC (Complex Instruction Set Computer): 모든 코드 언어 문장들에 대해 각각 기계 명령어가 대응
- Intel은 보통 CISC 방식을 사용하고 Arm은 주로 RISC 방식 사용
- 애플은 arm 맥북을 개발하면서 arm에서 사용된 app도 맥북에서 실행 가능
(arm에서 Rosetta로 몇 프로그램을 실행시키는 이유 - Intel cpi에서 CISC방식으로 사용되었기 때문에 번역기가 필요)
armv7, arm64란?
- armv7
- 임베디드 기기에 많이 사용되는 RISC 프로세서
- 저전력을 사용하도록 설계
- 32bit 아키텍처
- iPhone에서의 armv7
- iPhone5s 미만 (iOS 6.0이하)
- arm64
- iPhone5s, iPad4부터 모두 arm64 사용
- arm 아키텍처의 64비트 확장 버전
- iPhoen에서의 arm64
- iPhone5s 이상 (iOS 7.0 이상)
- iPad Air2, Pro 이상
- iPad 4 이상
더 구체적인 Device (iPhone, iPad 별) Architecture 정보: https://developer.apple.com/kr/support/required-device-capabilities/#ipad-devices
Xcode 에서 CPI Architecture 설정
- Project, Target -> Build Settings -> Architectures에 존재
- 주의
- iPhone Simulator는 Mac의 아키텍처를 그대로 따르므로 Intel이나 Arm CPU를 사용
- 확인
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json
- arm64, x86_64 사용
Architectures에 arm64, arm7 관리 방법
- iPhone 13에서 빌드할 경우 armv7는 필요없고 arm64만 필요하므로 이 설정은 아래에서 설정 가능
- Build Active Architecture Only의 값을 Yes로 할 경우, 현재 연결된 기기를 감지해 그 기기에 맞는 아키텍쳐용 빌드만 생성
- No로 할 경우에는 위 Architectures에서 설정한 값 모든 CPU를 심는 것
Multi device 대응 - Universal app 세팅
- Apple의 UIRequiredDeivceCapabilities 문서에 따르면, armv7으로 RequiredDeviceCapabilities 세팅을 시도하면 Universal 앱이 가능
- UIRequiredDeviceCapabilities 값 설정은 Property List에서 사용
- 프로젝트 폴더에서 Info.plist에 아래 코드를 추가
<key>UIRequiredDeviceCapabilities</key> <array> <string>armv7</string> </array>
* 참고
- Information Property List: https://developer.apple.com/documentation/bundleresources/information_property_list
- UIRequiredDeviceCapabilities: https://developer.apple.com/documentation/bundleresources/information_property_list/uirequireddevicecapabilities
- iOS, iPad CPI Architecture: https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/
- ARM 아키텍처 wiki: https://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
- ARM 아키텍처, iPhone: https://www.theiphonewiki.com/wiki/ARMv7
- ARM 아키텍처 stack overflow: https://stackoverflow.com/questions/63623747/xcode-build-target-difference-arm64-and-armv7-arm64
'Git, CocoaPods, Xcode, Shell' 카테고리의 다른 글
[iOS - swift] GitHub 깃 허브 contribute 방법 (컨트리뷰트, cocoapods 수정해서 사용하는 방법) (0) | 2022.04.17 |
---|---|
[iOS - swift] github submodule (서브 모듈), SourceTree 사용 (git submodule update) (4) | 2022.03.24 |
[iOS - swift] Xcode에서 커스텀 자동 완성 만드는 방법, 관리 방법 (Code Snippet) (0) | 2021.12.17 |
[iOS - swift] 2. GitHub Action 사용 방법 (CI/CD) (2) | 2021.12.05 |
[iOS - swift] Xcode 코드 템플릿 (File Template, Custom File Template) (0) | 2021.11.15 |