4월 이후로 Apple은 iOS SDK 16.1 이후 버전, Xcode는 14.1 버전 이상인 경우에만 appstore connect에 app을 배포 할 수 있게 정책을 변경했습니다. xcode 14.1 버전은 macOS 12.5 Monterey 이상에서만 호환이 가능 하기 때문에 이 기회에 macOS 13 Ventura 업데이트를 진행하였습니다. 그리고 어김없이 기존 개발 환경과 호환되지 않아 에러를 발생시키는 경우가 생겼습니다. 오늘은 macOS 13 Ventura 업데이트 이후 만난 에러들과 해결방법을 정리해보겠습니다.
pod 에러
Could not build the precompiled application for the device.
Error (Xcode): File not found /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
Error (Xcode): Linker command failed with exit code 1 (use -v to see invocation)
ios/podfile 하단에 아래 코드를 추가 합니다
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end
end
그리고 pod update를 실행합니다.
iOS 빌드 에러
iOS 빌드 중에 yaga package에서 아래 에러가 발생합니다.
Use of bitwise '|' with boolean operands
해결 방법
1. 임시 해결 방법은 에러가 발생한 부분에 '|' 를 '||'로 변경하는 것입니다. package 파일을 다시 install 할 경우 같은 애러가 다시 발생할 것입니다.
2. 아래 프로세스를 따라하시면 에러를 해결 할 수 있습니다.
- 아래 커맨드로 patch-package 를 설치 합니다.
npm i patch-package
- package.json 파일에 postinstall script를 추가합니다.
"scripts": {
+ "postinstall": "patch-package"
}
- 에러가 발생한 부분의 '|'을 '||'로 수정 합니다.
- patch-package를 실행합니다
npx patch-package react-native
[CP]Embed Pods Frameworks Error 에러
Showing All Errors Only
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/mac/Library/Developer/Xcode/DerivedData/challenge-eynqkhwebqazmdcyzhgpqukmqyhr/Build/Intermediates.noindex/ArchiveIntermediates/challenge.production/IntermediateBuildFilesPath/challenge.build/Release-iphoneos/challenge.build/Script-00EEFC60759A1932668264C0.sh (in target 'challenge' from project 'challenge')
cd /Users/workspace/react-native/challenge/ios
/bin/sh -c /Users/mac/Library/Developer/Xcode/DerivedData/challenge-eynqkhwebqazmdcyzhgpqukmqyhr/Build/Intermediates.noindex/ArchiveIntermediates/challenge.production/IntermediateBuildFilesPath/challenge.build/Release-iphoneos/challenge.build/Script-00EEFC60759A1932668264C0.sh
mkdir -p /Users/mac/Library/Developer/Xcode/DerivedData/challenge-eynqkhwebqazmdcyzhgpqukmqyhr/Build/Intermediates.noindex/ArchiveIntermediates/challenge.production/BuildProductsPath/Release-iphoneos/challenge.app/Frameworks
Symlinked...
rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Alamofire.framework" "/Users/mac/Library/Developer/Xcode/DerivedData/challenge-eynqkhwebqazmdcyzhgpqukmqyhr/Build/Intermediates.noindex/ArchiveIntermediates/challenge.production/InstallationBuildProductsLocation/Applications/challenge.app/Frameworks"
building file list ... rsync: link_stat "/Users/workspace/react-native/challenge/ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Alamofire.framework" failed: No such file or directory (2)
done
sent 29 bytes received 20 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/97f6331a-ba75-11ed-a4bc-863efbbaf80d/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
Command PhaseScriptExecution failed with a nonzero exit code
Command PhaseScriptExecution failed with a nonzero exit code
이 에러는 검색결과 xCode 14.2에서는 발생하지 않고 xCode 14.3 에서 발생하는 에러라고합니다.
해결방법
root/Pods/Pods-challenge/Pod-[프로젝트이름]-frameworks.sh 이동 후
source="$(readlink "${source}")"
이부분을
source="$(readlink -f "${source}")"
이렇게 변경 해주시면 됩니다.
macOS 외에 다른 추가 에러
1. npm install 시 에러
Could not resolve dependency:
npm ERR! peer react-native@"^0.63.0" from react-native-auto-height-image@3.2.4
위 에러는 macOS 와는 별개이긴 하지만 이번 기회에 node 및 npm 버전을 올려서 발생한 애러 입니다.
npm 버전이 7이상 부터는 패키지를 설치할 때 peer dependency를 자동으로 설치하는데 이부분에서 버전이 중복되어 발생한다고 합니다
해결방법 : install 뒤에 --force 나 --legacy-peer-deps 태그를 활용해준다
npm install --force
npm install --legacy-peer-deps