programing

"React / RCTBridge Module 。h' 파일을 찾을 수 없습니다.

starjava 2023. 3. 28. 20:32
반응형

"React / RCTBridge Module 。h' 파일을 찾을 수 없습니다.

xcode에서 리액트 네이티브 iOS 앱을 빌드하는 동안 이 오류가 발생했습니다.

여기에 이미지 설명 입력

npm 설치 및 rpm 링크 react-native-fs 라이브러리 후 이 오류가 발생하기 시작했습니다.그러나 온라인으로 해결책을 검색한 결과, 많은 사람들이 다른 네이티브 라이브러리를 설치할 때 동일한 오류가 발생한다는 것을 알게 되었습니다.

많은 사람들이 제안할 수 있는 해결책은 "빌드 설정" -> "헤더 검색 경로" 아래에 다음 추가입니다.

$(SRCROOT)/../node_modules/react-native/React (재귀)

그러나 이 솔루션은 실패하여 동일한 오류가 발생함

이 문제는 iOS용 0.40 이상의 리액트 네이티브 앱을 아카이브하려고 할 때 발생했습니다(솔루션:로 업그레이드하면 신뢰성 높은 빌드온에 실패합니다).

Xcode는 리액트 네이티브 라이브러리를 병렬로 구축하려고 했고 실제로 리액트 라이브러리를 구축하기 전에 암묵적인 리액트 의존성을 가진 라이브러리를 구축했습니다.

제 경우 해결 방법은 다음과 같습니다.

  1. 병렬 빌드를 비활성화합니다.

    • [ Xcode ]메뉴 -> [ Product ]-> [ Scheme ]-> [ Manage Sheemes ]...
    • 응용 프로그램을 두 번 클릭합니다.
    • [ Build ]탭 -> [ Parallelize Build ]의 선택을 해제합니다.
  2. 프로젝트 의존관계로 반응 추가

    • Xcode Project Navigator -> React.xcodeproj를 라이브러리에서 루트 트리로 드래그합니다.
    • [ Build Phase ]탭 -> [ Target Dependencies ]-> [ + ]-> [ React ]추가

「」를 디세블로 해 주세요.Parallelise BuildReact

여기에 이미지 설명 입력

퀵픽스(최상은 아님)

Import react-native 헤더 행을 변경합니다.

 #import <React/RCTBridgeModule.h>
 #import <React/RCTLog.h>

수신인:

 #import "RCTBridgeModule.h"
 #import "RCTLog.h"

다음은 사용하려고 했던 라이브러리의 변경 예를 제시하겠습니다.#46 - 'RCTBridge Module'을 닫습니다.h' 파일을 찾을 수 없습니다.

바꾸다

  #import "RCTBridgeModule.h"

로.

 #import "React/RCTBridgeModule.h"

이 에러는, 앱에 새로운 스킴/타겟(app.staging)을 추가하고, 포드 인스톨을 사용해 팟을 인스톨 했을 때에 발생했습니다.

이 문제는 모든 대상에 대해 포드가 공유되지 않기 때문에 발생합니다.그래서 새로 추가된 타겟(app.staging)을 포드 파일 내에 추가해야 합니다.

여기 제 팟파일입니다.

platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

target 'app' do
  # Pods for app
  pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
  pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"

  target 'appTests' do
    inherit! :search_paths
    # Pods for testing
  end

  # Pods for staging app // important line below
  target 'app.staging'

  use_native_modules!
end

를 0후 이 React Native 0.40+를 실행해야 할 수 .react-native upgrade커맨드 라인에 표시됩니다.

ifLibraries/React.xcodeproj in , reinstall node_install node_installing.

rm -rf node_modules && yarn

리액트 네이티브 0.46.3에서 새로 만든 프로젝트는 빨간색이었습니다.리액트 네이티브를 시작할 때 npm 5.3.0과 실 0.24.5를 가지고 있습니다.

하다가 이 .react-native link0.RN 0.59+에서 하지 않은

해결책은 Xcode의 Libraries 폴더에서 xcodeproj 파일을 선택한 다음 Build Settings에서 Header Search Paths를 변경하여 다음 두 가지(재귀적)를 추가하는 것입니다.

$(SRCROOT)/../../../ios/Pods/Headers/Public/React-Core
$(SRCROOT)/../../../ios/Pods/Headers/Public

my의 모든 것을 제거하는 이었다.Libraries여기에 기술한 바와 같이

이전 게시물 및 여기에서 설명한 리액트 네이티브 라이브러리의 최신 릴리스에는 호환성 변경이 있습니다.react-native 0.40+로 업그레이드하지 않고 react-native-fs 등 이전 버전의 라이브러리를 강제로 설치할 수 있습니다.

npm install --save -E react-native-fs@1.5.1

디버깅을 빌드할 수 있었지만 아카이브를 빌드할 수 없었습니다.

는 이 했습니다.React.xcodeproj/ Xcode >node_modules/react-native/React Xcode에 하였습니다.

React Native 0.60 이후 이 문제는 종종 새로운 '자동 링크' 기능과 함께 연결된 라이브러리로 인해 발생합니다.이것으로 해결됩니다.

다음 방법을 사용하여 이전 라이브러리 연결 해제

$ react-native unlink react-native-fs

다음을 사용하여 포드 통합 전체를 새로 고칩니다.

$ pod deintegrate && pod install

이제 워크스페이스를 새로고침하고 클린 빌드를 수행합니다.

이 에러는 create-react-native-module을 사용하여 작성한 새로운 모듈에서 발생합니다.게시된 솔루션 중 나에게 효과가 있는 솔루션이 하나도 없었다.

은, 반드시 이었습니다.yarn 에서 " " " 를 " 를 선택합니다.node_modules/(서양속담, 친구속담)내 모듈 이름 -> 제품 -> 스킴 -> 반응하다

는 this는,, 행 this this this this this this를 실행한 에 나에게 나타났다.pod install명령어를 지정합니다.이치노Xcode를 사용하다팟 파일여기서 삭제한 것은 이미 Xcode로 링크되어 있었으므로 주의해 주십시오.

target 'app' do

  pod 'GoogleMaps'
  pod 'Firebase/Auth', '~> 6.3.0'
  pod 'Firebase/Database', '~> 6.3.0'

  # Removed four pods below and it worked.

  pod 'react-native-image-picker', :path => '../node_modules/react-native-image-picker'

  pod 'ReactNativePermissions', :path => '../node_modules/react-native-permissions'

  pod 'react-native-image-resizer', :path => '../node_modules/react-native-image-resizer'

  pod 'RNFS', :path => '../node_modules/react-native-fs'

  end

프로젝트의 iOS 폴더로 이동하여 팟을 설치합니다.

$ pod install

pod type 명령어 설치 중 오류가 발생하는 경우:

$ xcode-select -p

결과는 /Applications/Xcode.app/Contents/Developer입니다.

경로가 올바르지 않은 경우 iOS 프로젝트를 Xcode로 열고 Xcode-> Preferences-> 명령줄 도구-> Xcode 선택으로 이동합니다.

다시 팟을 설치하면 문제가 해결됩니다.

https://github.com/facebook/react-native/issues/24363#issuecomment-488547280에서 anhdevit의 제안은 나에게 효과가 있었다.

In your terminal, run: defaults delete com.apple.dt.Xcode

편집기에서 만들고 싶다면 SMobile도 엽니다.xcscheme

그리고 변화parallelizeBuildables = "NO"

위의 솔루션에서는 아무것도 동작하지 않았습니다.그 아래는 동작한 것입니다(이미 체크 아웃했습니다).Parallelize Build라고 덧붙였습니다.React)

1. Open XCode --> To Libraries add `$LibraryWhichDoesNotWork.xcodeproj$`
2. Then for your app in the `Build Phases` add to the `Link Binary with Libraries` the file `lib$LibraryWhichDoesNotWork$.a`

0.58.4에서 새로운 react-native 버전 0.60.4로 업그레이드하는 동안 이 문제가 발생했습니다.인터넷에서 찾은 정보는 도움이 되지 않았지만, 그럭저럭 작동했습니다.

빌드 설정으로 이동하여 '헤더 검색 경로'를 검색한 후 항목을 선택하고 DELETE 버튼을 누릅니다.

이 값들을 덮어썼는데 삭제 후 다시 디폴트로 돌아간 것 같습니다.또한 Cocaapods는 그것에 대해 터미널에 메시지와 함께 불평하고 있었다.pod install:

[!] The `app [Release]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-app/Pods-app.release.xcconfig'. This can lead to problems with the CocoaPods installation

병렬 빌드를 활성화하여 헤더 누락 문제를 방지하려면 스킴에서 리액트 헤더를 파생 데이터 영역에 배치하는 사전 빌드 단계를 지정하십시오.이 경우 빌드 설정은 React 프로젝트에서 가져옵니다.네, 그것은 아름다운 것이 아니라 일을 완수하고 많은 시간을 절약할 수 있습니다.prebuild 스텝의 출력은 prebuild.log가 됩니다.복사해야 하는 정확한 헤더는 프로젝트 반응 원어민 의존성에 따라 다르지만, 여기서 Jist를 얻을 수 있습니다.

스킴 편집 => 빌드

환경변수에서 파생된 데이터 디렉토리를 가져와 필요한 리액트헤더를 복사합니다.

#build_prestep.sh (chmod a+x)
derived_root=$(echo $SHARED_DERIVED_FILE_DIR|sed 's/DerivedSources//1')
react_base_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Base/#1')
react_view_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Views/#1')
react_modules_head=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Modules/#1')
react_netw_headers=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Network/#1')
react_image_header=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Image/#1')

echo derived root = ${derived_root}
echo react headers = ${react_base_headers}

mkdir -p ${derived_root}include/React/

find  "${react_base_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_view_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_modules_head}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_netw_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_image_header}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;

이 스크립트는 빌드 클리닝 중에 호출됩니다.이것은 이상적이지 않습니다.제 경우 환경변수가 하나 있는데, 이를 통해 클린 중에 스크립트를 조기에 종료할 수 있습니다.

if [ "$RUN_CLANG_STATIC_ANALYZER" != "NO" ] ; then
    exit 0 
fi

react-module 버전 0.67.4(업데이트 완료)이 빌드 오류는 ios에서 표시되기 시작했습니다.

프로젝트 > [ Edit Scheme ]> [ Build ]에서 찾았습니다.

"React"에 대한 참조가 있었지만 "Missing"으로 표시되었습니다.

그래서 Pods 폴더와 "React" 팟 프로젝트가 있는 팝업을 통해 리액트백(작은 버튼)을 제거하고 리액트백(작은 버튼 + 버튼)을 추가했습니다.

즉, /node_modules/react-native/ReactReact.xcodeproj와 같이 스킴에서 빌드 대상으로 설정하는 프로젝트 파일을 제공하기 위해 사용되는 react-native와 같습니다.

그러나 이 새로운 버전의 react에서는 프로젝트가 존재하지 않습니다.그 때문에 네이티브모듈 브릿지가 있는 경우 구축이 실패하는 이유가 설명됩니다(그것은 존재하지 않는 헤더 파일을 검색합니다).

빌드 에러는 표시되지 않게 되었습니다만, 동작하는 것은 확인하지 못했습니다.긍정적인 결과(또는 부정적인 결과)가 나오면 업데이트됩니다.비록 이것이 그것을 해결한다고 해도, 저는 이것이 "올바른" 방법인지 확신할 수는 없지만, 저는 분명히 제안을 받아들일 용의가 있습니다.

나의 경우 포드파일에 잘못된 타겟이 선택되어 수정 후 갈 수 있었습니다.

내 경우 타겟 프로젝트의 제외 아키텍처 아래에 있는 릴리스 섹션에서 'arm64'를 삭제했습니다.

  • pods 폴더와 .xcworkspace 파일을 삭제합니다.
  • 해당 디렉토리에서 포드 설치를 다시 실행합니다.
  • 아카이브를 다시 시도하여 완료

이 문제를 해결하기 위해 할 수 있는 일은 다음과 같습니다.

1)npm uninstall reat-native-fs

) 2npm unlink react-native-fs

이것으로 라이브러리가 정상적으로 삭제되어 프로젝트에 lib를 다시 설치하고 이번에는 모든 것을 수동으로 링크합니다.자동 링크가 원인이 되어 이 오류가 발생할 수 있습니다.

언급URL : https://stackoverflow.com/questions/41663002/react-rctbridgemodule-h-file-not-found

반응형