React Native XCode Project Архив продукта Сбой с дублирующимися символами для архитектуры arm64

XCode Log

Как ни странно, я не могу заставить Архив работать в XCode, но сборка завершается без ошибок на дублированных символах, если я не пытаюсь архивировать, а просто создаю версию выпуска. Проект также правильно строится на устройствах.

Я искал эту тему и пытался отключить тестируемость, а также установить "Нет общих блоков" в настройках проекта "НЕТ", но пока не повезло.

Проект является проектом React Native 0.40 с установленными CocoaPods. 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, так как устанавливаются контейнеры.

Был бы действительно признателен за любую помощь или проницательность в этом, застрял в этом часами.

Ответ 1

Наконец решена проблема после нахождения соответствующего вопроса на другом реагировать нативный проект здесь.

Ответ заключается в том, что в проекте Xcode есть две копии React Native: одна из CocoaPods и другая как подпроект. Просто удалите все модули, которые уже были объявлены в подфайле в Libraries внутри Xcode, и ошибка исчезнет после очистки и повторной попытки.

Что интересно в этой проблеме, так это то, что все сборки в Debug и Release работают, но это не удается при попытке архивирования проекта для распространения.

[Обновление 2 мая 2017 года]

Решение, описанное выше, может привести к ошибкам отладки при запуске вашего кода с помощью react-native run-ios/android с поддержкой react-native run-ios/android хотя это позволяет успешно архивировать проект.

Альтернативный метод заключается в удалении этих дублирующих модулей, которые существуют как в Libraries и в Podfile из объявления Podfile а не в папку Libraries. И, конечно же, запустите соответствующие команды pod, очистите свой проект и т.д.

Это позволило моему архиву архивировать, а также работать без ошибок времени отладки

Ответ 2

Поэтому я сделал еще больше исследований в этой области, и обходной путь на самом деле намного проще. Или, по крайней мере, это было в моем случае. Проблема в том, что когда вы объявляете React в podfile, Pods xcodeproject получает цель React как часть процесса pod install. Наличие этой цели в проекте Pods вызывает ошибку при архивировании. Поэтому исправление заключается в удалении цели.

enter image description here

Проблема с удалением цели в xCode заключается в том, что она фактически редактирует файл project.pbxproj в папке Pods, которая не находится в управлении версиями. Поэтому, когда сборка будет архивироваться, как только вы это сделаете, если вы разворачиваете ее из любого места, кроме машины, которая вручную удалила ее, она все равно будет работать. Таким образом, решение состоит в том, чтобы добавить эту команду post install в нижнюю часть вашего podfile:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

Это просто перебирает все контейнеры, которые нужно установить, и удаляет цель для Реагирующей. Таким образом, везде, где строится проект, также удаляется цель. Теперь, когда вы создадите для Архива, это не подведет.

Ответ 3

Я решил эту проблему следующим образом: (ref.: https://github.com/react-community/react-native-maps/issues/718)

  1. Открыть Xcode> Pods> Целевые файлы поддержки> Pods- {TARGET-NAME} найти "OTHER_LDFLAGS" и удалить только -ObjC в этих двух файлах:

Pods-{TARGET-NAME}.release.xcconfig e Pods-{TARGET-NAME}.debug.xcconfig

  1. Перейти к главной цели проекта> Настройки сборки> Другие флаги компоновщика: убедитесь, что в значение, которое я удалил в папке сборки/сборки в ios, не осталось -ObjC и снова запустить проект.

Он работает сейчас.

Побочные эффекты по ссылке выше: приложение может стать больше, поскольку в нем могут быть дублированы символы.

Надеюсь, это может вам помочь.