Project-Swift.h를 Object-C 클래스로 가져오는 중...파일을 찾을 수 없음
저는 Objective-C에서 시작한 프로젝트가 있으며, 이전에 Objective-Cin을 작성했던 클래스 파일로 Swift 코드를 가져오려고 합니다.
저는 Swift와 Objective-C를 같은 프로젝트에서 사용하는 것에 대한 Apple 문서와 다음과 같은 SO 질문을 상담했지만 여전히 소용이 없습니다.입력 후 파일을 찾을 수 없음 오류가 계속 발생합니다.#import "NewTestApp-Swift.h"
(NewTestApp
는 제품 및 모듈의 이름입니다.
지금까지 제가 한 일은 다음과 같습니다.
Define Modules
됨, 편집됨YES
앱용입니다.- 제품 모듈 이름에 공백이 없어야 함(아래 질문 스크린샷 참조)
는 사해보았다니습용다▁using니▁tried를 사용해 보았습니다.#import "NewTestApp-Swift.h"
東京의 ViewController.m
,ViewController.h
그리고.AppDelegate.m
하지만 아무 것도 효과가 없었습니다.
제가 잘못하고 있는 게 또 뭐죠?도와주셔서 고마워요.
설정 스크린샷:
현재 발생한 오류:
저는 같은 문제에 부딪혀서 프로젝트를 obj-c 클래스로 신속하게 가져올 수 없었습니다.Xcode 6을 사용하여 (Xcode 6+에 대해 작동해야 함) 이러한 방식으로 수행할 수 있었습니다.
- .h 파일에서 액세스해야 하는 모든 클래스는 다음과 같은 전달 선언이어야 합니다.
@class MySwiftClass;
- .m 파일에서만 코드가 동일한 프로젝트(모듈)에 있는 경우 다음을 사용하여 가져올 필요가 있습니다.
#import "ProductModuleName-Swift.h"
관련 애플 문서 링크
Swift 코드가 모듈 내부에 있는 경우(사용자의 경우처럼):
#import <ProductName/ProductModuleName-Swift.h>
Swift 코드가 프로젝트 내부에 있는 경우(Swift 및 ObjC 혼합):
#import <ProductModuleName-Swift.h>
이 경우 *.m 파일에 다음 행을 추가해야 합니다.
#import <NewTestApp/NewTestApp-Swift.h>
중요: 가져오기 문에서 "<"을 확인합니다.
목표 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 버전에서는 모든 모듈을 가져올 때 헤더를 하나만 사용하도록 변경되었습니다.
이 문제에 대해 한 시간 동안 다음 단계를 수행하면 누락된 내용을 이해하는 데 도움이 됩니다.
- Xcode 기본 설정을 열고 DerivedData 폴더로 이동합니다.
- "swift"를 검색합니다.finder에서 h"
- project-swift.h 파일을 찾을 수 없는 경우 이 파일은 생성되지 않았습니다.당신은 보통 당신의 swift 클래스 중 하나에 @objc를 추가하고 앱을 성공적으로 구축해야 합니다. 그래야 Xcode가 이 파일을 생성합니다.
- "xxx-swift"를 찾으셨다면요.h" 파일, 가져오기 명령문에 올바른 이름이 포함되어 있는지 확인하십시오.
저는 오브젝티브-C 프로젝트로 스위프트를 가져오는 데 문제가 있었습니다.결국 저는 파생 데이터 폴더를 조사하여 Xcode 7이 무엇을 생성하는지 확인했습니다.파일 이름이 제가 예상했던 것과 완전히 달랐습니다.
제가 실제 파일 이름을 얻으면, 저는 그것을 가져왔고 프로젝트는 빌드할 수 있었습니다.
iOS - Swift.h 파일을 찾을 수 없습니다.
<name>-Swift.h
Swift 코드가 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
'programing' 카테고리의 다른 글
Postgre에서 중복 레코드를 찾는 방법SQL (0) | 2023.05.24 |
---|---|
UI 테스트 실패 - 요소 또는 하위 요소 모두 보안에 중점을 두지 않음텍스트 필드 (0) | 2023.05.24 |
Git에서 HEAD^와 HEAD~의 차이점은 무엇입니까? (0) | 2023.05.24 |
스토리보드에서 간단한 둥근 단추를 만드는 방법은 무엇입니까? (0) | 2023.05.24 |
사용자 컨트롤의 데이터 컨텍스트 (0) | 2023.05.24 |