奇妙なことに、XCodeでArchiveを動作させることはできませんが、Archiveを試行せずにリリースバージョンをビルドするだけで、重複シンボルのエラーなしでビルドが成功します。プロジェクトもデバイス上で適切にビルドされます。
私はこのトピックを検索し、テスト可能性を無効にして、プロジェクト設定の「No Common Blocks」をNOに設定しましたが、これまでのところ運はありません。
プロジェクトはReact CocoaPodsがインストールされたネイティブ0.40ベースのプロジェクトです。PodFileはこれです
# You Podfile should look similar to this file. React Native currently does not support use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
# Change 'AirMapsExplorer' to match the target in your Xcode project.
target 'StreetSmart' do
pod 'React', path: '../node_modules/react-native', :subspecs => [
'Core',
'RCTActionSheet',
'RCTAnimation',
'RCTGeolocation',
'RCTImage',
'RCTLinkingIOS',
'RCTNetwork',
'RCTSettings',
'RCTText',
'RCTVibration',
'RCTWebSocket'
]
pod 'GoogleMaps' # <~~ remove this line if you do not want to support GoogleMaps on iOS
# when not using frameworks we can do this instead of including the source files in our project (1/4):
# pod 'react-native-maps', path: '../../'
# pod 'react-native-google-maps', path: '../../' # <~~ if you need GoogleMaps support on iOS
end
XCodeバージョンは8.2.1であり、ポッドがインストールされているため、プロジェクトファイルは.xcworkspaceを介して開かれます。
これに関する助けや洞察を本当に感謝します、何時間もこれで立ち往生しています。
最後に、別の反応ネイティブプロジェクトで関連する問題を見つけた後、問題を解決しました here 。
答えは、Xcodeプロジェクトには2つのコピーReact Native、CocoaPodsからのコピーとサブプロジェクトとしてのコピーがあります。PodfileでLibraries
Xcode内で、エラーを消去して再試行すると消えます。
この問題の興味深い点は、デバッグとリリースのすべてのビルドは機能するが、配布のためにプロジェクトをアーカイブしようとすると失敗することです。
[2017年5月2日更新]
上記のソリューションは、react-native run-ios/Android
を使用してコードを実行すると、デバッグ時エラーを引き起こす可能性がありますが、プロジェクトを正常にアーカイブできます。
別の方法は、Libraries
とPodfile
の両方に存在する重複モジュールをPodfile
宣言から削除することですLibraries
フォルダーの代わりに。そしてもちろん、関連するポッドコマンドを実行し、プロジェクトをクリーンアップします。
これにより、コードをアーカイブし、デバッグ時エラーなしで実行できます
そのため、私はこれについてさらに調査し、回避策は実際にははるかに簡単です。または、少なくとも私の場合はそうでした。問題は、ポッドファイルでReactを宣言すると、Pods xcodeprojectがReactターゲットをpod install
プロセスの一部として取得することです。このターゲットをPodsプロジェクトに含めると、アーカイブ時にエラーが発生します。そのため、修正はターゲットを削除することです。
XCodeでターゲットを削除する際の問題は、バージョン管理下にないPodsフォルダー内のproject.pbxprojファイルを実際に編集することです。そのため、これを実行するとビルドはアーカイブされますが、手動で削除したマシン以外の場所からデプロイすると、ビルドは失敗します。そのため、解決策は、このインストール後コマンドをポッドファイルの下部に追加することです。
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "React"
target.remove_from_project
end
end
end
これにより、インストールするすべてのポッドがループされ、Reactのターゲットが削除されます。この方法でプロジェクトをビルドすると、ターゲットも削除されます。これで、Archiveにビルドしても失敗しません。
この問題を次の方法で解決しました:(参照: https://github.com/react-community/react-native-maps/issues/718 )
-ObjC
を見つけます。ファイル:Pods-{TARGET-NAME}.release.xcconfig
e Pods-{TARGET-NAME}.debug.xcconfig
-ObjC
が残っていないことを確認し、再びプロジェクト。今は動作します。
上記のリンクの副作用:重複するシンボルがあるため、アプリが大きくなる場合があります。
それがあなたを助けることを願っています。