it-roy-ru.com

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

 XCode Log

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

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

Проект является проектом на основе React Native 0.40 с установленными CocoaPods. Подфайл это

# 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, так как установлены модули. 

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

15
Kaiwen Huang

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

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

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

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

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

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

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

13
Kaiwen Huang

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

 enter image description here

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

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

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

36
stueynet

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

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

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

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

Это работает сейчас. 

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

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

1
Alexandre Lage