iOS реагирует на родное приложение, которое не обновляется с сервера CodePush - PullRequest
0 голосов
/ 24 октября 2018

Я следовал инструкциям для правильной настройки CodePush.Во-первых, я нажимаю на AppCenter:

$ appcenter codepush release-react -a myUser/appName -d Production
Detecting ios app version:

Using the target binary version value "1.0" from "ios/reactnative/Info.plist".

Running "react-native bundle" command:

node node_modules/react-native/local-cli/cli.js bundle --assets-dest /var/folders/gy/737c70fj7tq3pwdw758glxz00000gp/T/code-push118924-95814-1e6qqdj.df3g/CodePush --bundle-output /var/folders/gy/737c70fj7tq3pwdw758glxz00000gp/T/code-push118924-95814-1e6qqdj.df3g/CodePush/main.jsbundle --dev false --entry-file index.js --platform ios
Loading dependency graph, done.
bundle: Writing bundle output to: /var/folders/gy/737c70fj7tq3pwdw758glxz00000gp/T/code-push118924-95814-1e6qqdj.df3g/CodePush/main.jsbundle
bundle: Done writing bundle output
bundle: Copying 6 asset files
bundle: Done copying assets

Releasing update contents to CodePush:

Successfully released an update containing the "/var/folders/gy/737c70fj7tq3pwdw758glxz00000gp/T/code-push118924-95814-1e6qqdj.df3g/CodePush" directory to the "Production" deployment of the "appName" app.

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

У меня естьпопытался перезапустить приложение, переустановить приложение и т. д., но приложение не обновляется с серверов CodePush.

В моей консоли XCode я вижу:

loading - codepush2018-10-24 12:10:10.837955+0200 reactnative[5546:3916480] 
[CodePush] Loading JS bundle from file:///Users/myUser/Library/Developer/CoreSimulator/Devices/4E7D0B07-B6B2-4D3C-B5B8-F28F3DA47077/data/Containers/Bundle/Application/081FD17C-B182-488D-B2D1-C786A3B25AAB/reactnative.app/main.jsbundle

Означает ли эточто CodePush загружается из local ?

Я полагаю, что я правильно использую схему release:

release mode

class App extends React.Component {
    constructor(props){
        super(props)
    }
    componentDidMount() {
        codePush.sync({
            updateDialog: true,
            installMode: codePush.InstallMode.IMMEDIATE
        });
    }
    render(){
        return <Main screenProps={this.props} />
    }
}
const codePushOptions = { checkFrequency: codePush.CheckFrequency.ON_APP_RESUME };
const ConnectedApp = codePush(codePushOptions)(connect(state => state)(App))

firebase.auth().onAuthStateChanged(auth => {
    if(auth){
        store.dispatch(setUser(auth))
    }else{
        store.dispatch(logout())
    }
})

export default () => (
    <Provider store={store}> 
        <ConnectedApp />
    </Provider>
)

Я также не вижу updateDialog: true, когда приложение монтируется.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Кнопки 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",
0 голосов
/ 25 октября 2018

CodePush не загружается с точно, он загружает пакет с сервера CodePush.Итак, путь, который вы видели, является частью пути файловой системы вашего симулятора.

Пожалуйста, обратитесь сюда, чтобы узнать, как установить цель развертывания

https://docs.microsoft.com/en-us/appcenter/distribution/codepush/react-native

...