2017-02-03 9 views
3

XCode LogРеагировать Native XCode Проект Архив продуктов завершается с повторяющимися символами для архитектуры arm64

Как ни странно, я не могу показаться, чтобы получить архив работать в 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, поскольку стручки установлены.

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

+0

Является ли путь включения и/или библиотеки для разработки таким же, как релиз? – kometen

+0

Не слишком уверен, что вы имеете в виду ... У меня нет проблем с созданием приложения в режиме Release и его запуском на устройстве. И Archive использует конфигурацию сборки Release, но только с ошибкой Archive с этими ошибками. –

ответ

9

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

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

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

[Update 2 мая 2017]

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

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

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

+1

спасибо! Если бы такой же самый точный вопрос –

+2

Это то, что я тоже подумал, однако, когда я удаляю библиотеки из папки проекта, а проект строит отлично, при отладке у меня есть ошибка «Исходный модуль не может быть пустым». Вы тоже столкнулись с этим? –

+0

Я застрял на этом прямо сейчас, в настоящее время на 400+ повторяющихся символах ... Я не могу архивировать свой проект, и мне нужно сделать релиз в эти выходные Я использую смесь либерри и стручков, я не уверен, вызвал ли он мой, как вы говорите, перекрывающиеся библиотеки. Я запустил 'pod deintegrate && pod install' ' duplicate symbol _OBJC_METACLASS _ $ _ RCTWebSocketModule' –

6

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

enter image description here

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

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

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

+1

Я провел немало часов, отслеживая эту штуку. И все остальные варианты приводят к поломке «архива» или «запуска». Взял меня навсегда, чтобы узнать, почему Реакт был построен дважды, но, наконец, это решает. Спасибо @stueynet! –

+1

@PinguinDirk потрясающий! Рад слышать это. – stueynet

+0

Я помещаю ваш код предложения в самую нижнюю часть podfile, но я запускаю «архив», он все еще дает ту же ошибку, должен ли я запускать pod install? –