[ios] 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/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c


답변

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

#import <ProductName/ProductModuleName-Swift.h>

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

#import <ProductModuleName-Swift.h>

귀하의 경우 * .m 파일에 다음 줄을 추가해야합니다.

#import <NewTestApp/NewTestApp-Swift.h>

중요 : import 문에서 “<“를보십시오

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 / using-swift-in-objective-c-project


답변

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

즉, 개별 -Swift.h 파일을 사용하여 Objective-C .m 파일과 별도로 각 모듈을 가져 오는 대신 하나의 제품 만 가져옵니다. 모든 Swift 모듈을 집계 -Swift.h를 .

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


답변

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

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

위치를 찾는 빠른 파일


답변

Swift를 Objective-C 프로젝트로 가져 오는 데 문제가있었습니다. 결국 Derivied Data 폴더를 살펴보고 Xcode 7이 무엇을 생성하고 있는지 확인했습니다. 파일 이름은 내가 예상했던 것과 완전히 다릅니다.

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


답변

-Swift.hSwift 코드가 @objc또는 [정보] 를 통해 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)