Кнопки Code Push должны быть такими же для среды , в которую выпускается приложение, и той, в которую приложение встроено, чтобы получать изменения.
Существует два возможных решения, чтобы избежать этого конфликта.
- Определить отдельные схемы сборки.
- Добавить собственный сценарий, который изменяет Code Pushключи с изменением среды.
Схемы / Типы сборки
Android
android {
...
buildTypes {
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
...
}
}
...
}
Источник
Вandroid/app/build.gradle
вы можете определить различные buildTypes
и построить приложение на его основе
IOS
На вкладке Info нажмите кнопку +
в Configurations
и Duplicate "Release" Configuration
и установите его имя на Staging
Теперь вы можете настроить User Defined Settings
и определить новый параметр CODEPUSH_KEY
и установить переменную ${CODEPUSH_KEY}
для различных схем.
Сложные шаги объясняются здесь: Источник
Пользовательский скрипт
AlternaВ действительности, если вы не хотите добавлять Схемы / Типы сборки , вы можете добавить собственный скрипт, который меняет ключи в зависимости от среды.
change-environment.sh
#!/usr/bin/env bash
#################################
# Change the environment variable
#################################
environment=$1
# Read Directory Path
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$parent_path"
rm ../.env
# Set NODE_ENV in your .env file based on the script
echo "NODE_ENV=${environment}" > ../.env
#################################
# Change the code push key
#################################
if [ "$environment" = "staging" ]
then
echo "Change Code Push Key - Staging"
sed -i '' -E 's/CODEPUSH_KEY ?= ?".+"/CODEPUSH_KEY = "${YOUR_STAGING_IOS_CODEPUSH_KEY}"/' ../ios/YourProj.xcodeproj/project.pbxproj
sed -i '' -E 's/buildConfigField "String", "CODEPUSH_KEY", '\''".+"'\''/buildConfigField "String", "CODEPUSH_KEY", '\''"${YOUR_STAGING_ANDROID_CODEPUSH_KEY}"'\''/' ../android/app/build.gradle
elif [ "$environment" = "production" ]
then
echo "Change Code Push Key - Production"
sed -i '' -E 's/CODEPUSH_KEY ?= ?".+"/CODEPUSH_KEY = "${YOUR_PRODUCTION_IOS_CODEPUSH_KEY}"/' ../ios/YourProj.xcodeproj/project.pbxproj
sed -i '' -E 's/buildConfigField "String", "CODEPUSH_KEY", '\''".+"'\''/buildConfigField "String", "CODEPUSH_KEY", '\''"${YOUR_PRODUCTION_ANDROID_CODEPUSH_KEY}"'\''/' ../android/app/build.gradle
fi
Теперь вы можете запустить .${SCRIPT_PATH}/change-environment.sh ${ENV}
Пример: ./change-environment.sh staging
Этот скрипт изменяет buildConfigField
в android buildTypes
и CODEPUSH_KEY
UserЗаданные настройки для предопределенных схем в ios.
Было бы удобно объединить этот скрипт с командой запуска пакета пакета native-пакета в вашей package.json
"start": "./change-environment.sh development && node node_modules/react-native/local-cli/cli.js start",
"start:staging": "./change-environment.sh staging && node node_modules/react-native/local-cli/cli.js start",
"start:production": "./change-environment.sh production && node node_modules/react-native/local-cli/cli.js start",