Core Data 모델 로드 시 리소스 번들을 우선 사용하는 이유
1. 프레임워크 번들
일반적으로 .xcdatamodeld
를 프레임워크 타깃에 포함시키면, 빌드 결과로 나온 .momd
파일은 프레임워크 번들 내부에 들어간다.
이 경우에는 단순히 접근해도 모델을 정상적으로 찾을 수 있다.
1 | let bundle = Bundle(for: CoreDataManager.self) |
2. 리소스 번들
하지만 빌드/배포 방식에 따라 .momd
가 별도의 리소스 번들 안으로 들어가는 경우가 있다.
대표적인 예시:
- CocoaPods:
resource_bundles
를 사용했을 때 - 정적 프레임워크 + 리소스 번들 타깃을 분리했을 때
- 특정 빌드 설정으로 리소스를 따로 묶었을 때
이런 경우 산출물 구조는 다음과 같다.
1 | AssignmentSDK.framework/ |
즉, 프레임워크 번들에는 모델이 없고, 리소스 번들에만 존재!!
3. 안전한 처리 방식
빌드 환경에 따라 리소스 위치가 달라질 수 있으므로, 보통 다음과 같이 처리하면 좋다.
1 | let sdkBundle = Bundle(for: CoreDataManager.self) |
- 리소스 번들이 있으면 → 그 안에서 모델을 탐색
- 없으면 → 프레임워크 번들에서 모델을 탐색
4. 요약
- 모델이 프레임워크 번들에 있으면
Bundle(for:)
만으로 충분! - 모델이 리소스 번들에만 있으면
Bundle(url:)
로 해당 번들을 직접 로드! - 따라서 “리소스 번들을 우선 확인 → 없으면 프레임워크 번들 사용” 하는 것이 가장 안전한 방법