Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리팩토링
- swiftUI
- HIG
- map
- 리펙터링
- ios
- Observable
- rxswift
- MVVM
- Refactoring
- Xcode
- 스위프트
- 리펙토링
- Protocol
- tableView
- swift documentation
- SWIFT
- RxCocoa
- Clean Code
- combine
- collectionview
- 애니메이션
- UITextView
- clean architecture
- 클린 코드
- Human interface guide
- ribs
- UICollectionView
- uitableview
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] "dyld: Library not loaded @rpath" 에러 해결 방법 (#framework, #import) 본문
iOS 응용 (swift)
[iOS - swift] "dyld: Library not loaded @rpath" 에러 해결 방법 (#framework, #import)
jake-kim 2023. 9. 30. 01:31사전지식) dyld와 @rpath
- dyld: dynamic linker (동적 프레임워크 링커)
- @rpath: (run search path) 실행 중인 앱이 특정 라이브러리나 프레임워크를 찾을 때 동적 라이브러리 검색 경로를 나타내는 토큰
동적 프레임워크 링커란?)
- dynamic framework의 주소와 파일들을 Heap과 Stack영역에 위치시키는 역할을 담당하는 매개체
- 구체적인 dynamic framework 개념은 이전 포스팅 글 참고
"dyld: Library not loaded @rpath" 에러 메시지
- 동적 프레임워크 링커가 @rapth를 로드하지 못한다는 의미
- Xcode 설정 > Embed 옵션이 꺼져있는 상태에서 import한 경우에 발생
- 해결방법: Embed & Sign으로 변경
- rpath 경로 변경
- Build Settings > "runpath search path" 검색하여 rpath를 맞게 변경
직접 확인해보기 - 동적 프레임워크 준비
- 예제로 사용할 프레임워크 생성
- Xcode > 파일 추가 > Framework
- 생성 완료
- 예제로 사용할 .swift파일 생성
import Foundation
open class JakeString {
public var name = "jake"
public init() {
}
@_spi(Private) public func myPrivateFunc() {}
}
- 이 프레임워크를 사용할 App 프로젝트 생성
- Target > General > Frameworks, Libraries, and Embedded Content 영역으로 아까 만든 프레임워크 .xcodeproj파일을 드래그 앤 드롭
- 주의) 프레임워크 프로젝트를 반드시 닫고 드래그 앤 드롭
(드래그 앤 드롭 후 + 버튼을 눌러서 product 파일도 추가하면 프레임워크 추가 완료)
- "dyld: Library not loaded @rpath" 오류를 재현하기 위해 rpath를 임의로 변경
- "runpath search path" > 아래 @escutable_path/Frameowrks 를 임의의 값으로 변경
(변경 완료)
- 클린 빌드 후 ViewController에서 아래와 같이 "import Jake"하고난 후 실행
import UIKit
import Jake
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let string = JakeString()
print(string.name)
}
}
- 기대 결과대로 rpath를 찾지 못했다는 런타임 에러가 발생
(전체)
Warning: Error creating LLDB target at path '/Users/jake/Library/Developer/Xcode/DerivedData/MyApp-fvkmtrlkleqcngajhgururegogcy/Build/Products/Debug-iphonesimulator/MyApp.app'- using an empty LLDB target which can cause slow memory reads from remote devices.
dyld[67518]: Library not loaded: @rpath/Jake.framework/Jake
Referenced from: <BCBADE96-BF3A-3224-870C-950A098BFDE2> /Users/jake/Library/Developer/CoreSimulator/Devices/3F643203-F34C-417E-A116-8F9991EC010B/data/Containers/Bundle/Application/EA92E790-C34B-4AB0-BE8C-91E8D5CBF93F/MyApp.app/MyApp
Reason: tried: '/Users/jake/Library/Developer/Xcode/DerivedData/MyApp-fvkmtrlkleqcngajhgururegogcy/Build/Products/Debug-iphonesimulator/Jake.framework/Jake' (no such file), '/Library/Developer/CoreSimulator/Volumes/iOS_21A328/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.0.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/Jake.framework/Jake' (no such file)
정리
- "dyld: Library not loaded @rpath"은 import 할 때 dynamic framework를 링킹하는데, 이 때 dynamic framwork를 찾지 못할 때 발생
- dynamic framework를 찾지 못하는 경우는 rpath (run search path)의 값이 잘못되어 있거나, embed설정을 하지 않은 경우 발생
'iOS 응용 (swift)' 카테고리의 다른 글
Comments