react-native-git-upgrade에서 Apple Mach-O Linker (ld) Error Group!이 나왔을 때 해결하는 방법

React Native의 버전 업에서 "Apple Mach-O Linker (ld) Error Group!"라는 오류가 나오고, 이틀 정도 고민했기 때문에, 해결 방법을 메모해 둡니다.

발단



React Native 0.41.2 -> 0.45.0으로 ↓의 절차에 따라 react-native-git-upgrade를 사용하여 업그레이드했습니다.

Upgrading to new React Native versions
htps : // 펑세보오 k. 기주 b. 이오/레아ct-나치ゔぇ/도cs/우pg등ぢg. HTML

안드로이드는 문제없이 작동했지만, iOS가 오류 빈발. npm 패키지의 문제이거나, 여러가지 있었지만 할애.
어떻게 든 iOS 시뮬레이터에서 앱이 시작되게 되었다.



마지막으로, Archive하여 ipa 파일을 생성하려고 하면, "Apple Mach-O Linker (ld) Error Group!"라는 에러가 나와, Stack Overflow등에서 소개되고 있는 모든 방법을 시도했지만 해결하지 않고 .

오류 자세히



이미 버전을 낮춘 채로 갈까 절망했지만, 뭔가 기본적인 것을 간과하고 있는 감각이 있었으므로, Xcode의 에러의 견해에 대해 조사했다.
그래서 실은 Xcode에는 Error의 상세를 보는 방법이 있었다.



빨간색 원으로 표시된 곳을 누르면 다음 화면으로.


ArchiveIntermediates/hohoho/BuildProductsPath/Release-iphoneos/libReact.a(RCTWebSocketModule.o)
/Users/deguchi/Library/Developer/Xcode/DerivedData/hohoho-gbncvuhsltiqyzdxdmgvxwlfsfdm/Build/Intermediates/ArchiveIntermediates/hohoho/BuildProductsPath/Release-iphoneos/libRCTWebSocket.a(RCTWebSocketModule.o)
ld: 279 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

원인



cocoapod의 pod install이 통과하지 않기 때문에, 조사한 바 이하의 쓰는 방법이 필요했다.
 react_path = '../node_modules/react-native'
  yoga_path = File.join(react_path, 'ReactCommon/yoga')

  pod 'React', :path => react_path, :subspecs => [
    'Core',
    'RCTText',
    'RCTImage',
    'RCTWebSocket', # needed for debugging
    'RCTNetwork',
  ]
  pod 'Yoga', :path => yoga_path

잘 모르는 채, 이것을 써서 pod install하고 있었지만, "Apple Mach-O Linker (ld) Error Group!"의 의미는, React 이하에, 라이브러리가 들어갔기 때문에, Xcode로 라이브러리를 읽고 있다 라고 , Archive 때에 이중에 읽혀지고 있다고 하는 것은 틀림없다고 하는 것이었다.

해결 방법



앱 -> general -> Linked Frameworks and Libraries



아카마루의 라이브러리를 삭제하고, Archive한 곳 무사히 다녔다! 길었다…

이제 Archive는 성공하지만 앱이 떨어지는 문제가 나왔다.

결국, 아래와 같이 Podfile을 변경했는데, 문제가 해소되었다. 너무 길었다…
 react_path = '../node_modules/react-native'
  yoga_path = File.join(react_path, 'ReactCommon/yoga')

  pod 'React', :path => react_path
  pod 'Yoga', :path => yoga_path

React Native는, 여러가지 간단하게 해 주는 것이지만, 기초가 되고 있는 곳을 모르면, 이런 곳에서 대가를 지불하게 된다고 하는 예였습니다.

좋은 웹페이지 즐겨찾기