React Native Client SDK
Important
Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. 완전히 사용 중지될 때까지 Visual Studio App Center를 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.
이 플러그 인은 CodePush 서비스에 대한 클라이언트 쪽 통합을 제공하므로 React Native 앱에 동적 업데이트 환경을 쉽게 추가할 수 있습니다.
작동 방식
React Native 앱은 JavaScript 파일 및 연결된 이미지로 구성되며 패키지러가 함께 번들로 묶고 플랫폼별 이진 파일(.ipa
또는 .apk
파일)의 일부로 배포됩니다. 앱이 릴리스되면 JavaScript 코드(예: 버그 수정, 새 기능 추가) 또는 이미지 자산을 업데이트하려면 게시하려는 저장소에 대한 검토 시간을 포함하여 전체 이진 파일을 다시 컴파일하고 재배포해야 합니다.
CodePush 플러그 인은 JavaScript 및 이미지를 CodePush 서버에 릴리스한 업데이트와 동기화된 상태로 유지하여 최종 사용자 앞에서 제품을 즉시 개선하는 데 도움이 됩니다. 이렇게 하면 앱이 오프라인 모바일 환경의 이점과 사용 가능한 즉시 테스트용으로 업데이트를 로드하는 "웹과 유사한" 민첩성을 얻을 수 있습니다.
최종 사용자에게 항상 앱의 작동 버전이 있는지 확인하기 위해 CodePush 플러그 인은 이전 업데이트의 복사본을 유지 관리하므로 실수로 크래시가 포함된 업데이트를 푸시하는 경우 자동으로 롤백할 수 있습니다. 이렇게 하면 새로 발견된 릴리스 민첩성으로 인해 서버에서 롤백하기 전에 사용자가 차단되지 않는다는 것을 안심할 수 있습니다.
참고 항목
네이티브 코드를 터치하는 제품 변경(예: AppDelegate.m/MainActivity.java 파일 수정, 새 플러그 인 추가)은 CodePush를 통해 배포할 수 없으므로 적절한 저장소를 통해 업데이트해야 합니다.
지원되는 React 네이티브 플랫폼
- iOS(7 이상)
- Android(5.0 이상)
- Windows(UWP)
이전 버전의 React Native와 플러그 인의 호환성을 유지하기 위해 최선을 다하지만 플랫폼의 특성과 릴리스 간의 호환성이 손상되는 변경이 있기 때문에 사용 중인 React Native의 정확한 버전을 지원하기 위해 특정 버전의 CodePush 플러그 인을 사용해야 할 수 있습니다. 다음 표에서는 각 React Native 버전을 공식적으로 지원하는 CodePush 플러그 인 버전을 간략하게 설명합니다.
React 네이티브 버전 | CodePush 버전 지원 |
---|---|
<0.14 | 지원되지 않음 |
v0.14 | v1.3 (Android 지원 도입) |
v0.15-v0.18 | v1.4-v1.6 (iOS 자산 지원 도입) |
v0.19-v0.28 | v1.7-v1.17 (Android 자산 지원 도입) |
v0.29-v0.30 | v1.13-v1.17 (RN 리팩터링된 네이티브 호스팅 코드) |
v0.31-v0.33 | v1.14.6-v1.17 (RN 리팩터링된 네이티브 호스팅 코드) |
v0.34-v0.35 | v1.15-v1.17 (RN 리팩터링된 네이티브 호스팅 코드) |
v0.36-v0.39 | v1.16-v1.17 (RN 리팩터링된 다시 시작 처리기) |
v0.40-v0.42 | v1.17 (RN 리팩터링된 iOS 헤더 파일) |
v0.43-v0.44 | v2.0 이상 (RN 리팩터링된 uimanager 종속성) |
v0.45 | v3.0 이상 (RN 리팩터링된 인스턴스 관리자 코드) |
v0.46 | v4.0 이상 (RN 리팩터링된 js 번들 로더 코드) |
v0.46-v0.53 | v5.1 이상 (RN에서 사용되지 않는 JS 모듈 등록 제거) |
v0.54-v0.55 | v5.3 이상 (Android Gradle 플러그 인 3.x 통합) |
v0.56-v0.58 | v5.4 이상 (Android 도구용 RN 업그레이드 버전) |
v0.59 | v5.6 이상 (RN 리팩터링된 js 번들 로더 코드) |
v0.60-v0.61 | v6.0 이상 (자동 연결로 마이그레이션된 RN) |
새 React 네이티브 릴리스에 응답하기 위해 열심히 노력하지만 가끔 중단되기도 합니다. 사용자가 공식 지원이 무엇인지 확인할 수 있도록 각 React 네이티브 릴리스로 이 차트를 업데이트합니다.
지원되는 구성 요소
React Native 자산 시스템(예: 구문 사용)을 사용하는 require("./foo.png")
경우 다음 목록은 CodePush를 통해 참조된 이미지 및 비디오를 업데이트하도록 지원하는 핵심 구성 요소(및 props) 집합을 나타냅니다.
구성 요소 | Prop(들) |
---|---|
Image |
source |
MapView.Marker (react-native-maps >=O.3.2 필요) |
image |
ProgressViewIOS |
progressImage , trackImage |
TabBarIOS.Item |
icon , selectedIcon |
ToolbarAndroid (React Native 0.21.0 이상) |
actions[].icon , , logo overflowIcon |
Video |
source |
다음 목록은 정적 이미지 및 비디오에 대한 종속성(예: 구문 사용 { uri: "foo" }
)으로 인해 현재 CodePush를 통해 업데이트되는 자산을 지원하지 않는 구성 요소(및 props) 집합을 나타냅니다.
구성 요소 | Prop(들) |
---|---|
SliderIOS |
maximumTrackImage , minimumTrackImage , thumbImage trackImage |
Video |
source |
참조 자산을 지원하는 새 핵심 구성 요소가 릴리스되면 이 목록을 업데이트하여 사용자가 CodePush를 사용하여 업데이트할 것으로 예상되는 내용을 정확하게 알 수 있도록 합니다.
참고 항목
CodePush는 소스 소품에서 사용하는 require
경우에만 Video 구성 요소에서 작동합니다. 예를 들어:
<Video source={require("./foo.mp4")} />
Microsoft Store 지침 준수
Google Play 및 내부적으로 분산된 앱(예: 엔터프라이즈, 패브릭, App Center)에는 CodePush를 사용하여 업데이트를 게시하는 방법에 대한 제한이 없지만 iOS 앱 스토어 및 해당 지침에는 애플리케이션 내에서 솔루션을 통합하기 전에 알아야 할 보다 정확한 규칙이 있습니다.
애플의 개발자 프로그램 사용권 계약, 단락 에 따라 3.3.2, 완전히 JavaScript 및 자산의 무선 업데이트를 허용 - 그리고 최신 버전에서 (20210607) 여기에 다운로드 할 수있는이 판결은 훨씬 더 광범위하다 :
해석된 코드는 애플리케이션에 다운로드할 수 있지만, (a) 앱 스토어에 제출된 애플리케이션의 의도된 목적과 일치하지 않는 기능 또는 기능을 제공하여 애플리케이션의 기본 목적을 변경하지 않는 한(b) 다른 코드 또는 애플리케이션에 대한 저장소 또는 상점을 만들지 않습니다. 및 (c)는 OS의 서명, 샌드박스 또는 기타 보안 기능을 무시하지 않습니다.
CodePush를 사용하면 푸시하는 업데이트가 원래 App Store 승인 의도에서 제품을 크게 벗어나지 않는 한 이러한 규칙을 완전히 준수할 수 있습니다.
Apple의 지침을 계속 준수하려면 App Store 검토 지침에 다음과 같이 작성되었기 때문에 App Store 분산 앱에서 호출sync
할 때 옵션을 사용하도록 설정 updateDialog
하지 않는 것이 좋습니다.
앱은 사용자가 앱의 기능, 콘텐츠 또는 사용에 액세스하기 위해 앱을 평가하거나, 앱을 검토하고, 다른 앱 또는 기타 유사한 작업을 다운로드하도록 강요해서는 안됩니다.
사용자가 새 버전을 다운로드하도록 강제하지는 않으므로 반드시 그런 것은 updateDialog
아니지만 적어도 표시하기로 결정한 경우 해당 판결을 알고 있어야 합니다.
앱/시작 예제
React Native 커뮤니티는 시작하는 개발자를 위한 예제로 사용할 수 있는 멋진 오픈 소스 앱을 정중하게 만들었습니다. 다음 목록은 CodePush를 사용하는 OSS React 네이티브 앱이며 다른 사용자가 서비스를 사용하는 방법을 확인하는 데 사용할 수 있습니다.
- F8 앱 - F8 2016의 공식 컨퍼런스 앱입니다.
- 제품 사냥에 대한 고양이 - 제품 사냥 을위한 안드로이드 클라이언트.
- GeoEncoding - 수많은 React Native 구성 요소 및 모듈을 사용하는 방법을 보여 주는 Lynx IT Digital의 앱입니다.
- 수학 사실 - 더 쉽게 수학 사실을 암기하는 데 도움이 칸 아카데미에 의해 응용 프로그램.
또한 React Native + CodePush를 시작하려는 경우 멋진 시작 키트를 찾고 있다면 다음을 확인해야 합니다.
-
참고 항목
CodePush를 사용하여 React Native 앱을 개발한 경우 오픈 소스인 경우 알려주세요. 이 목록에 추가하고 싶습니다.
연속 통합/배달
CodePush CLI를 사용하여 업데이트를 "수동으로" 릴리스하는 것 외에도 앱에 업데이트를 지속적으로 제공하기 위한 반복 가능하고 지속 가능한 솔루션을 만드는 것이 중요하다고 생각합니다. 이렇게 하면 사용자 또는 팀이 민첩한 배포의 리듬을 만들고 유지할 수 있을 만큼 간단합니다. CodePush 기반 CD 파이프라인을 설정하는 데 도움이 되도록 다양한 CI 서버와 다음 통합을 참조하세요.
- Azure DevOps - Azure DevOps(이전의 VSTS)에도 App Center 및 Google Play 스토어에 게시할 수 있는 확장이 있으므로 일반적으로 매우 훌륭한 모바일 CD 솔루션을 제공합니다.
- Travis CI
TypeScript 사용량
이 모듈은 파일을 NPM 패키지의 일부로 제공합니다 *.d.ts
. 이를 통해 파일을 사용할 수 import
있으며, TypeScript를 사용하는지 여부를 확인하는 컴파일 시간 형식 검사뿐만 아니라 지원 편집기(예: Visual Studio Code)에서 intellisense를 받습니다. 대부분의 경우 이 동작은 기본적으로 작동하지만 파일에서 컴파일러 옵션 또는 module
컴파일러 옵션 tsconfig.json
의 값 target
으로 지정 es6
한 경우 옵션을 설정 moduleResolution
해야 node
합니다. 이렇게 하면 TypeScript 컴파일러가 가져온 모듈의 형식 정의 내에서 node_modules
확인할 수 있습니다. 그렇지 않으면 모듈error TS2307: Cannot find module 'react-native-code-push'
을 가져오 react-native-code-push
려고 할 때 다음과 같은 오류가 발생합니다.