Codemagi c не работает для пользовательского сценария запуска в iOS? - PullRequest
3 голосов
/ 10 февраля 2020

Я пытаюсь создать приложение для флаттера на Codemagi c. Приложение использует несколько проектов Firebase, поэтому я настроил его соответствующим образом. Я могу запустить все варианты как для android, так и iOS локально. android сборка также успешна на Codemagi c, но сборка iOS завершается неудачей.

На приведенном ниже снимке экрана вы можете увидеть, что после достижения файла сценария запуска установки Firebase сборка iOS не удалась enter image description here

Код для моего файла установки Firebase:

environment="default"

# Regex to extract the scheme name from the Build Configuration
# We have named our Build Configurations as Debug-dev, Debug-prod etc.
# Here, dev and prod are the scheme names. This kind of naming is required by Flutter for flavors to work.
# We are using the $CONFIGURATION variable available in the XCode build environment to extract 
# the environment (or flavor)
# For eg.
# If CONFIGURATION="Debug-prod", then environment will get set to "prod".
if [[ $CONFIGURATION =~ -([^-]*)$ ]]; then
environment=${BASH_REMATCH[1]}
fi

echo $environment

# Name and path of the resource we're copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist
GOOGLESERVICE_INFO_FILE=${PROJECT_DIR}/config/${environment}/${GOOGLESERVICE_INFO_PLIST}

# Make sure GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_FILE}"
if [ ! -f $GOOGLESERVICE_INFO_FILE ]
then
echo "No GoogleService-Info.plist found. Please ensure it's in the proper directory."
exit 1
fi

# Get a reference to the destination location for the GoogleService-Info.plist
# This is the default location where Firebase init code expects to find GoogleServices-Info.plist file
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}"

# Copy over the prod GoogleService-Info.plist for Release builds
cp "${GOOGLESERVICE_INFO_FILE}" "${PLIST_DESTINATION}"

Я следую https://medium.com/@animeshjain / build-flavors-in-flutter- android -and- ios -with-different-firebase-projects-per-flavour-27c5c5dac10b статья для настройки.

Вот еще один подход, который я выбрал в соответствии с рекомендациями команды Codemagi c

Вместо создания разновидностей я загрузил мои firebase файлы в codemagi c в качестве переменных среды. Все отлично работает для android, но сборка iOS завершается неудачно, сообщая, что не удалось получить GOOGLE_APP_ID. Я знаю, что многие люди задавали вопрос об этом в стеке, но ни один из них не работает для меня, поскольку они не связаны с кодом magi c и вместо этого перетаскивают файл в Xcode вручную. Я также сделал S SH, чтобы проверить, добавляется ли файл firebase в папку iOS и добавляется ли он с помощью сценариев предварительной сборки, но сборка iOS все еще не удается.

1 Ответ

5 голосов
/ 13 февраля 2020

Я использовал ту же статью Medium для настройки вкусов (prod и dev) на моей локальной машине. Я следовал руководству Codemagi c по настройке переменных среды для файлов службы Google и продолжал сталкиваться с одной и той же ошибкой Could not get GOOGLE_APP_ID.

Для меня ключевым моментом была репликация моей локальной среды в Codemagi. c настолько близко, насколько это возможно, и используйте сценарий установки Firebase в Xcode во время сборки Codemagi c.

В моем случае это означало воссоздание точно такой же структуры папок и файлов для Runner/Firebase/prod/GoogleService-Info.plist, чтобы Сценарий установки Firebase на этапах сборки может выполняться без проблем.

Во-первых, я изменил сценарий предварительной сборки в Codemagi c, чтобы обеспечить возможность обнаружения GoogleService-Info.plist сценарием установки Firebase:

#!/bin/bash

set -e # exit on first failed commandset

rm -rf $FCI_BUILD_DIR/iOS/Runner/GoogleService-Info.plist

mkdir -p “${FCI_BUILD_DIR}/iOS/Runner/Firebase/${FCI_FLUTTER_SCHEME}”

echo $IOS_FIREBASE_SECRET | base64 —decode > $FCI_BUILD_DIR/iOS/Runner/Firebase/prod/GoogleService-Info.plist

Во-вторых, Xcode должен знать об этих файлах. Файл, присутствующий в каталоге, не означает, что он находится на XCode. Добавьте каталог Firebase/ в XCode by File -> Add files to «Runner ..» и обязательно снимите флажок «Копировать, если требуется».

Если вы уже строите локально без каких-либо проблем, вы можете возможность пропустить этот шаг.

Вот как мои папки отображаются в Xcode

Затем запустите сборку на Codemagi c с помощью FCI_FLUTTER_SCHEME=prod.

Наконец, чтение xcodebuild.log в Codemagi c build Artifacts может дать вам более подробную информацию.

...