LoginSignup
2
3

More than 5 years have passed since last update.

react-native-git-upgrade で Apple Mach-O Linker (ld) Error Group! が出たときの解決方法

Last updated at Posted at 2017-06-28

React Nativeのバージョンアップで、"Apple Mach-O Linker (ld) Error Group!"というエラーが出て、2日ほど悩んだので、解決方法をメモしておきます。

発端

React Native 0.41.2 -> 0.45.0に↓の手順に従って、react-native-git-upgradeを使ってアップグレードした。

Upgrading to new React Native versions
https://facebook.github.io/react-native/docs/upgrading.html

Androidは問題なく動作したのだが、iOSがエラー頻発。npmのパッケージの問題だったり、いろいろあったが割愛。
どうにか、iOSシミュレーターでアプリが起動するようにはなった。

Kobito.Z32jnK.png

最後に、Archiveしてipaファイルを生成しようとしたら、"Apple Mach-O Linker (ld) Error Group!"というエラーがでて、Stack Overflowなどで紹介されているあらゆる方法を試したが解決せず。

エラーを詳しく

もうバージョンを下げたままで行くかと絶望しかけたが、なにか基本的なことを見落としている感覚があったので、Xcodeのエラーの見方について調べた。
で、実はXcodeにはErrorの詳細を見る方法があった。

エラー詳細

赤丸で示したところを押すと以下の画面に。

Kobito.Pp1iAC.png

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

ライブラリ削除.png

赤丸のライブラリを削除して、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は、いろいろ簡単にしてくれるのだが、基礎になってるところを知らないと、こういうところで代償を払うことになるという例でした。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3