mergeable library를 의존하고 있던 경우는 이를 최종 merge 타겟을 의존하는 것으로 바꿔야 한다.
Autolinking
만약에 dlopen을 쓰는 경우도 merge된 프레임워크 경로를 명시해야 한다.
void* handler = dlopen("@rpath/Merged.framework/Merged", RTLD_NOW)
Resource Lookup
Bundle API는 런타임이 프레임워크의 번들을 찾아서 로딩하게 만든다.
let myBundle = Bundle(for: NSClassFromString("MergeableClass")!)
NSBundle *myBundle = [NSBundle bundleForClass: [MergeableClass class]];
iOS 12 이전까지는 이 과정에서 프레임워크의 바이너리를 필요로 했다.
iOS 12에서는 이 상황에서도 lookup을 할 수 있게 해주는 훅이 추가되었다.
즉, mergeable library에서 bundle lookup을 하기 위해서는 최소 배포 버전을 iOS 12 이상으로 해놔야 된다.
이 훅을 쓰지 않을거라면 링커에서 끌 수도 있다.
OTHER_LDFLAGS = -Wl, -no_merged_libraries_hook
리소스가 없는 라이브러리라면 이 옵션을 켜서 실행 시간을 개선할 수 있다.
Xcode 15 Linker
mergeable library배포하기