IT

Project-Swift.h를 Objective-C 클래스로 가져 오기…

lottoking 2020. 7. 23. 07:58
반응형

Project-Swift.h를 Objective-C 클래스로 가져 오기…


Objective-C에서 프로젝트가 있는데 Objective-C를 이전에 가지고 있던 코드 클래스 파일로 일부 Swift를 가져 오려고합니다.

나는 애플 참조하지 않은 문서를 같은 프로젝트뿐만 아니라 SO의에서 스위프트와 목표 - C를 사용하는 방법에, 대한 질문 과 같은,하지만 여전히 아무 소용이 : 나는 퍼팅 후 오류를 발견하지 않는 파일을 가져 계속 #import "NewTestApp-Swift.h"( NewTestApp제품의 이름입니다 및 모듈).

여기 내가 지금까지 한 일이 있습니다.

  1. 에서가 Define Modules선택한 YES응용 프로그램에 대한.
  2. 제품 모듈 이름에 공백이 없는지 확인하십시오 (아래 질문 스크린 샷 참조).

#import "NewTestApp-Swift.h"내가 사용하는 시도 내부를 ViewController.m, ViewController.h그리고 AppDelegate.m하지만 그들 중 누구도 일을하지 않았습니다.

내가 뭘 잘못하고 있니? 당신의 도움을 주셔서 감사합니다.


설정 스크린 샷 :

여기에 이미지 설명을 입력하십시오


현재 발생하는 오류 :

여기에 이미지 설명을 입력하십시오


같은 문제가 발생하여 프로젝트를 obj-c 클래스로 신속하게 수 없습니다. Xcode 6을 사용하면 (Xcode 6+에서 작동 함) 이런 식으로 할 수 있어야 함 ....

  1. .h 파일에서 액세스해야하는 모든 클래스는 다음 과 같은 전달이어야합니다.

@class MySwiftClass;

  1. .m 파일에서만 코드가 동일한 프로젝트 (모듈 형)에있는 경우 코드를 가져와야합니다.

#import "ProductModuleName-Swift.h"

Apple 문서에 대한 링크

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_87


Swift 코드가 모듈 내부에있는 경우 (예 :)

#import <ProductName/ProductModuleName-Swift.h>

Swift 코드가 프로젝트 내부에있는 경우 (Swift와 ObjC 혼합) :

#import <ProductModuleName-Swift.h>

m 파일에 다음 줄을 추가해야합니다.

#import <NewTestApp/NewTestApp-Swift.h>

중요 : 수입 문에서 "<"를

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html


객관적인 c로 신속하게 가져 오는 방법 :

  • 모듈 이 YES로 설정 됨 (프로젝트에서-대상이 아님)
  • 제품 모듈 이름이 설정 됨 (대상에서-프로젝트가 아닌)
  • ViewController.m에서 다음을 사용하여 빠른 코드를 가져옵니다.

    #import "MyProductModuleName-Swift.h"
    
  • Objective-c 프로젝트에 빠른 파일을 추가하면 (File-> New-> Swift) Xcode는 objective-c에서 Swift로 브리징 헤더 를 만들지 만 다른 방법으로 작동하도록하는 것이 중요 합니다.

Xcode의 GUI를 통해 구현 파일을 추가하고 단지 마지막 드래그하지 그것을 만들기 위해 나의 프로젝트에 기존의 기존-파일을 삭제의 나를 알고 만들기 위해 Swiftoverload이 퍼즐을 통해 조각을 위해 일 : http://nikolakirev.com / blog / swift-in-objective-c-project 사용


Xcode 8.2.1을 (를) 사용하고 Project > Build Settings> Objective-C Generated Interface Header Name 을 보면 Product -Swift.h 와 같은 하나의 헤더 파일 표시 됩니다.

이는 파일을 사용하여 Objective-C .m 파일과 각 모듈을 가져 오는 대신 오는 모든 Swift 모듈을 하나의 제품 -Swift.h를 가져옵니다 .

모듈을 개별적으로 가져 오는 전통적인 방법을 찾아 같은 문제가 발생했지만 현재 버전의 Xcode와 Swift 3에서는 모든 모듈 가져 오기에 하나의 헤더 만 사용하도록 변경했습니다.


Swift를 Objective-C 프로젝트로 가져 오는 데 문제가있었습니다. 결국 나는 Xcode 7이 생성하는 것을 확인하기 위해 Derivied Data 폴더를 조사했습니다. 파일 이름이 내가 예상했던 것과 완전히 달랐습니다.

실제 파일 이름이 있으면 가져 와서 프로젝트를 빌드 할 수 있습니다.


이 문제에 대해 한 시간을 보냈으며 다음 단계를 따르면 누락 된 사항을 이해하는 데 도움이됩니다.

  1. Xcode 환경 설정을 열고 DerivedData 폴더로 이동하십시오.
  2. 파인더에서 "swift.h"검색
  3. project-swift.h 파일을 찾을 수 없다면이 파일은 생성되지 않은 것입니다. 일반적으로 @objc를 빠른 클래스 중 하나에 추가하고 앱을 성공적으로 빌드해야합니다. 그러면 Xcode에서이 파일을 생성합니다.
  4. "xxx-swift.h"파일을 찾은 경우 import 문에 올바른 이름이 포함되어 있는지 확인하십시오.

위치를 찾는 빠른 파일


모듈 정의 : 예 및 Obj-C 클래스의 .m 파일에서 "ProjectName-Swift.h"가져 오기

이것은 Obj-c의 Swift 클래스에 액세스하는 데 효과적이었습니다.


git을 사용하여 프로젝트를 작업 할 때 내 팀과 동일한 문제에 직면했습니다. 한 개발자가 최신 Swift 2.2 버전에 필요한 최신 버전 (7.3)으로 Xcode를 업데이트하지 않았습니다. 따라서 컴파일러는 새로운 Swift 구문을 인식하지 못했고 Swift 라이브러리 (projectname-swift.h)에 대한 인터페이스를 생성 할 수 없습니다. Xcode 버전이 최신 버전인지 확인하십시오!


개발 중에 일부 구문 오류로 인해 완전히 구현되지 않은 신속한 클래스가있을 가능성이 있습니다. swift 헤더 파일은 모든 swift 파일에 오류가없는 경우에만 사용할 수 있습니다.

신속한 파일에 구문 오류가 없는지 확인한 다음 목표-c 파일에서 신속한 헤더를 가져 오십시오.


헤더 파일 가져 오기, 즉

#import "<ProjectName>-Swift.h" 

.h 파일 내에서 다음과 같은 오류가 발생했습니다.

-Swift.h '파일을 찾을 수 없습니다.

빌드가 실패했습니다.

대신 다음을 사용하십시오.

#import "<ProjectName>-Swift.h"

.m 파일 내에서 동일한 오류가 발생하더라도 프로젝트를 실행하면 오류가 표시되지 않습니다.

그런 다음 .m 파일 내에서 신속한 클래스를 사용할 수 있습니다.


-Swift.hSwift 코드가 @objc또는 [About]을 통해 API를 노출하는 경우 Xcode에 의해 자동으로 생성되어야합니다 @objcMembers .

일반적으로 위치는 다음과 같습니다.

~/Library/Developer/Xcode/DerivedData/
  ProductModuleName-foo/
    Build/
      Intermediates.noindex/
        ProductModuleName.build/
          Debug-iphoneos/
            ProductModuleName.build/
              DerivedSources/
                ProductModuleName-Swift.h

다음과 같이 변경할 수 있습니다.

Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path

기본적으로 값은 $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)


프로젝트 이름 (대상)에 문제가 있습니다. "-"기호가 포함되었습니다. 따라서 결정은 다음입니다. 프로젝트 이름이 "Test-App"이면 경쟁 클래스 이름은 "Test_App-Swift.h"입니다.


대상이 여러 개인 경우 모든 프레임 워크를 빌드했는지 확인하십시오.

참고 URL : https://stackoverflow.com/questions/26328034/importing-project-swift-h-into-a-objective-c-class-file-not-found

반응형