프레임워크 모듈 내 비모듈 헤더 포함
Xcode 6을 사용하고 있습니다.
1) 먼저 동적 라이브러리(CoreLibrary)를 만듭니다.이 라이브러리에는 RequestPoster.h 파일이 포함되어 있습니다.
2) 다음으로 Cocoa Touch Framework를 만들고 이 다이내믹 라이브러리(Core Library)를 추가했습니다.
3) 이 프레임워크가 프로젝트에 추가되어 RequestPoster.h 파일(CoreLibrary)에 오류가 발생합니다.
오류: 프레임워크 모듈 클래스 내에 비모듈형 헤더가 포함되어 있습니다.
ifaddrs.h, arpa/inet.h, sys/types.h>
프로젝트에서 이 파일을 찾을 수 없습니다.
헤더 파일이 프레임워크의 공용 헤더의 일부로 공개적으로 사용 가능한지 확인하십시오.
Goto Framework -> Target -> Build Phase를 드래그하여 관련 헤더 파일을 Project에서 Public으로 이동합니다.
"Target"에서 "Build Settings"로 이동하여 "Allow Non-modular Includes in Framework Modules"를 "YES"로 설정합니다.
진짜 답은 도서관 소유자가 수입 장소를 변경해야 한다는 것이다.ifaddrs.h, arpa/inet.h, sys/types.h 파일은 Xcode가 좋아하지 않는 프레임워크 내의 .h 파일로 Import됩니다.라이브러리 유지보수는 파일을 .m 파일로 이동해야 합니다.예를 들어, GitHub 의 이 문제를 참조해 주세요.여기서 AFNetworking은 같은 문제를 해결했습니다.https://github.com/AFNetworking/AFNetworking/issues/2205
영향을 받는 대상에 대해 빌드 설정의 프레임워크 모듈에 비모듈 포함 허용을 예로 설정할 수 있습니다.편집해야 할 빌드 설정은 다음과 같습니다.
메모: 이 기능을 사용하여 기본적인 오류를 밝혀야 합니다.이 에러는, 다음과 같은 의존 관계가 있는 파일에 포함되어 있는, angle-bracked global의 중복에 의해서 자주 발생하고 있는 것을 알 수 있습니다.
#import <Foo/Bar.h> // referred to in two or more dependent files
[ Allow Non - modular includes in Frame Modular includes ]를 [YES]로 설정하면 일련의 "X is mufficious reference" 에러 또는 기타 종류의 오류가 발생할 경우 문제의 중복을 추적하여 제거할 수 있습니다.코드를 정리한 후 프레임모듈에 비모듈 포함 허용을 다시 아니요로 설정합니다.
저도 같은 문제가 있어서 헤더 파일을 공개하는 것만으로 해결했습니다.
프로젝트의 여러 모듈에서 작업하는 경우.그런 다음 프로젝트의 다른 부분에서 사용하려면 헤더 파일을 공개해야 합니다.필요한 것은 프로젝트 유틸리티 보기에서 해당 헤더 파일을 선택하는 것입니다.파일을 Project/Private에서 Public으로 변경합니다.아래 이미지 참조:
Allow Non-modular Includes in Framework Modules
objc 코드로만 동작합니다.이치노
조사 기간 후 swift가 경고 파라미터를 clang으로 전달할 수 있다는 것을 알게 되었습니다.OTHER_SWIFT_FLAGS
로로 합니다.-Xcc -Wno-error=non-modular-include-in-framework-module
수입하다
같은 문제를 안고 있는 사람에게만
"프레임 모듈 내부에 비모듈형 헤더 포함"
이 에러가 발생했을 경우는, 파일 인스펙터 「Target Membership」에서 Import 하는 파일을 「public」이라고 마크하는 것만으로 해결할 수 있습니다.기본값은 "프로젝트"이며, 이렇게 설정하면 이 오류가 발생할 수 있습니다.예를 들어 Google Analytic의 헤더를 프레임워크로 Import하려고 할 때도 그랬습니다.
하는 보다 은, 「이것」의 「」#import
「」의 에 있는 ..m
파일(「파일」(「파일」)에되어 있는 ).h
header file)를 지정합니다.이렇게 하면 비모듈형 헤더 파일이 포함되어 있다고 불평하지 않습니다.는 이 , 그것은 i런가 i i i i i i i i i i i i 。Allow non-module includes
로 YES
기능하지 않았기 때문에, 실장 파일로 이동하면 불평이 없어졌습니다.이것은 헤더 파일을 Import 및 포함할 때 기본적으로 권장되는 방법입니다.이 작업을 완료하면, 이 설정을NO
작동해야 합니다.
는 상, , to, , 리, to, to, to, to, to을 목표로 삼아야 합니다.Allow non-module includes
로 NO
을 로 YES
대부분의 경우 당신이 뭔가 잘못하고 있다는 것을 의미합니다.이 설정은 "모듈의 일부가 아닌 디스크의 임의 헤더 파일 Import 허용"으로 변환됩니다.의 극히 에 이 은 항상 '사용할 수 없다'여야 .NO
(미국의)
독자적인 프레임워크를 개발하는 경우:
왜 이런 일이 생기는 건가요?
module.modulemap에서 언급한 퍼블릭헤더 파일 중 모듈맵에서 언급되지 않은 Import문이 있는 경우 오류가 발생합니다.module.modulemap으로 선언되지 않은 헤더를 Import하려고 하면 프레임워크의 모듈성이 깨집니다.
어떻게 하면 고칠 수 있죠?
module.modulemap 에 에러를 발생시킨 헤더를 포함하여 다시 빌드합니다.
allow-modular를 YES로 설정하면 어떨까요?
이 프레임워크는 실제로는 해결책이 아니기 때문에 프로젝트에는 "이 프레임워크는 모듈러형이어야 하는데 그렇지 않습니다.어떻게든 사용하세요.괜찮아요.이것은 라이브러리의 모듈화 문제를 해결하지 않습니다.
자세한 내용은 이 아카이브된 블로그 투고를 확인하거나 clang 문서를 참조하십시오.
에 대해 이 행을 합니다.Podfile
:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
target.build_settings(config.name)['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
end
end
end
동적 프레임워크 구축 시 우산 헤더에 이 오류가 표시될 경우 다음과 같이 파일을 Import하십시오.
#import "MyFile.h"
로서가 아니라#import <MyFramework/MyFile.h>
.
같은 문제가 나를 미치게 했다.지막, 는는 the .import xxx.h
를 사용하면 문제를 해결할 수 있습니다.또한 Cocoapods를 사용하여 프로젝트를 관리하는 경우 다음을 추가할 수 있습니다.
s.user_target_xcconfig = { 'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES' }
안에서.podspec
filename을 클릭합니다.
나도 같은 문제가 있었고 위에서 아무것도 도와주지 않았어.그래서 제 대답이 누군가에게 도움이 되었으면 좋겠어요.제 경우 문제는 ALways_SEARCH_USER_PATHS 설정에 있었습니다.「NO project builded and working」(프로젝트 없음)으로 설정했을 경우,그러나 팟 중 하나가 YES로 설정되어야 할 경우 오류가 발생하였습니다.
프레임워크 모듈 내 비모듈 헤더 포함
커피를 몇 잔 마시고 하루 종일 조사한 결과 Xcode 7.1 베타 2 릴리즈 노트의 알려진 문제에 따르면 다음과 같은 사실을 알게 되었습니다.
• 이전에 컴파일된 프레임워크에 대해 "Include of non-modular header inside framework module"이라는 오류가 발생한 경우 "Always Search User Paths" 빌드 설정이 "No"로 설정되어 있는지 확인하십시오.기본값은 레거시 이유만으로 "예"입니다.(22784786)
XCode 7.3을 사용하고 있었습니다만, 이 버그는 아직 수정되지 않은 것 같습니다.
도 이 했는데, 인 줄 앱 ( 저가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★${PODS_ROOT}
[ ( Header Search Paths ) ]으로합니다.recursive
를 을 만들 때 수 .이를 통해 앱을 빌드할 때 사용하지 않는 헤더를 찾을 수 있었습니다., 「 」가 됩니다.non-recursive
모든 것이 괜찮았다.사용.recursive
검색은 적절한 헤더를 찾기 위한 끔찍한 해킹입니다.교훈을 얻었습니다.
동적 프레임워크(Swift와 Objective-C의 혼합)의 우산 헤더에서 이 오류가 발생했습니다.공용 헤더 디렉토리의 이름은 프레임워크 자체와 동일합니다.PublicHeaders로 이름을 바꾸면 효과가 있습니다(헤더는 여전히 다음과 같이 표시됩니다).#import <FrameworkName/Header.h>
를 참조해 주세요.
이 케이스의 체크리스트:
- 설정하다
Target Membership
=Public
엄브렐라 헤더 및 그 헤더에서 Import된 모든 헤더에 대해 - 설정하다
Enable Modules (C and Objective-C)
=YES
- 공용 헤더가 프레임워크 이름과 다른 디렉토리에 있는지 확인합니다.
제 경우, 공개하는 모든 헤더가 우산 헤더에 나타나듯이,
수정사항은 다음과 같이 이름만 사용하는 것이었습니다.
#import "my-public-file.h"
대신:
#import "my-path/added-to/header-search-paths/for/my-public-file.h"
이것은 나에게 좀 성가신 문제였다.개별 파일 헤더 파일에 "비모듈형" 헤더를 포함해야 했기 때문에 어떤 제안도 제 경우에 도움이 되지 않는 것 같았습니다.제가 사용한 작업은 Import Call을 Prefix 헤더 파일에 고정하는 것이었습니다.
제 경우 .podspecs 파일의 "s.source_files" 섹션에 .h 및 .m 파일을 추가하는 것을 잊었습니다.
이걸 넣으면 잘 될 거예요.
해보다@import FrameworkName
#import "FrameworkName.h"
나도 비슷한 문제가 있었어!앱 타겟을 실행할 때는 정상적으로 동작하고 있었지만, 테스트 타겟으로 변경해 테스트를 실행하려고 하면 "Include of non-modular header inside framework module" 에러가 발생하였습니다.여기에 게시된 모든 해결책을 시도해 봤지만 효과가 없었습니다.마지막에 모든 빌드 설정을 스크롤하여 헤더와 관련된 각 설정에 대한 설명을 읽었습니다.
전USE_HEADERMAP
로로 합니다.NO
★★★★★★★★★★★★★★★★★★!
누가 도움이 됐으면 좋겠어요!
위의 솔루션을 확인한 결과, Umbrella Header를 Headers 목록 맨 아래로 이동했고, Xcode 9.3에서 작동했습니다.
제거해서 해결했다.Modules
폴더를 선택합니다.
Finder를 사용하여 App Project에 있는 프레임워크 위치로 이동합니다.
으로 들어가다
Test.framework
위의 경우)CoreLibrary.framework
Delete(Delete(Delete)))Modules
더입니니다다앱을 청소하고 다시 빌드하면 문제가 해결됩니다.
Swift 소스 코드를 기존 ObjC 정적 프레임워크(Mach-O 타입의 "Static Library"를 사용하는 동적 프레임워크)에 추가했을 때 이 문제가 발생했습니다.
수정이 설정되었습니다.CLANG_ENABLE_MODULES
에서 "Enable Modules" (모듈 )에서 " Modules" ("Modules in Build Settings")로 이동합니다YES
Git clean git git git git git git git git git git git git git git 。다음과 같습니다.git clean -dffx && git reset --hard
언급URL : https://stackoverflow.com/questions/27776497/include-of-non-modular-header-inside-framework-module
'programing' 카테고리의 다른 글
R의 XLSX 패키지를 사용하여 Excel에서 data.frame을 인쇄하는 중 오류가 발생했습니다. (0) | 2023.04.23 |
---|---|
Vim에 설치된 모든 색 구성표 목록을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.23 |
WPF 데이터 바인딩:"부모" 데이터 컨텍스트에 액세스하려면 어떻게 해야 합니까? (0) | 2023.04.23 |
SQL Server: MAX(DATE) 행만 선택 (0) | 2023.04.23 |
커밋을 브랜치에서 다른 브랜치로 복사하려면 어떻게 해야 합니까? (0) | 2023.04.23 |