집에서는 M1 Pro 맥북을 사용중이고, 최근 회사에서는 M1 iMac을 사용중인데요.
실리콘 환경에서의 빌드에서 문제가 가끔 발생하여,
이를 해결한 케이스들을 정리해봅니다.
(이 글은 추가 케이스가 생길 때 업데이트될 수 있습니다)
(마지막 업데이트: 2023.01.17)
#1
외부 framework는 가급적 xcframework를 쓰는 것이 좋음.
기존 lipo로 묶는 유니버셜framework는 arm단말용 바이너리+arm시뮬레이터용 바이너리가 묶일수가 없음.
carthage는 0.37.0부터 xcframework를 지원.
#2
터미널(혹은 iterm)을 쓰는 경우 homebrew, npm, pods 등 패키지관리자 설치시 문제가 발생할 수 있는데,
실행할 때 로제타로 실행한 후 설치하면 해결.
(앱 '정보 가져오기' 후 'Rosetta를 사용하여 열기')

#3
프로젝트에 FirebaseCrashlytics를 사용중이고,
빌드시 DSYM을 업로드해주는 스크립트가 세팅되어 있을 때,
아래와 같은 에러가 발생하는 케이스.
(프로젝트 경로)/Pods/FirebaseCrashlytics/run: line 61:
(프로젝트 경로)/Pods/FirebaseCrashlytics/
upload-symbols: Bad CPU type in executable
Command PhaseScriptExecution failed with a nonzero exit code
(#2)케이스와 유사하게, Xcode를 Rosetta로 실행해서 빌드해주면 해결.
⚠️Xcode 14.3부터는 Rosetta로 실행하는 것을 지원하지 않습니다.
#4 (2022.09.25 추가)
pod init 혹은 pod install 시 아래와 같은 에러가 발생할 때,
force_encoding' can't modify frozen string (frozenerror) cocoapods
CocoaPod을 삭제 후 Homebrew를 통해 재설치를 하면 되는데,
일단 1. 터미널에서 CocoaPod을 삭제해주고,
sudo gem uninstall cocoapods
Homebrew로 재설치를 해주기 전에, 아래 명령어 실행해서
brew config
'HOMEBREW_PREFIX' 값이 '/opt/homebrew' 인지 확인.
'/opt/homebrew'가 아니라 '/usr/local'로 되어 있다면?
intel 용으로 Cocoapods 패키지를 설치해주기 위한 여정을 시작.
아래 명령어 실행해주고,
/opt/homebrew/bin/brew doctor
실행 결과에 나오는 echo ~~ 나오는 줄을 복사해서 실행.
echo 'export PATH=" /opt/homebrew/bin:$PATH"! >> ~/.zshre
그러면 이제 brew config의 HOME_BREW가 /opt/homebrew로 적용.
이제 Homebrew로 Cocoapods를 설치
brew install cocoapods
#5 (2023.01.17 추가)
SwiftUI Preview를 적용하여 빌드를 하는데,
다음과 같은 에러가 발생할 때
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
| RemoteHumanReadableError
|
| LoadingError: failed to load library at path "/Users/(User명)/Library/Developer/Xcode/DerivedData/(Project명)-...................................(생략).................................... (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), ......
이런 에러가 발생한다면 실리콘 맥환경에서 Xcode를 '로제타'로 실행하고 있을 수 있습니다.
저는 회사에서 메인앱 빌드 환경에서 #3문제를 해결하기 위해서 로제타로 Xcode를 사용하고 있었는데,
다른 앱의 새 화면 개발을 위해 Preview를 사용하려고 시도하다가 위 문제의 해결방법을 찾다가 로제타로 실행하면 발생할 수 있는 문제라는 걸 알았습니다. 'Resetta를 사용하여 열기' 체크를 해제하면 바로 해결이 됩니다.
have 'x86_64', need 'arm64' 라는 메세지는 '당신이 로제타로 Xcode를 실행하여 intel(x86_64)용으로 빌드가 되었는데, 시뮬레이터는 실리콘(arm64)용이 필요합니다'라는 의미인 듯?
(참고: https://developer.apple.com/forums/thread/718859)
⚠️Xcode 14.3부터는 Rosetta로 실행하는 것을 지원하지 않습니다.

집에서는 M1 Pro 맥북을 사용중이고, 최근 회사에서는 M1 iMac을 사용중인데요.
실리콘 환경에서의 빌드에서 문제가 가끔 발생하여,
이를 해결한 케이스들을 정리해봅니다.
(이 글은 추가 케이스가 생길 때 업데이트될 수 있습니다)
(마지막 업데이트: 2023.01.17)
#1
외부 framework는 가급적 xcframework를 쓰는 것이 좋음.
기존 lipo로 묶는 유니버셜framework는 arm단말용 바이너리+arm시뮬레이터용 바이너리가 묶일수가 없음.
carthage는 0.37.0부터 xcframework를 지원.
#2
터미널(혹은 iterm)을 쓰는 경우 homebrew, npm, pods 등 패키지관리자 설치시 문제가 발생할 수 있는데,
실행할 때 로제타로 실행한 후 설치하면 해결.
(앱 '정보 가져오기' 후 'Rosetta를 사용하여 열기')

#3
프로젝트에 FirebaseCrashlytics를 사용중이고,
빌드시 DSYM을 업로드해주는 스크립트가 세팅되어 있을 때,
아래와 같은 에러가 발생하는 케이스.
(프로젝트 경로)/Pods/FirebaseCrashlytics/run: line 61:
(프로젝트 경로)/Pods/FirebaseCrashlytics/
upload-symbols: Bad CPU type in executable
Command PhaseScriptExecution failed with a nonzero exit code
(#2)케이스와 유사하게, Xcode를 Rosetta로 실행해서 빌드해주면 해결.
⚠️Xcode 14.3부터는 Rosetta로 실행하는 것을 지원하지 않습니다.
#4 (2022.09.25 추가)
pod init 혹은 pod install 시 아래와 같은 에러가 발생할 때,
force_encoding' can't modify frozen string (frozenerror) cocoapods
CocoaPod을 삭제 후 Homebrew를 통해 재설치를 하면 되는데,
일단 1. 터미널에서 CocoaPod을 삭제해주고,
sudo gem uninstall cocoapods
Homebrew로 재설치를 해주기 전에, 아래 명령어 실행해서
brew config
'HOMEBREW_PREFIX' 값이 '/opt/homebrew' 인지 확인.
'/opt/homebrew'가 아니라 '/usr/local'로 되어 있다면?
intel 용으로 Cocoapods 패키지를 설치해주기 위한 여정을 시작.
아래 명령어 실행해주고,
/opt/homebrew/bin/brew doctor
실행 결과에 나오는 echo ~~ 나오는 줄을 복사해서 실행.
echo 'export PATH=" /opt/homebrew/bin:$PATH"! >> ~/.zshre
그러면 이제 brew config의 HOME_BREW가 /opt/homebrew로 적용.
이제 Homebrew로 Cocoapods를 설치
brew install cocoapods
#5 (2023.01.17 추가)
SwiftUI Preview를 적용하여 빌드를 하는데,
다음과 같은 에러가 발생할 때
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
| RemoteHumanReadableError
|
| LoadingError: failed to load library at path "/Users/(User명)/Library/Developer/Xcode/DerivedData/(Project명)-...................................(생략).................................... (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), ......
이런 에러가 발생한다면 실리콘 맥환경에서 Xcode를 '로제타'로 실행하고 있을 수 있습니다.
저는 회사에서 메인앱 빌드 환경에서 #3문제를 해결하기 위해서 로제타로 Xcode를 사용하고 있었는데,
다른 앱의 새 화면 개발을 위해 Preview를 사용하려고 시도하다가 위 문제의 해결방법을 찾다가 로제타로 실행하면 발생할 수 있는 문제라는 걸 알았습니다. 'Resetta를 사용하여 열기' 체크를 해제하면 바로 해결이 됩니다.
have 'x86_64', need 'arm64' 라는 메세지는 '당신이 로제타로 Xcode를 실행하여 intel(x86_64)용으로 빌드가 되었는데, 시뮬레이터는 실리콘(arm64)용이 필요합니다'라는 의미인 듯?
(참고: https://developer.apple.com/forums/thread/718859)
⚠️Xcode 14.3부터는 Rosetta로 실행하는 것을 지원하지 않습니다.
