All Articles

React NativeでiOSプラットフォームビルドに失敗する原因はXcode Pluginかもしれない!?

背景

いわゆるマルチプラットフォーム対応アプリの検証としてXamarin, Flutter, React Nativeの開発環境を構築していたのだが、React Nativeの環境構築ではハマったのでそれを記事にします。

どんな問題?

公式サイトのReact Native CLI Quickstartをみながら

  • DevelopmentOS: MacOS
  • Target OS: iOS

で環境を作っていました。

  • React Native Application テンプレート作成&Metro Builder起動
cd AwesomeProject
npx react-native start

を作成して、以下のコマンドでiOSシミュレータへ転送しようとしたところ

npx react-native run-ios

以下のようなエラーがでました。

error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by opening AwesomeProject.xcworkspace. Run CLI with --verbose flag for more details.
Command line invocation:
    /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -workspace AwesomeProject.xcworkspace -configuration Debug -scheme AwesomeProject -destination id=47D6B203-A763-47C2-AC70-D4E2CDB0D405

(省略)
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/README.md' of type 'net.daringfireball.markdown' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/benchmarks/CMakeLists.txt' of type 'text' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/benchmarks/README.md' of type 'net.daringfireball.markdown' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 8.0 to 13.4.99. (in target 'OpenSSL-Universal' from project 'Pods')
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 5.0, but the range of supported deployment target versions is 8.0 to 13.4.99. (in target 'CocoaAsyncSocket' from project 'Pods')

2020-04-10 14:54:11.565 xcodebuild[14038:142649] [MT] PluginLoading: Required plug-in compatibility UUID C80A9C11-3902-4885-944E-A035869BA910 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin' not present in DVTPlugInCompatibilityUUIDs
** BUILD FAILED **


The following build commands failed:
	CompileSwift normal x86_64 /Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/YogaKit/YogaKit/Source/YGLayoutExtensions.swift
	CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
(2 failures)

直し方

Xcode PluginはXcode本体と別のディレクトリに存在します。 直し方は簡単で、Alcatraz.xcpluginを削除してください。

私の場合は、Xcode Pluginの配下ディレクトリを調べるとAlcatraz.xcplugin のみでしたが、

他のプラグインがインストールされている場合でも同様の事象が発生する可能性があります。

  • ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins配下を削除する
  • Macを再起動する。 ←削除しただけだとエラーは消えませんでした。

過程

Xcode Pluginとしてはるか昔に、Alcatraz.xcpluginをインストールしていたようなのですが、 あまり覚えていません。

現在のXcode11.4環境では動作しない。

Alcatraz.xcpluginプラグインはそもそもXcode11.4をサポートしていない。

ただ通常のSwiftによるiOS開発ではこの無効なPluginがインストールされていても

アプリビルドには全く問題ないが React Nativeビルド時には問題になる

Pluginの存在さえ忘れていたので、「React Native + Alcatraz.xcplugin」

でGoogle先生に聞きましたが、答えが見つからず…

続いて、DVTPlugInCompatibilityUUIDs関連で記事を見つけて、

記事としてはだいぶ古いのですが、レアケースなのかもしれない?

と考え Xcodeのアップデートした後にプラグインを使えるようにする

参考に

defaults read /Applications/Xcode.app/Contents/Info.plist DVTPlugInCompatibilityUUID

でXcode 11.4のUUIDを調べて、

~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin/Contents/Info.plist

のDVTPlugInCompatibilityUUIDs の配列に追加ましたが

解決せず。

エラーの出方がかわりました。これにより解決に一歩近づけました。

warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 5.0, but the range of supported deployment target versions is 8.0 to 13.4.99. (in target 'CocoaAsyncSocket' from project 'Pods')
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 8.0 to 13.4.99. (in target 'OpenSSL-Universal' from project 'Pods')
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/README.md' of type 'net.daringfireball.markdown' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/benchmarks/CMakeLists.txt' of type 'text' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')
warning: no rule to process file '/Users/masa/workspace/reactNative/AwesomeProject/ios/Pods/Flipper-RSocket/rsocket/benchmarks/README.md' of type 'net.daringfireball.markdown' for architecture 'x86_64' (in target 'Flipper-RSocket' from project 'Pods')

2020-04-10 15:13:38.774 xcodebuild[15904:161706] [MT] PluginLoading: Skipping plug-in at path '/Users/masa/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin' because it is not compatible with this version of Xcode.
** BUILD FAILED **

Alcatraz.xcpluginはXcodeのバージョンと一致しないよ!との指摘があるので、

では一旦削除してみよう!という結論にいたり、上記の対応により無事解決しました。

おまけ

Alcatraz.xcplugin がインストールされている状態でも、XcodeからReact Nativeプロジェクトに含まれる/ios プロジェクトに対してビルドを行った成功してシミュレータへインストールできました。

また、先にFlutter、Xamarinの環境は整えていましたが、

こちらも Alcatraz.xcplugin がインストールされた状態でも問題なくシミュレータへインストールできました。

最後に

今回、Google検索だけでは答えが見つからず、たまたま手元にセカンドPCがあったため そちらの環境を作る中で、運良くきづくことができました。 他の環境との比較をもっと早くやれていれば解決がスムーズに行えたかなと感じています。