개발을 하다보면 수정사항이 반영이 잘 안된다거나 하는 상황에서 yarn ios
로 재빌드를 하는 경우가 있다. 잘 빌드가 되면 다행인데, 가끔 빌드가 실패했다고 뜰 때가 있다.
보통 Xcode 내의 Derived Data
라는 것을 지워주면 된다.
error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65.
> rm -rf ~/Library/Developer/Xcode/DerivedData
해결은 했는데, 이 Derived Data
라는건 정확히 뭔지 궁금해서 찾아봤다. 느낌상 캐시 데이터 같았는데, 얼추 맞다.
Xcode 에서의 Derived Data 란?
Xcode 가 채택하고 있는 캐시 체계이고, iOS 앱을 빌드할 때 매번 처음부터 빌드하지 않도록 하면서 시간을 절약할 수 있게 해준다.
Derived Data 가 문제가 되는 이유는?
여러 빌드를 거치며, 에러가 발생하면 그것 또한 캐싱하기 때문에 현재 발생하고 있는 에러가 아닌 과거 에러를 포함하여 빌드할 수 있기 때문이다.
이러한 맥락에서 ~/Library/Developer/Xcode/DerivedData
를 삭제한 후 다시 yarn ios
를 통해 빌드하면, 기존 빌드 내용에 영향을 받지 않는 새 빌드를 수행할 수 있다.
여담으로 그렇다면 Derived Data
는 정확히 어떤 항목들을 캐싱할까? 만약 개발 중에 빌드 에러가 난다면, 다음 항목들을 확인하고 간단하게 이 폴더를 지워서 해결할 수 있는 문제인지 짐작해보는 것도 좋을 것 같다.
- Intermediate Build Results
기존 빌드 결과를 캐싱한다. 에러가 발생한 빌드를 그대로 가져왔을 수 있다.- Generated Indexes
프로젝트 내에서 검색, 빠른 탐색에 사용되는 인덱스를 캐싱한다.- Module Caches
Xcode가 미리 컴파일된 모듈 파일(.pcm)을 캐싱한다. 개발하면서 중간에 npm이나 yarn 패키지를 새로 추가하거나 삭제했을 경우 기존에 컴파일된 모듈 캐시가 문제가 될 수 있다.- Logs
로그를 캐싱한다.