0

是否可以在使用 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
  }
}

有没有办法添加特定于平台的版本控制?

4

2 回答 2

4

sdkVersion是世博会的 SDK 版本而不是您的应用程序。version是您的应用程序版本,使用您喜欢的任何版本控制方案

如果您想在app.json中为 Android/iOS 应用程序集单独进行版本控制,例如:

{
   "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"
    }
  }
}

要跟踪版本控制,您可以更新二进制文件的versionCodebuildNumber浏览app.json 文档以了解您可以更改的所有属性是个好主意,例如图标、深层链接 url 方案、手机/平板电脑支持等等。

请参阅:https ://docs.expo.io/versions/latest/guides/building-standalone-apps.html#7-update-your-app

于 2017-11-14T14:30:50.443 回答
2

不幸的是,没有直接的方法可以按照您的要求进行操作。

使用平台

您可以使用 Platform react native API 为每个应用程序定义自定义代码,这些文档可以在 RN 文档中找到。使用此 API,您可以检查当前平台并为每个平台定义代码。

import { Platform, StyleSheet } from 'react-native';

const styles = StyleSheet.create({  height: (Platform.OS === 'ios') ? 200 : 100, });

或者您也可以使用 platform.select 为每个平台定义一些代码

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.js
   /state.js

在 environment.js 中,我保存了可用的状态键和当前选择的环境:

环境.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.js 存储到某个环境并复制粘贴它,或者您可以使用: https ://github.com/oliverbenns/expo-deploy

这是一个用 bash 编写的小库,可帮助您部署到多个 slug。

希望能帮助到你!

于 2017-11-14T14:43:14.587 回答