2025. 11. 20. 23:30ㆍiOS
안녕하세요! 오늘은 LInk Binary with LIbraries와 관련된 트러블 슈팅에 대해서 작성해보려고 해요.
문제 상황
iOS 최소지원 버전이 16이지만 17부터 사용가능한 SwiftData를 이용하여 디버깅 도구를 개발했어요.
근데, iOS 16 기기에서 앱이 실행되지 않았어요.
빌드는 성공했으나 앱을 키려고 한 순간 아래와 같은 크래시가 났습니다.
dyld[5910]: Library not loaded: /System/Library/Frameworks/SwiftData.framework/SwiftData
발생 원인
Xcode 앱 Target의 Build Phases에 가보면 Target Dependencies와 Link Binary with Libraries를 확인할 수 있어요.
Target Dependencies
현재 Target에 필요한 다른 Target들이 있다면 이곳에 추가해주어야 합니다. 현재 Target을 빌드되기 전에 반드시 빌드되어야 하는 다른 타깃을 정의하는 곳이예요. 예를 들어, 다른 프레임워크를 Target으로 추가해두고 현재 Target이 해당 프레임워크를 사용하고 있다면 Target Dependencies에 추가해주어야 해요.
Target Depedencies에 추가된 Target들은 항상 앱 Target을 빌드하기 전에 먼저 빌드되기 때문에 항상 최신 상태를 유지할 수 있어요.
Link Binary with Libraries
현재 Target에서 사용되는 외부 라이브러리나 프레임워크들을 연결해주는 단계입니다. 이곳에 들어갈 수 있는 라이브러리는 아래와 같아요.
- 외부 라이브러리: SnapKit, Alamofire 등
- Apple 기본 프레임워크: Collection, SwiftData, CoreLocation 등
- 직접 만든 프레임워크: Custom SPM
Xcode를 빌드할 때, 현재 Target에서 필요한 코드 심볼들은 Link Binary with Libraries에 정의된 라이브러리들을 사용해야한다고 정의해놓는 곳입니다.
컴파일러가 생성한 오브젝트 파일들을 하나의 실행파일로 결합하고 외부 심볼들을 참조하는 등의 역할을 담당하는 링커가 코드에서 사용된 심볼들이 링크된 라이브러리의 코드나 리소스를 사용해야한다는 것을 확인하고 연결을 설정하는 작업을 해줍니다. 그래야 앱이 실행될 때 어느 위치에서 코드를 찾아보아야하는 지 알 수 있어요.
Status
런타임에 해당 프레임워크가 없을 때 앱이 어떻게 동작해야할 지에 대한 Flag 값입니다.
- Required: 프레임워크가 없다면 앱을 실행하지 않는다. launch 단계에서 바로 크래시가 납니다.
- Optional: 프레임워크가 없더라도 앱을 실행한다. (weak linking) 대신 #available과 같은 전처리문을 통해서 코드 처리가 필요해요.
지금 16.0 OS인 기기에서 앱을 실행하면 SwiftData 프레임워크가 없는데 디폴트 설정이 Required이기 때문에 launch단계에서 앱이 죽고 있었어요.
해결방법
SwiftData.framework를 추가하고 Status를 Optional로 변경합니다.

참고
App with min. deployment iOS16 crashes because of SwiftData
I have an app on the AppStore that targets iOS 16 and later. I would like to introduce support for SwiftData for devices running iOS 17 and later, while maintaining support for iOS 16. Example code:
stackoverflow.com
https://www.mikegopsill.com/posts/target-dependencies-link-binary/
Target Dependencies vs Link Binary with Libraries
When developing iOS applications with Xcode, it’s essential to understand the difference between “Target Dependencies” and “Link Binary with Libraries.” These two options found in the Build Phases settings of a target play vital roles in defining
www.mikegopsill.com
'iOS' 카테고리의 다른 글
| SwiftUI에서 때 놓치기 쉬운 포인트 정리 (0) | 2025.11.18 |
|---|---|
| StoreKit 2 기반 인앱결제 / 구독 정리하기 (0) | 2025.11.14 |
| @Published protocol에 정의하기 (0) | 2022.11.05 |
| ViewController 생명주기의 몰랐던 점 (0) | 2022.10.24 |
| [CoreAnimation] Layer에 CoreAnimation을 무한으로 체이닝할 수 있을까? (2) | 2022.10.23 |