programing

프레임워크 모듈 내 비모듈 헤더 포함

powerit 2023. 4. 23. 11:35
반응형

프레임워크 모듈 내 비모듈 헤더 포함

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 Modulesobjc 코드로만 동작합니다.이치노

조사 기간 후 swift가 경고 파라미터를 clang으로 전달할 수 있다는 것을 알게 되었습니다.OTHER_SWIFT_FLAGS로로 합니다.-Xcc -Wno-error=non-modular-include-in-framework-module수입하다

같은 문제를 안고 있는 사람에게만

"프레임 모듈 내부에 비모듈형 헤더 포함"

이 에러가 발생했을 경우는, 파일 인스펙터 「Target Membership」에서 Import 하는 파일을 「public」이라고 마크하는 것만으로 해결할 수 있습니다.기본값은 "프로젝트"이며, 이렇게 설정하면 이 오류가 발생할 수 있습니다.예를 들어 Google Analytic의 헤더를 프레임워크로 Import하려고 할 때도 그랬습니다.

하는 보다 은, 「이것」의 「」#import「」의 에 있는 ..m파일(「파일」(「파일」)에되어 있는 ).hheader file)를 지정합니다.이렇게 하면 비모듈형 헤더 파일이 포함되어 있다고 불평하지 않습니다.는 이 , 그것은 i런가 i i i i i i i i i i i i 。Allow non-module includesYES기능하지 않았기 때문에, 실장 파일로 이동하면 불평이 없어졌습니다.이것은 헤더 파일을 Import 및 포함할 때 기본적으로 권장되는 방법입니다.이 작업을 완료하면, 이 설정을NO작동해야 합니다.

는 상, , to, , 리, to, to, to, to, to을 목표로 삼아야 합니다.Allow non-module includesNO 을 로 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' }

안에서.podspecfilename을 클릭합니다.

나도 같은 문제가 있었고 위에서 아무것도 도와주지 않았어.그래서 제 대답이 누군가에게 도움이 되었으면 좋겠어요.제 경우 문제는 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.frameworkDelete(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

반응형