在使用Expo的React Native(CRNA)应用程序中,是否可以在同一代码库中拥有两个不同的应用程序版本(一个用于iOS,一个用于Android)?
显然只有1个app.json如下:
{
"expo": {
"name": "MyApp",
"icon": "./assets/images/appstore-icon.png",
"description": "This is a sample",
"slug": "test",
"privacy": "unlisted",
"sdkVersion": "19.0.0",
"version": "1.0.10",
......... etc
}
}
有没有办法添加特定于平台的版本控制?
sdkVersion
是Expo的SDK版本,而不是您的应用程序。version
是您的应用程序版本,使用您喜欢的任何版本控制方案
如果您想为Android/iOS应用程序单独进行版本控制,请在app.json中设置,如:
{
"expo": {
"name": "Your App Name",
"icon": "./path/to/your/app-icon.png",
"slug": "your-app-slug",
"version": "1.2.0",
"sdkVersion": "21.0.0",
"ios": {
"bundleIdentifier": "com.yourcompany.yourappname",
"buildNumber": "3.2.1"
},
"android": {
"package": "com.yourcompany.yourappname",
"versionCode": "1.2.3"
}
}
}
为了跟踪版本控制,您可以更新二进制文件的versionCode和buildNumber。最好浏览一下app.json文档,了解可以更改的所有属性,例如图标、深度链接url方案、手机/平板电脑支持等等。
请参阅:https://docs.expo.io/versions/latest/guides/building-standalone-apps.html#7-更新你的应用
不幸的是,没有直接的方法来满足您的要求。
使用平台
您可以使用Platform react原生API为每个应用程序定义自定义代码,这些文档可以在RN文档中找到。使用这个API,您可以检查当前平台并为每个平台定义代码。
import { Platform, StyleSheet } from 'react-native';
const styles = StyleSheet.create({ height: (Platform.OS === 'ios') ? 200 : 100, });
或者你也可以使用平台为每个平台定义一些代码。选择
import { Platform, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
...Platform.select({
ios: {
backgroundColor: 'red',
},
android: {
backgroundColor: 'blue',
},
}),
},
使用特定的文件扩展名
您可以使用filename.ios.js或filename.android.js命名每个js文件,它们将在每个平台中自动调用。
使用环境
除了平台之外,在很多情况下,我喜欢定义一个Environment模块,它允许我根据所选择的环境交换一些值。例如:
- environment
/environment.js
/state.js
在environment.js中,我保存可用的状态键和当前选择的环境:
environment.js
export const environments = {
pre: "PRE_ENV",
prod: "PROD_ENV",
};
export const currentEnvironment = environments.pre;
然后在state.js中,我喜欢存储一些助手来检查我所处的环境:
state.js
import { currentEnvironment, environments } from "./environment";
export const isProductionEnvironment = () => {
return environments.prod === currentEnvironment;
};
export const isPreEnvironment = () => {
return environments.pre === currentEnvironment;
};
现在,您可以在新文件中制作一些与环境相关的代码,如:
问候.js
import { environments, currentEnvironment } from "./environment";
export const selectGreeting = () => {
switch(currentEnvironment) {
case environments.pre:
return "Welcome to the pre environment";
case environments.prod:
return "Welcome to the prod environment";
default:
return "Unsupported Environment";
}
};
要管理你的app.js,没有漂亮的解决方案,你可以将一些默认的app.jss存储到某个环境中,然后复制粘贴,或者你可以使用:https://github.com/oliverbenns/expo-deploy
它是一个用bash编写的小库,可以帮助您部署到多个slug。
希望它能有所帮助!