Xcode 11 не может скопировать файл plist CopyPlistFile, который был только что скопирован на этапе сборки - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь следовать инструкциям здесь (для iOS) для настройки нескольких сред для моего проекта React Native. Идея состоит в том, что я могу использовать Build Phases для копирования любого plist в GoogleService-Info.plist, чтобы можно было использовать разные среды Firebase для разных схем Xcode.

Я сделал пользовательскую настройку сборки для каждой из моих 4 конфигураций Xcode под названием GOOGLE_SERVICE_PLIST_SUFFIX, и у меня есть фаза сборки (она первая запускается перед React native Copies и объединяет необходимые ресурсы. ) со следующим кодом:

cp -r "GoogleService-Info"$GOOGLE_SERVICE_PLIST_SUFFIX".plist" "GoogleService-Info.plist" &
wait $!
echo "${GOOGLE_SERVICE_PLIST_SUFFIX} Firebase plist copied"

Я могу сказать, что копирование действительно прошло успешно, но по какой-то причине сборка завершается с ошибкой:

The following build commands failed:
    CopyPlistFile /Users/andersonaddo/myappname/ios/build/biteup/Build/Products/Prod.Debug-iphonesimulator/Myappname.app/GoogleService-Info.plist /Users/andersonaddo/myappname/ios/GoogleService-Info.plist
(1 failure)

Глядя на трассировку ошибки , эта ошибка объясняется немного дальше:

CopyPlistFile /Users/andersonaddo/myappname/ios/build/myappname/Build/Products/Prod.Debug-iphonesimulator/Myappname.app/GoogleService-Info.plist /Users/andersonaddo/myappname/ios/GoogleService-Info.plist (in target 'myappname' from project 'myappname')
    cd /Users/andersonaddo/myappname/ios
    builtin-copyPlist --convert binary1 --outdir /Users/andersonaddo/myappname/ios/build/myappname/Build/Products/Prod.Debug-iphonesimulator/Biteup.app -- /Users/andersonaddo/myappname/ios/GoogleService-Info.plist
error: Build input file cannot be found: '/Users/andersonaddo/lunchme/ios/GoogleService-Info.plist' (in target 'biteup' from project 'biteup')

Кто-нибудь знает, почему может происходить такое поведение? Если я попытаюсь построить заново после первого сбоя, я не столкнусь с этой проблемой, потому что скопированный файл остается в каталоге ios с первой попытки.

1 Ответ

0 голосов
/ 05 июля 2020

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

Я использовал подход, аналогичный описанному здесь, для настройки alpha (dev), beta (stage) и сборки prod: https://blog.echobind.com/a-12-factor-approach-to-environment-specific-builds-in-react-native-ae1fb77ed799

Затем я настроил 3 приложения в Firebase и сохранил файлы plist в своем приложении с соответствующими именами (например, GoogleService-Info-beta. plist).

Наконец, я добавил в сценарий запуска для каждой схемы (как показано ниже), и он отлично работает.

RN @ 0.62.2, RNFB @ v7.1.0

Схема запуска скрипта

Я добавил файл, который копируется в (GoogleService-Info.plist), в свой gitignore, поскольку он изменяется, когда я запускаю схемы сравнения на моем компьютере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...