programing

Project-Swift.h를 Object-C 클래스로 가져오는 중...파일을 찾을 수 없음

lovejava 2023. 5. 24. 21:21

Project-Swift.h를 Object-C 클래스로 가져오는 중...파일을 찾을 수 없음

저는 Objective-C에서 시작한 프로젝트가 있으며, 이전에 Objective-Cin을 작성했던 클래스 파일로 Swift 코드를 가져오려고 합니다.

저는 Swift와 Objective-C를 같은 프로젝트에서 사용하는 것에 대한 Apple 문서와 다음과 같은 SO 질문을 상담했지만 여전히 소용이 없습니다.입력 후 파일을 찾을 수 없음 오류가 계속 발생합니다.#import "NewTestApp-Swift.h"(NewTestApp는 제품 및 모듈의 이름입니다.

지금까지 제가 한 일은 다음과 같습니다.

  1. Define Modules됨, 편집됨YES앱용입니다.
  2. 제품 모듈 이름에 공백이 없어야 함(아래 질문 스크린샷 참조)

는 사해보았다니습용다▁using니▁tried를 사용해 보았습니다.#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"

관련 애플 문서 링크

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>

중요: 가져오기 문에서 "<"을 확인합니다.

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

목표 c로 신속하게 가져올 수 있었던 방법:

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

    #import "MyProductModuleName-Swift.h"
    
  • 목표-c 프로젝트(파일 -> 새로 만들기 -> 스위프트)에 swift 파일을 추가하면 Xcode가 목표-c에서 스위프트브리징 헤더를 생성하지만 이는 분명히 반대로 작동하도록 하는 데도 중요합니다.

이 퍼즐의 마지막 조각은 기존의 스위프트 파일을 단순히 프로젝트로 끌어다 놓기만 하는 것이 아니라 Xcode GUI를 통해 실제로 스위프트 파일을 추가하는 것을 알게 해준 스위프트 오버로드 덕분입니다. http://nikolakirev.com/blog/using-swift-in-objective-c-project

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

즉, Objective-C.m 파일에서 각 모듈을 개별적으로 가져오는 대신 개별 -Swift.h 파일을 사용하여 모든 Swift 모듈을 집계한 Product-Swift.h를 하나만 가져오면 됩니다.

기존 모듈을 따로 가져오는 방식을 찾아보니 동일한 문제가 발생했는데, 현재 Xcode와 Swift 3 버전에서는 모든 모듈을 가져올 때 헤더를 하나만 사용하도록 변경되었습니다.

이 문제에 대해 한 시간 동안 다음 단계를 수행하면 누락된 내용을 이해하는 데 도움이 됩니다.

  1. Xcode 기본 설정을 열고 DerivedData 폴더로 이동합니다.
  2. "swift"를 검색합니다.finder에서 h"
  3. project-swift.h 파일을 찾을 수 없는 경우 이 파일은 생성되지 않았습니다.당신은 보통 당신의 swift 클래스 중 하나에 @objc를 추가하고 앱을 성공적으로 구축해야 합니다. 그래야 Xcode가 이 파일을 생성합니다.
  4. "xxx-swift"를 찾으셨다면요.h" 파일, 가져오기 명령문에 올바른 이름이 포함되어 있는지 확인하십시오.

문서철 사용법

저는 오브젝티브-C 프로젝트로 스위프트를 가져오는 데 문제가 있었습니다.결국 저는 파생 데이터 폴더를 조사하여 Xcode 7이 무엇을 생성하는지 확인했습니다.파일 이름이 제가 예상했던 것과 완전히 달랐습니다.

제가 실제 파일 이름을 얻으면, 저는 그것을 가져왔고 프로젝트는 빌드할 수 있었습니다.

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

[Objective-C와 Swift

<name>-Swift.hSwift 코드가 API를 노출하는 경우 Xcode에 의해 자동으로 생성되어야 합니다.@objc또는@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)

헤더 파일을 가져오는 중입니다.

#import "<ProjectName>-Swift.h" 

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

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

빌드가 실패했습니다.

대신 다음을 사용합니다.

#import "<ProjectName>-Swift.h"

.m 파일 내에서 동일한 오류가 나타나더라도 프로젝트를 실행하면 오류가 억제됩니다.

그러면 .m 파일 내에서 swift 클래스를 사용할 수 있습니다.

앱 이름에 특수 문자가 있는 경우 특수 문자에 _를 사용합니다.

예를 들어 앱 이름이 "테스트 앱®"인 경우

그런 다음 "Test_App_-Swift"로 swift 파일을 가져올 수 있습니다.h."

사용자가 가져오는 동안 공간 및 ®은 _로 대체됩니다.

swift 클래스에 공개 선언이 있는지 확인하고 NSObject를 확장합니다.

public class MySwiftClass: NSObject {
    //...
}

swift 클래스가 동일한 프로젝트에 있는 경우 가져오기는 괄호가 아닌 따옴표로 작동해야 합니다.

스위프트 파일을 먼저 추가하는 경우 왼쪽 열에 있는 대상에 스위프트 파일을 추가하는 것을 기억하십시오.

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

모듈 정의: 예, "ProjectName-Swift"를 가져옵니다.h"는 Obj-C 클래스의 .m 파일에 있습니다.

이것은 제가 Obj-c에 있는 Swift 수업에 접근하는 데 도움이 되었습니다.

#import "myProj-Swift"에서도 동일한 문제가 있었습니다.h"를 찾을 수 없음, Xcode 12.3, 연도는 2021입니다.

브리징 헤더가 생성되지 않으면 myProj-Swift.h를 가져올 수 없습니다.

목표-C 프로젝트에 Swift를 추가해야 할 때 프로젝트에 더미 빈 Swift 파일(File - New File - Swift 파일)을 만드는 것이 제 (재생 가능한) 해결책입니다.그런 다음 Xcode는 브리징 헤더를 만들 것인지 여부를 물으며, 저는 예라고 대답합니다.이로 인해 "myProj-Bridging-Header"가 발생합니다.h" 파일이 프로젝트 탐색기에 표시됩니다.

이 작업이 완료되면 #import "myProj-Swift"에서 오류가 발생합니다.h"가 사라집니다.

그런 다음 더미 파일을 삭제하고 필요한 Swift 클래스를 프로젝트에 삽입할 수 있습니다.

가시적인 브리징 헤더를 생성하지만 -Swift.h를 완전히 보이지 않는 상태로 두는 논리는 완전히 무시됩니다.Swift를 Objective-C로 가져오기 공식 문서에 "생성된 헤더를 만들기 위해 특별한 작업을 수행할 필요가 없습니다."라고 명시되어 있습니다.

프로젝트가 성공적으로 컴파일될 때만 -Swift.h 파일이 생성될 것이라고 말하는 이 질문에 대한 @Sandeep Bhandari의 대답도 염두에 두는 것이 좋을 것입니다.

자세한 내용은 이 질문과 이 질문에도 나와 있습니다.

기존 대상을 복제한 후 이 문제가 발생했습니다.중복된 대상으로 빌드하려고 하면 "ProductName-Swift.h file not found" 오류가 나타납니다.

새로운 타겟에서 빌드 설정을 검토한 결과, "Product Name" 설정 값이 타겟 이름과 동일하게 설정되어 있습니다.올바른 것으로 설정한 후 오류가 사라졌습니다.

제품 이름이 TestApp-Dev이면 파일 이름이 TestApp_Dev-Swift.h가 됩니다.

다음 위치로 이동하여 확인할 수 있습니다. ~ /Library/Developer/Xcode/DerivedData//Build/Intermediates.noindex/yourProjectbuild/Debug-iphone 시뮬레이터/MashreqMobileApp.build/DerivedSources

각 빌드 구성표에 대해 동일한 파일 이름을 사용하려면 모듈/구성표에서 동일하게 빌드 설정으로 이동합니다.($(PROJECT_NAME)-Swift.h로 설정).

프로젝트 이름이 TestApp인 경우 생성된 파일은 TestApp-Swift.h가 되며 구성에 관계없이 동일하게 유지됩니다.

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

swift 파일에 구문 오류가 없는지 확인한 다음 목표 - c 파일에서 swift 헤더를 가져오려고 시도합니다.

프로젝트 이름(대상)에 대한 문제에 직면했습니다.여기에는 기호 "-"가 포함되어 있습니다.따라서 다음으로 결정했습니다. 프로젝트 이름이 "테스트-앱"이면 가져온 클래스 이름은 "테스트_앱-스위프트"입니다.h"

대상이 여러 개인 경우 모든 프레임워크를 구축해야 합니다.

Xcode 11

Xcode 11에서 빌드할 때 이 문제가 발생했습니다.무엇이 잘못되었는지 파악하는 데 시간이 조금 걸렸지만, 기본적으로 대상의 "일반" 탭에서 직접 변경하는 대신 "표시 이름" 설정을 변경했습니다.Info.plist대상의 "Info" 탭을 통해 파일을 만듭니다.

이로 인해 Xcode 11.5는 새로운 사용자 정의 빌드 설정을 다시 작성/생성하고 앱 모듈과 빌드된 .app 제품의 이름을 수정했습니다.새 새표이슬도있다습니가시래에름시우(▁(다▁in있이▁a니)가 ./) 궁극적으로 건물을 짓지 않은 이유일 수도 있습니다(@Silversky Technology의 답변 참조).

11 취소하고 했습니다.Info.plist파일과 모든 것이 완벽하게 작동합니다.

저는 그것이 막 시작해서 당신의 동의 없이 그것을 하기 전에 이런 것들을 하고 있었다는 것을 당신에게 말해주기를 바랍니다.

대상 실행 파일에 내(또는 실제로는 다른) 프레임워크에 대한 종속성이 없습니다.

빌드 단계 -> 종속성은 간헐적인 오류를 방지하기 위해 대상의 종속성을 나열해야 합니다. 이 경우 디버그 빌드는 정상이었고 자동화된 Jenkins CI 빌드는 실패했습니다.젠킨스의 출력이 대량의 쓰레기를 생산한다는 것을 고려하면 디버깅해야 하는 악몽은 통과하기에 엄청난 시간 구덩이입니다.

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