expo(React Native)의 사적인 토론(또는 OTA와 어떻게 교제하는지)

이 기사는 2020년 08월 27일 노트가 투고한 기사를 이식한 것이다
expo를 사용하기 시작하면서 React Native에서 여러 번 좌절한 자신에게는 기본적으로 최고, 최고, 최고였지만 어쨌든 release Channel과 발매 관리 주변만 어려웠기 때문에 어떻게 관리하는 것이 좋을지 고민했다.

딱한 사정


expo에서 정식으로 구축할 때 구축과 같은 시간에publish가publish됩니다.expo는 OTA의 구조가 있기 때문에 업데이트가 필요합니다.
같은 release Channel이 되면 상점에서 심사용 빌딩을 만들면 그때 OTA가 다 써버릴 수도 있다는 얘기다.
설정에 따라 OTA도 disable이 될 수 있습니다. 하지만 비상시에는 편리하고 완전히 꺼지는 것도 아쉽다.
휴대전화 앱에 익숙하지 않기 때문에 더듬고 있지만 먼저 자신의 방식대로 "이런 오디션 보면 되지 않을까요?"나는 한번 고려해 보았다.더 좋은 거 있으면 알려주세요.

expo 바호닌겔입니다.


사용자를 위한 응용 프로그램이라면 프로그램 라이브러리와는 달리 Semantic burning에 그렇게 엄격하게 접근하는 의미는 없지만 익숙하지 않은 규칙이기 때문에 일부를 바탕으로 맞춤형 제작을 진행한다.
x.y.z와 같은 형식과 비교하면 다음과 같다.
  • x(major)-파괴적인 변경.API 등 호환되지 않는 경우 등.
  • y(minor) - 스토어에서 릴리즈할 때마다 업데이트됩니다.날짜 등도 가능한가요?
  • z(patch) - 상점 발행의 구축 업데이트를 동반하지 않습니다.재구성 또는 OTA 업데이트 검토
  • major 버전은 의미 버전과 거의 같아서 어떤 파괴적인 변화에 따라 사용된다.라이브러리가 아니기 때문에 서버의 API 버전이 호환되지 않는 경우 등이 많지 않습니다.
    minor 버전과 의미 버전은 큰 변화가 있습니다.어쨌든 휴대전화 앱은 상점에서 발매되는 큰 주기가 있기 때문에 이걸 빼고 싶지 않아요.그래서 마이너 버전을 활용해 보기로 했다.매주 발매되면 날짜로 정할 수도 있어요.
    OTA에서 사용할 수 있도록 patch 버전을 엽니다.재검토와 심사 전 구축 때도 업데이트되겠죠.
    이걸 배우면 아마 메이저가 가장 많이 이용되고 1.2234.2 등으로 변했을 거예요.마노를 날짜로 잡으면 1.200901.1 등일 거예요.

    Release Channel 활용


    다음은 이 규칙에 따라 OTA가 패치 업데이트에 적응하는publish의release-channel만 활용하도록 설정합니다.
    본인도 괜찮다고 생각했다semver-extract라이브러리의 소스도 작고 딱 맞아서 이걸로 해보자.다음 상황에 따라 버전을 검사하다
    이 패키지.json에서 훈련하다
    $ semver-extract --pjson --minor -x
    1.2.x
    
    이 Release Channel의 규칙에 따라 진행하면producton-v1.2등에서 업데이트되기 때문에 1.3→1.3.0 등 점포를 뛰어넘어 발행하려면 OTA가 업데이트하지 않는다.한편, 1.2.3에 문제가 있으면 1.2.4로 이 경우 OTA를 활용할 수도 있다.

    경품: 버전 관련 tips


    경품1: Production과 Stage는 어떻게 하나요?


    나는 이것을 슬러그와 bundle Identifier로 나누는 것이 비교적 쉽다고 생각한다.
    json에 Staging용 오버라이드 부분, app를 미리 기록합니다.config.사용자 정의 js로 덮어쓰기
    
    "scripts": {
    	"release-channel": "echo v$(semver-extract --pjson --minor -x)",
    	"build:ios": "expo build:ios --release-channel=production-$(npm run release-channel --silent)"
    }
    
    // app-staging.json
    {
      "name": "My App [Staging]",
      "displayName": "My App [Staging]",
      "expo": {
        "name": "My App [Staging]",
        "description": "My App [Staging]",
        "slug": "staging-my-app",
        "ios": {
          "bundleIdentifier": "my.app.staging",
        }
      }
    }
    
    app.config.js에서releaseChannel을 얻었으면 좋겠지만 아쉽게도 그럴 수 없을 것 같습니다.json에서 BUILDENV 드릴게요.
    // app.config.js
    import merge from "deepmerge"
    import stagingConfig from "./app-staging.json"
    
    const overrideEnv = (baseConfig) => {
      if (process.env.BUILD_ENV === "staging") {
        return merge.all([baseConfig, stagingConfig])
      }
      return baseConfig
    }
    export default ({ config }) => {
      const conf = overrideEnv(config)
      return conf
    }
    

    경품2:react-native-version을postversion에 설치하면 편리


    평소에 하면 앱.json의buildNumber와versionCode를 수동으로 업데이트해야 하는데 react-native-version를 사용하면 거의 의식하지 못했으면 좋겠어요.
    https://github.com/stovmascript/react-native-version
    // package.json
    "scripts": {
      "build:ios:staging": "BUILD_ENV=staging expo build:ios --release-channel=staging-$(npm run release-channel --silent)"
    }
    
    이렇게 하면yarnversion과npmversion이 업데이트됩니다.편리

    총결산


    기본적으로 expo를 전제로 고려한 버전이지만 OTA가 있다면 그나마 쓸 수 있을 것 같다.
    expo가 가장 높습니다.

    좋은 웹페이지 즐겨찾기