Development Tip

여러 대상이있는 Objective C to Swift 헤더 파일

yourdevel 2020. 11. 19. 22:05
반응형

여러 대상이있는 Objective C to Swift 헤더 파일


import 문을 통해 Objective C (대상 'MyApp'용)에서 Swift 클래스를 성공적으로 호출하고 있습니다.

#import "MyApp-Swift.h"

이제 "MyAppLite"라는 새 대상을 만들었습니다.

새 타겟을 컴파일 할 때 코드에 "MyApp-Swift.h"가 필요하지만 컴파일러가 "MyAppLite-Swift.h"를 생성하기 때문에 오류가 발생합니다.

따라서 #import컴파일하는 대상에 대한 조건부 Swift / ObjC 헤더를 만들어야합니다 .

이 작업을 어떻게 수행 할 수 있습니까? 아니면 더 나은 방법이 있습니까?


설정할 수도 있습니다 Product Module Name에 설정 Build Settings(I가로 설정하여 모듈에서 동일하기를 $(PROJECT_NAME)너무 것을) <project>-Swift.h생성되는 파일이 모든 모듈에서 같은 이름이 있습니다. 이렇게하면 전 처리기 매크로를 추가 / 확인할 필요가 없습니다.


이 문제를 해결하기 위해 찾은 가장 좋은 방법은 Xcode 공유 프로젝트 설정입니다. 다음 설정을 검색 할 수 있습니다.

Objective-C 생성 인터페이스 헤더 이름 *

해당 값을 "MyProject-Swift.h"와 같은 공통 헤더 이름으로 설정하면 각 대상에 적용되며 Objective-C 파일에서 가져 오기 선언을 안전하게 사용할 수 있습니다. 이렇게하면 필요한 경우 각 대상에 대해 고유 한 제품 모듈 이름을 계속 사용할 수 있습니다.

저는 이것을 Xcode 버전 6.4 (6E35b)에서 테스트했습니다.

* 참고 : 이는 Swift 컴파일러 설정 아래에 표시되며 프로젝트에 Swift 소스 파일을 추가 한 경우에만 표시됩니다. 또한 대상에 연결된 Swift 소스가없는 경우 해당 대상의 빌드 설정에 대해 Swift 컴파일러 옵션이 표시되지 않습니다.

행운을 빕니다!


이전 답변은 대상 또는 프로젝트의 이름을 바꾸거나 SWIFT_MODULE_NAME의도 한대로 사용하기 결정한 경우 몇 가지 문제가 있습니다 .

가장 보편적 인 솔루션은 SWIFT_OBJC_INTERFACE_HEADER_NAME프로젝트의 대상이 아닌 빌드 설정 아래에서 ( "Objective-C 생성 인터페이스 헤더 이름")을 다음과 같이 변경하는 것입니다.

  • $(PROJECT_NAME)-Swift.h -프로젝트 당 1 개
  • $(SWIFT_MODULE_NAME)-Swift.h — 모듈 당 하나씩 (기본값).

여기에 이미지 설명 입력


제가 고칠 수있는 유일한 방법은 ...

#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif

내 제품 모듈 이름에 '잘못된'문자가있는 경우 밑줄로 바꿔야합니다.

도움이 되었기를 바랍니다.


각 빌드 (대상 / 체계)에 대해 정의 / 추가 된 접두사 헤더 파일 (<project> -Prefix.pch)에 적절한 #import <project> -Swift.h 문을 넣었습니다.


유일한 작동 방법은 다음과 같습니다.

1- 첫 번째 대상 (작동중인 브리징이 있음)에서 빌드 설정 선택 Objective C Bridging Header
2- Copy Objective C Bridging Header
3- 다른 대상 열기 빌드 설정
4- 붙여 넣기 5- 변경 헤더 파일을 새 헤더 파일 (예 : 대상 Bh)에 추가

(이제 두 대상에 대해이 옵션이 있습니다)

참고 URL : https://stackoverflow.com/questions/26262029/objective-c-to-swift-header-file-with-multiple-targets

반응형