해결 방법을 통해이 작업을 수행했습니다.
정적 라이브러리/프레임 워크를 다른 프레임 워크/정적 라이브러리로 컴파일 할 때 해당 심볼은 계속 노출됩니다 (nm <binary> | grep <symbol>
확인). 즉, 프레임 워크 A의 클래스 C에 대한 헤더를 포함하여 해당 심볼을 알기 위해 앱 코드가 필요하다는 것을 의미합니다.
프레임 워크 A의 헤더에 클래스 C 헤더를 포함해야합니다. 프레임 워크를 컴파일 할 때 "ClassC.h"
을 사용해야하지만, 프레임 워크를 사용할 때는 <FrameworkName/ClassC.h>
이 필요합니다. 즉, 응용 프로그램에 포함 된 프레임 워크의 위치입니다. 이렇게하려면 실행 스크립트 단계에서 제거 된 매크로를 사용하십시오.
:
그래서, 당신의 프레임 워크에서 타겟 빌드 단계는, 클래스 C에 대한 헤더 후 '스크립트 실행'단계를 추가하고 다음을 붙여 사본 헤더 단계의 '공공'섹션에 있는지 확인
TARGET_MACRO="TARGET_FRAMEWORK"
cd -P "$BUILT_PRODUCTS_DIR/$WRAPPER_NAME/Headers/"
perl -0pi -e "s/\#if ${TARGET_MACRO}.*?\#else\r?\n?(.*?)\r?\n?\#endif/\1/sg" *.h
변경`TARGET_FRAMEWORK는 "무엇이든, 또는 그것을두고 있습니다. 프레임 워크 A의
는, 전 처리기 매크로에서 설정을 구축 모든 구성을 구축하기위한
TARGET_FRAMEWORK=1
을 추가합니다.
그런 포함하여 프레임 워크 A를 헤더에 수업 C : 사용 :
#if TARGET_FRAMEWORK
#import "ClassC.h"
#else
#import <FrameworkA/ClassC.h>
#endif
헤더를 만들어 B와 C를 가져온 다음 A? – antonio081014
헤더를 잘 가져올 수 있습니다. 문제를 일으키는 A에서 공개로 만듭니다. – Nick