본문 바로가기

TIL

[TIL] Realm-Swift 라이브러리 SPM Build 오류 대응(Privacy Manifest)

상황

5월 1일부터 도입된 Privacy Manfest 대응을 위해 Realm-Swift 라이브러리를 업데이트 후, 빌드하다 발생하였던 오류에 관해 대응했었던 과정을 기록하고 공유하고자 글을 남깁니다. 

 

문제발생

위 상황 설명란에서 선 언급한 바와 같이 Realm-Swift를 10.48.1 버전에서 10.50.0 버전으로 업데이트 후, 빌드하는 과정 중 다음과 같은 오류가 발생하였습니다.

 

Swift package target 'Realm' is linked as a static library by 'MyAppName' and 'Realm', but cannot be built dynamically because there is a package product with the same name.

 

위 오류를 해석해보자면 패키지 타겟인 'Realm'이 static library로 연결(link)되어 있는데, 동일한 이름의 패키지 제품(product)로 인해 해당 타켓 Realm을 dynamic하게 빌드하지 못한다 고 합니다.

 

뭔가 원인은 동일한 이름의 제품에 있어 보입니다.

해결과정

이리저리 구글에서 검색 중 Realm-Swift 깃허브 issue 중 #8566에서 해당 이슈가 Privacy Manifest를 대응하기 위한 버전 10.49.3에서 비롯되었다는 사실을 알 수 있었습니다.

 

해당 issue에서 제시된 방법은 Realm-Swift 패키지 설치 시, RealmSwift와R Realm 중 하나만 선택하여 설치한 다음(참고로 전 RealmSwift 패키지을 선택하였습니다), 설치된 패키지를 Dynamic Framework로 빌드하기 위해선 프로젝트 TargetsGenegral 탭에 있는 Frameworks, Libraries, and Embedded Content 섹션에서 설치된 패키지(RealmSwift나 Realm)을 'Do Not Embed'에서 'Embed & Sign'으로 변경해주어야 한다고 합니다.

 

 

위 사진을 보시면 Dynamic Framework로 빌드하기 위한 설정을 Optional이라고 명시되어 있지만 실제로 Realm-Swift v10.49.3에 대한 Release Note를 살펴보면 Static Framework로 빌드할 경우, Privacy Manifest를 개발자가 직접 지정해주어야 한다고 합니다. 하지만 Dynamic Framework로 빌드를 하면 자동으로 Privacy Manifest에 대응이 되기 때문에 개인적으로 위 사진과 같은 설정 과정을 거처 Dynamic Framework로 빌드하는 것이 Privacy Manifest에 대한 좀 더 효과적인 방법으로 보입니다.

 

추가적으로 마주한 오류

위에서 설명한 것처럼 설정해준 후 이제 빌드가 잘 되겠지? 하고 빌드 버튼을 클릭했더니 또 다른 오류를 마주하게 되었습니다.😭😭

 

제가 마주했던 오류 사항은 다음과 같았습니다.

 

Cycle inside MyAppName; building could produce unreliable results.

 

검색해 보니 이 오류가 발생한 이유가 제가 위에서 설치된 패키지(RealmSwift나 Realm)을 'Do Not Embed'에서 'Embed & Sign'으로 변경해주어 TargetsBuild Phases 탭에서 Embed Frameworks 항목이 Run Script 밑에 위치해 빌드시 빌드 순서가 달라졌었기 때문이었습니다.(관련 링크

 

그래서 Run Script와 Embed Frameworks의 위치를 바꾸어 문제 해결하였습니다.

느낀점

이 때까지 제가 Realm-Swift 패키지에 대한 Privacy Manifest 대응하는 과정에 대해 간략히 나열해 보았습니다.

사실 이번 게시글을 작성하면서 Static Framework, Dynamic Framework에 대한 용어를 처음 접하게 되었습니다.

그래서 아직 오늘 마주하였던 오류가 어떻게, 왜 해결된 것인지 잘 알지 못한 상태입니다.

따라서 추후 기회가 되면 Static Framework와 Dynamic Framework에 대한 내용도 다뤄볼 예정입니다.

 

지금까지 글 읽어주셔서 감사합니다.

 

'TIL' 카테고리의 다른 글

[TIL] Moya 첫 적용기(feat. 사용법)  (0) 2024.06.04
[TIL] MVI 패턴  (0) 2024.06.04
[TIL] Resizable Image 만드는 법  (0) 2024.05.16
[TIL] Pinterest UI 구현  (0) 2024.05.15
[TIL] @propertyWrapper를 활용한 UserDefaults 리팩토링  (0) 2024.05.14