gpt4 book ai didi

iOS React Native 应用程序不会从 CodePush 服务器更新

转载 作者:行者123 更新时间:2023-12-01 20:15:38 25 4
gpt4 key购买 nike

我已按照说明正确设置 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 正在从本地加载?

我相信我正在正确运行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

最佳答案

The Code Push keys must be same to the environment to which the application is being released and the one to which the application is built in order to receive the changes.

为了避免这种冲突,有两种可能的解决方案。

  • 定义单独的构建方案。
  • 添加一个自定义脚本,该脚本会随着环境的变化而更改代码推送键。

构建方案/类型

安卓

android {
...
buildTypes {
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
...
}
}
...
}

Source

android/app/build.gradle中,您可以定义各种buildTypes并基于它构建应用程序

IOS

信息选项卡下,单击配置复制“发布”配置中的+按钮并设置其命名为Staging

现在您可以配置用户定义设置并定义新设置CODEPUSH_KEY并将${CODEPUSH_KEY}变量设置为不同的方案。

详细步骤解释如下:Source

自定义脚本

或者,如果您不想添加更多构建方案/类型,您可以添加一个根据环境更改键的自定义脚本。

更改环境.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 暂存

此脚本将 android buildTypes 中的 buildConfigFieldCODEPUSH_KEY 用户定义的设置 更改为预定义的方案ios。

将此脚本与 package.json 中的 React Native 的 packager start 命令结合起来会很方便

"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",

关于iOS React Native 应用程序不会从 CodePush 服务器更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52966421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com