Skip to main content

19 posts tagged with "release"

View All Tags

Announcing React Native 0.66

· 8 min read
Luna Wei
Luna Wei
Software Engineer at Meta

오늘 우리는 안드로이드 12와 iOS 15 지원을 포함한 React Native v0.66을 출시한다. 이번 버전에는 다양한 수정 사항과 일반 업데이트가 포함되어 있다.

주요 내용

Announcing React Native 0.65

· 5 min read
Luna Wei
Luna Wei
Software Engineer at Meta

오늘 우리는 React Native 버전 0.65를 출시했다. 이번 버전에는 새로운 Hermes 버전, 접근성 개선, 패키지 업그레이드 등이 포함되어 있다.

Hermes 0.8의 새로운 기능

페이스북의 오픈소스 JavaScript VM인 Hermes가 React Native에 최적화된 버전 0.8.1로 업그레이드되었다. 이번 릴리스에서 주목할 만한 기능은 다음과 같다:

전체 Hermes 변경 로그는 여기서 확인할 수 있다.

아직 Hermes를 사용하지 않았다면 여기서 안내하는 단계를 따라 앱에 Hermes를 적용해 새로운 기능과 성능 향상을 경험해 보자!

접근성 개선 및 추가 기능

지난해 페이스북은 GAAD 서약을 통해 React Native 내 접근성을 개선하기로 약속했다. 0.65 버전에서는 이 서약의 결과물과 기타 접근성 관련 성과를 공유한다! 주요 변경 사항은 다음과 같다:

  • iOS에서 고대비 라이트 및 다크 값을 지정할 수 있도록 허용. 자세한 내용은 문서를 참고한다.
  • Android에 getRecommendedTimeoutMillis API 추가. 이는 Android 접근성 옵션에서 설정한 사용자의 기본 타임아웃 값을 노출하며, 컨트롤을 검토하거나 접근하는 데 추가 시간이 필요한 사용자를 위한 기능이다.
  • TalkBack/VoiceOver가 disabledunselected와 같은 UI 상태를 올바르게 알리도록 일반적인 수정 작업 진행.

진행 중인 접근성 이슈를 확인하거나 기여할 수 있다!

주요 의존성 버전 업데이트 및 주의사항

  • react-native-codegen 버전 0.0.7package.jsondevDependency로 추가해야 한다.
  • JCenter가 종료되어 이제 읽기 전용 상태다. JCenter를 maven 저장소에서 제거하고, MavenCentral과 Jitpack을 사용하도록 의존성을 업데이트했다.
  • OkHttp를 v3에서 v4.9.1로 업그레이드했다. 변경사항에 대한 자세한 내용은 Upgrading to OkHttp 4를 참고한다.
  • Xcode 12.5를 지원하기 위해 Flipper를 0.93으로 업그레이드했다. 변경 내역은 Flipper changelog here에서 확인할 수 있다.
  • Android Gradle Plugin 7 지원이 추가되었다.
  • Apple Silicon에서는 링커 문제를 해결해야 한다. 자세한 내용은 @mikehardy’s note를 참고한다.

감사합니다!

이번 릴리스에는 61명의 기여자1100개 이상의 커밋을 작성했다. 이번 릴리스를 지원하고 기여한 모든 분께 감사드린다! 전체 변경 내역은 여기에서 확인할 수 있다.

React Native 0.64 발표: iOS에서 Hermes 지원 추가

· 6 min read
Mike Grabowski
Mike Grabowski
CTO and Co-Founder at Callstack

오늘 우리는 iOS에서 Hermes를 지원하는 React Native 0.64를 출시한다.

iOS에서 Hermes 선택적 사용

Hermes는 React Native 실행을 최적화한 오픈소스 자바스크립트 엔진이다. 메모리 사용량을 줄이고, 다운로드 크기를 줄이며, 앱이 사용 가능해지는 시간(Time to Interactive, TTI)을 단축함으로써 성능을 향상시킨다.

이번 릴리즈에서 iOS에서도 Hermes를 사용해 빌드할 수 있게 되었다는 소식을 전한다. iOS에서 Hermes를 활성화하려면 Podfile에서 hermes_enabledtrue로 설정하고 pod install을 실행하면 된다.

use_react_native!(
:path => config[:reactNativePath],
# iOS에서 Hermes를 활성화하려면 `false`를 `true`로 변경하고 pods를 설치한다
:hermes_enabled => true
)

iOS에서의 Hermes 지원은 아직 초기 단계임을 유의해야 한다. 추가 벤치마킹을 진행 중이므로 선택적으로 사용할 수 있도록 했다. 여러분의 애플리케이션에서 직접 시도해보고 결과를 알려주길 바란다!

기본값으로 활성화된 인라인 요구(Inline Requires)

인라인 요구는 Metro의 설정 옵션 중 하나로, JavaScript 모듈의 실행을 앱 시작 시점이 아니라 실제 사용 시점으로 지연시켜 시작 시간을 단축한다.

이 기능은 몇 년 전부터 선택적 설정 옵션으로 존재해왔으며, 문서의 성능 섹션에서 추천해왔다. 이제는 새로운 애플리케이션에서 기본값으로 활성화되어, 추가 설정 없이도 빠른 React Native 애플리케이션을 만들 수 있도록 돕는다.

인라인 요구는 Babel 변환 기능으로, 모듈 임포트를 인라인 형태로 변환한다. 예를 들어, 인라인 요구는 파일 상단에 위치한 모듈 임포트를 실제 사용되는 위치로 이동시킨다.

변경 전:

import {MyFunction} from 'my-module';

const MyComponent = props => {
const result = MyFunction();

return <Text>{result}</Text>;
};

변경 후:

const MyComponent = props => {
const result = require('my-module').MyFunction();

return <Text>{result}</Text>;
};

인라인 요구에 대한 더 자세한 정보는 성능 문서에서 확인할 수 있다.

Chrome에서 Hermes 트레이스 확인하기

지난 한 해 동안 Facebook은 Major League Hacking fellowship을 후원하며 React Native에 기여할 수 있는 기회를 제공했다. Jessie NguyenSaphal Patro는 Chrome DevTools의 Performance 탭을 사용해 Hermes를 사용 중인 애플리케이션의 실행 과정을 시각화할 수 있는 기능을 추가했다.

자세한 내용은 새로운 문서 페이지를 참고한다.

프록시 지원이 추가된 Hermes

Hermes에 프록시 지원 기능을 추가해 react-native-firebase와 mobx 같은 인기 커뮤니티 프로젝트와의 호환성을 확보했다. 기존에 이 패키지들을 사용 중이라면 이제 프로젝트에서 Hermes로 마이그레이션할 수 있다.

다가오는 릴리스에서 Hermes를 Android의 기본 자바스크립트 엔진으로 지정할 예정이므로, Hermes 사용 시 남아 있는 문제점들을 해결하기 위해 노력 중이다. 여러분의 앱이 Hermes를 도입하는 데 걸림돌이 되는 문제가 있다면 Hermes GitHub 저장소에 이슈를 등록해 주세요.

React 17

React 17은 개발자에게 새로운 기능을 추가하거나 주요 변경 사항을 포함하지 않는다. React Native 애플리케이션의 경우, 주요 변경 사항은 새로운 JSX 변환으로, 이제 파일에서 JSX를 사용하기 위해 React를 임포트할 필요가 없어졌다.

React 17에 대한 더 많은 정보는 React 블로그에서 확인할 수 있다.

주요 의존성 버전 변경 사항

  • Android API 레벨 16-20 지원 중단. Facebook 앱은 사용량이 충분히 낮은 Android 버전에 대한 지원을 지속적으로 중단한다. Facebook 앱이 더 이상 이 버전들을 지원하지 않고, React Native의 주요 테스트 환경이기 때문에 React Native도 지원을 중단한다.
  • Xcode 12와 CocoaPods 1.10이 필수로 요구된다.
  • 최소 Node 지원 버전이 10에서 Node 12로 상향 조정되었다.
  • Flipper 버전이 0.75.1로 업데이트되었다.

감사의 말

0.64 버전을 만드는 데 도움을 준 수백 명의 기여자들에게 감사드립니다! 0.64 변경 로그에서 이번 릴리스에 포함된 모든 변경 사항을 확인할 수 있습니다.

React Native 0.63 출시: LogBox 소개

· 14 min read
Mike Grabowski
Mike Grabowski
CTO and Co-Founder at Callstack

오늘 우리는 LogBox가 기본적으로 활성화된 상태로 제공되는 React Native 0.63을 출시한다.

LogBox

React Native 커뮤니티에서 자주 제기되는 피드백은 에러와 경고 메시지를 디버깅하기 어렵다는 점이었다. 이를 해결하기 위해 React Native의 전체 에러, 경고, 로그 시스템을 처음부터 다시 설계했다.

LogBox 스크린샷

LogBox는 React Native의 redbox, yellowbox, 로깅 경험을 완전히 재설계한 것이다. 0.62 버전에서는 LogBox를 옵트인 방식으로 도입했지만, 이번 릴리스에서는 모든 React Native에서 기본 경험으로 제공한다.

LogBox는 에러와 경고 메시지가 너무 장황하거나 형식이 잘못되었거나, 실행 가능한 조치가 없었던 문제를 해결하기 위해 세 가지 주요 목표에 집중했다:

  • 간결성: 로그는 문제를 디버깅하는 데 필요한 최소한의 정보만 제공해야 한다.
  • 형식화: 로그는 필요한 정보를 빠르게 찾을 수 있도록 잘 정리된 형식이어야 한다.
  • 실행 가능성: 로그는 문제를 해결하고 다음 단계로 넘어갈 수 있도록 실행 가능해야 한다.

이러한 목표를 달성하기 위해 LogBox는 다음과 같은 기능을 포함한다:

  • 로그 알림: 경고 알림을 재설계하고 에러를 지원하도록 개선했다. 이제 모든 console.warnconsole.log 메시지는 앱을 가리지 않고 알림으로 표시된다.
  • 코드 프레임: 모든 에러와 경고 메시지에는 앱 내에서 로그의 소스 코드를 보여주는 코드 프레임이 포함된다. 이를 통해 문제의 원인을 빠르게 파악할 수 있다.
  • 컴포넌트 스택: 모든 컴포넌트 스택은 이제 에러 메시지에서 분리되어 별도의 섹션에 표시되며, 상위 세 개의 프레임이 보인다. 이를 통해 로그 메시지를 어지럽히지 않고 스택 프레임 정보를 일관된 공간에서 확인할 수 있다.
  • 스택 프레임 접기: 기본적으로 앱 코드와 관련 없는 호출 스택 프레임을 접어서 React Native 내부 코드를 뒤지는 대신 앱 내 문제를 빠르게 확인할 수 있다.
  • 구문 에러 형식화: 구문 에러의 형식을 개선하고 구문 강조가 적용된 코드 프레임을 추가했다. 이를 통해 에러의 소스를 확인하고 수정한 후 React Native의 방해 없이 코딩을 계속할 수 있다.

이 모든 기능은 에러와 경고 간 일관된 디자인으로 통합되었으며, 모든 로그를 하나의 편리한 UI에서 페이징할 수 있도록 개선되었다.

이번 변경으로 YellowBox 대신 LogBox API를 사용한다:

  • LogBox.ignoreLogs(): 이 함수는 YellowBox.ignoreLogs([])를 대체하며, 주어진 문자열이나 정규식과 일치하는 로그를 무시한다.
  • LogBox.ignoreAllLogs(): 이 함수는 console.disableYellowBox를 대체하며, 에러나 경고 알림을 끌 수 있다. 단, 이는 알림만 비활성화하며, 처리되지 않은 에러는 여전히 전체 화면 LogBox를 열 것이다.

0.63 버전에서는 이러한 사용 중단된 모듈이나 메서드를 사용할 때 경고를 표시한다. 0.64 버전에서 이 API가 제거되기 전에 호출 부분을 업데이트해야 한다.

LogBox와 React Native 디버깅에 대한 자세한 내용은 문서를 참고한다.

Pressable

React Native는 플랫폼의 사용자 기대치를 충족하는 애플리케이션을 만들 수 있도록 설계되었다. 이는 React Native로 개발되었다는 사실을 드러내는 작은 단서를 피하는 것을 포함한다. 이러한 단서의 주요 원인 중 하나는 Touchable 컴포넌트들이다: Button, TouchableWithoutFeedback, TouchableHighlight, TouchableOpacity, TouchableNativeFeedback, 그리고 TouchableBounce. 이 컴포넌트들은 사용자 상호작용에 시각적 피드백을 제공해 애플리케이션을 인터랙티브하게 만든다. 하지만 플랫폼의 상호작용과 일치하지 않는 내장 스타일과 효과를 포함하고 있어, 사용자가 React Native로 작성된 경험을 알아챌 수 있다.

또한 React Native가 성장하고 고품질 애플리케이션에 대한 기준이 높아짐에 따라, 이 컴포넌트들은 그에 맞춰 발전하지 못했다. React Native는 이제 Web, Desktop, TV와 같은 플랫폼을 지원하지만, 추가적인 입력 방식에 대한 지원은 부족했다. React Native는 모든 플랫폼에서 고품질 상호작용 경험을 지원해야 한다.

이러한 문제를 해결하기 위해, 새로운 코어 컴포넌트인 Pressable을 출시했다. 이 컴포넌트는 다양한 유형의 상호작용을 감지하는 데 사용할 수 있다. API는 상위 컴포넌트에서 수동으로 상태를 유지하지 않고도 상호작용의 현재 상태에 직접 접근할 수 있도록 설계되었다. 또한 플랫폼이 호버, 블러, 포커스 등의 기능을 확장할 수 있도록 설계되었다. 대부분의 사람들이 TouchableOpacity와 같은 기본 경험에 의존하기보다는 Pressable을 활용해 컴포넌트를 구축하고 공유할 것으로 기대한다.

import {Pressable, Text} from 'react-native';

<Pressable
onPress={() => {
console.log('pressed');
}}
style={({pressed}) => ({
backgroundColor: pressed ? 'lightskyblue' : 'white',
})}>
<Text style={styles.text}>Press Me!</Text>
</Pressable>;

Pressable 컴포넌트의 간단한 예제

더 자세한 내용은 공식 문서에서 확인할 수 있다.

네이티브 색상 (PlatformColor, DynamicColorIOS)

모든 네이티브 플랫폼은 시스템에서 정의한 색상 개념을 가지고 있다. 이 색상들은 라이트 모드나 다크 모드와 같은 시스템 테마 설정, 고대비 모드와 같은 접근성 설정, 그리고 포함된 뷰나 윈도우의 특성과 같은 앱 내부의 컨텍스트에 자동으로 반응한다.

Appearance API나 AccessibilityInfo를 통해 이러한 설정 중 일부를 감지하고 스타일을 조정할 수 있지만, 이러한 추상화는 개발 비용이 많이 들 뿐만 아니라 네이티브 색상의 외관을 근사치로만 흉내낸다. 이러한 불일치는 React Native 엘리먼트와 네이티브 엘리먼트가 공존하는 하이브리드 애플리케이션에서 특히 두드러진다.

React Native는 이제 이러한 시스템 색상을 바로 사용할 수 있는 기본 제공 솔루션을 제공한다. PlatformColor()는 React Native에서 다른 색상과 마찬가지로 사용할 수 있는 새로운 API다.

예를 들어, iOS에서는 시스템이 labelColor라는 색상을 제공한다. 이 색상을 React Native에서 PlatformColor를 사용해 다음과 같이 적용할 수 있다:

import {Text, PlatformColor} from 'react-native';

<Text style={{color: PlatformColor('labelColor')}}>
This is a label
</Text>;

Text 컴포넌트의 색상을 iOS에서 정의한 labelColor로 설정한다.

반면 Android는 colorButtonNormal과 같은 색상을 제공한다. 이 색상을 React Native에서 다음과 같이 사용할 수 있다:

import {View, Text, PlatformColor} from 'react-native';

<View
style={{
backgroundColor: PlatformColor('?attr/colorButtonNormal'),
}}>
<Text>This is colored like a button!</Text>
</View>;

View 컴포넌트의 배경색을 Android에서 정의한 colorButtonNormal로 설정한다.

PlatformColor에 대해 더 자세히 알고 싶다면 공식 문서를 참고하라. 또한 RNTester에 있는 실제 코드 예제도 확인할 수 있다.

DynamicColorIOS는 iOS 전용 API로, 라이트 모드와 다크 모드에서 사용할 색상을 정의할 수 있다. PlatformColor와 마찬가지로, 이 API는 색상을 사용할 수 있는 모든 곳에서 사용할 수 있다. DynamicColorIOS는 내부적으로 iOS의 colorWithDynamicProvider를 사용한다.

import {Text, DynamicColorIOS} from 'react-native';

const customDynamicTextColor = DynamicColorIOS({
dark: 'lightskyblue',
light: 'midnightblue',
});

<Text style={{color: customDynamicTextColor}}>
This color changes automatically based on the system theme!
</Text>;

시스템 테마에 따라 텍스트 색상을 자동으로 변경한다.

DynamicColorIOS에 대해 더 자세히 알고 싶다면 공식 문서를 참고하라.

iOS 9 및 Node.js 8 지원 중단

출시된 지 4년이 넘은 iOS 9에 대한 지원을 중단한다. 이 변경으로 특정 iOS 버전에서 기능을 지원하는지 확인하기 위해 네이티브 코드에 추가해야 하는 호환성 검사를 줄일 수 있다. 이는 개발 속도를 높이는 데 도움이 된다. iOS 9의 시장 점유율이 1%에 불과하므로, 고객에게 큰 부정적인 영향을 미치지 않을 것이다.

동시에 Node 8에 대한 지원도 중단한다. Node 8의 LTS 유지보수 주기는 2019년 12월에 종료됐다. 현재 LTS 버전은 Node 10이며, 이제 이 버전을 목표로 한다. React Native 애플리케이션 개발에 여전히 Node 8을 사용하고 있다면, 최신 보안 수정 사항과 업데이트를 받기 위해 업그레이드할 것을 권장한다.

기타 주요 개선 사항

  • <View /><Text /> 내에서 명시적 크기 없이 렌더링 지원: 이제 <Text /> 컴포넌트 안에 있는 <View />를 명시적으로 너비와 높이를 설정하지 않고도 렌더링할 수 있다. 이전 React Native 버전에서는 RedBox 오류가 발생했던 문제가 해결되었다.

  • iOS 런치 스크린을 xib에서 storyboard로 변경: 2020년 4월 30일부터 App Store에 제출되는 모든 앱은 Xcode 스토리보드를 사용해 앱의 런치 스크린을 제공해야 하며, 모든 iPhone 앱은 모든 iPhone 화면을 지원해야 한다. 이번 커밋은 React Native 기본 템플릿을 이 요구사항에 맞게 조정한다.

감사의 말

0.63 버전을 만드는 데 도움을 준 수백 명의 기여자들에게 감사드립니다!

LogBox 섹션을 작성한 Rick Hanlon과 이 글의 Pressable 부분을 작성한 Eli White에게 특별한 감사를 전합니다.

모든 업데이트를 확인하려면 0.63 변경 로그를 참고하세요.

Flipper가 포함된 React Native 0.62 발표

· 9 min read
Rick Hanlon
Facebook의 React Native 코어 개발자

오늘 우리는 Flipper를 기본적으로 지원하는 React Native 버전 0.62를 출시한다.

이번 릴리스는 전 세계적인 팬데믹 상황 속에서 이루어졌다. 이 버전을 오늘 출시하는 이유는 이번 릴리스를 가능하게 한 수백 명의 기여자들의 노력을 존중하고, 릴리스가 master 브랜치에서 너무 멀어지지 않도록 하기 위해서다. 이슈 해결에 기여할 수 있는 인력이 제한적이라는 점을 고려해, 필요하다면 업그레이드를 잠시 미루는 것도 고려해 보길 바란다.

기본 제공되는 Flipper

Flipper는 모바일 앱 디버깅을 위한 개발자 도구다. Android와 iOS 커뮤니티에서 널리 사용되며, 이번 릴리스에서는 새롭거나 기존의 React Native 앱에서 기본적으로 지원하도록 설정했다.

React Native용 Flipper 스크린샷

Flipper는 기본적으로 다음과 같은 기능을 제공한다:

  • Metro Actions: 툴바에서 바로 앱을 리로드하거나 개발자 메뉴를 실행한다.
  • Crash Reporter: Android와 iOS 기기에서 발생한 크래시 리포트를 확인한다.
  • React DevTools: 최신 버전의 React DevTools를 다른 도구들과 함께 사용한다.
  • Network Inspector: 기기 애플리케이션이 만든 모든 네트워크 요청을 확인한다.
  • Metro and Device Logs: Metro와 기기에서 발생한 모든 로그를 확인하고 검색하며 필터링한다.
  • Native Layout Inspector: React Native 렌더러가 출력한 네이티브 레이아웃을 확인하고 편집한다.
  • Database and Preference Inspectors: 기기의 데이터베이스와 환경설정을 확인하고 편집한다.

또한 Flipper는 확장 가능한 플랫폼이기 때문에, NPM에서 플러그인을 가져오는 마켓플레이스를 제공한다. 이를 통해 여러분의 워크플로우에 특화된 커스텀 플러그인을 게시하고 설치할 수 있다. 사용 가능한 플러그인은 여기에서 확인할 수 있다.

더 많은 정보는 Flipper 문서를 참고한다.

새로운 다크 모드 기능

사용자의 선호 색상 테마(라이트 또는 다크)와 같은 외관 설정에 접근할 수 있는 새로운 Appearance 모듈을 추가했다.

const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// 다크 색상 테마 사용
}

또한 사용자 설정의 상태 업데이트를 구독할 수 있는 훅도 추가했다:

import {Text, useColorScheme} from 'react-native';

const MyComponent = () => {
const colorScheme = useColorScheme();
return <Text>useColorScheme(): {colorScheme}</Text>;
};

더 자세한 내용은 AppearanceuseColorScheme 문서를 참고한다.

Apple TV를 react-native-tvos로 이전

Lean Core 프로젝트의 일환으로, 그리고 React Native Windows와 React Native macOS 같은 다른 플랫폼과 일관성을 유지하기 위해, 코어에서 Apple TV 전용 코드를 제거하기 시작했다.

앞으로 React Native의 Apple TV 지원은 react-native-community/react-native-tvos와 해당 react-native-tvos NPM 패키지에서 관리될 예정이다. 이 저장소는 Apple TV를 지원하기 위해 필요한 변경 사항만 포함한 메인 저장소의 완전한 포크 버전이다.

react-native-tvos의 릴리스는 React Native의 공개 릴리스를 기반으로 한다. 이번 react-native 0.62 릴리스에서는 Apple TV 프로젝트를 react-native-tvos 0.62로 업그레이드해야 한다.

업그레이드 지원 강화

0.61 버전이 출시되었을 때, 커뮤니티는 React Native의 새로운 버전으로 업그레이드하는 개발자를 지원하기 위해 업그레이드 헬퍼 도구를 선보였다. 이 도구는 현재 사용 중인 버전과 목표 버전 간의 변경 사항을 비교하여 특정 업그레이드에 필요한 수정 사항을 확인할 수 있게 해준다.

하지만 이 도구를 사용하더라도 업그레이드 과정에서 문제가 발생할 수 있다. 이를 해결하기 위해 Upgrade-Support를 공개하며 더 전문화된 업그레이드 지원을 제공한다. Upgrade Support는 GitHub 이슈 트래커로, 사용자가 프로젝트를 업그레이드하는 과정에서 발생한 문제를 제출하고 커뮤니티의 도움을 받을 수 있다.

우리는 업그레이드 경험을 지속적으로 개선하기 위해 노력하고 있으며, 이러한 도구들이 아직 다루지 못한 특수한 경우에도 사용자들이 필요한 지원을 받을 수 있기를 바란다.

기타 개선 사항

  • LogBox: 새로운 LogBox 오류 및 경고 경험을 선택적으로 추가했다. 이를 활성화하려면 index.js 파일에 require('react-native').unstable_enableLogBox()를 추가한다.
  • React DevTools v4: 최신 React DevTools로 업그레이드했다. 이는 성능 향상, 개선된 네비게이션 경험, React Hooks에 대한 완전한 지원을 제공한다.
  • 접근성 개선: accessibilityValue 추가, Touchables에 누락된 props 추가, onSlidingComplete 접근성 이벤트 추가, Switch 컴포넌트의 기본 역할을 "button"에서 "switch"로 변경하는 등 접근성 관련 개선 사항을 적용했다.

주요 변경 사항

  • PropTypes 제거: React Native 코어의 앱 크기 영향을 줄이고, 런타임이 아닌 컴파일 타임에 타입을 검사하는 정적 타입 시스템을 선호하기 위해 코어 컴포넌트에서 propTypes를 제거한다.
  • accessibilityStates 제거: 더 의미론적으로 풍부한 방식으로 컴포넌트의 상태 정보를 접근성 서비스에 전달할 수 있는 새로운 accessibilityState 프로퍼티를 도입하면서, 더 이상 사용되지 않는 accessibilityStates 프로퍼티를 제거했다.
  • TextInput 변경 사항: TextInput에서 드물게 사용되고, W3C 표준을 준수하지 않으며, Fabric에서 구현하기 어려운 onTextInput제거했다. 또한 문서화되지 않은 inputView 프로퍼티와 selectionState도 제거했다.

사용 중단 예정 기능

  • AccessibilityInfo.fetch는 이미 사용 중단 예정이었지만, 이번 릴리스에서 경고 메시지를 추가했다.
  • useNativeDriver 설정은 이제 필수로 지정했다. 이는 향후 기본값 전환을 지원하기 위함이다.
  • Animated 컴포넌트의 ref는 이제 내부 컴포넌트를 참조하며, getNode사용 중단 예정으로 지정했다.

감사의 말

0.62 버전을 가능하게 해준 수많은 기여자 여러분께 감사드립니다!

모든 업데이트 내용을 확인하려면 0.62 변경 로그를 참고하세요.

Announcing React Native 0.61 with Fast Refresh

· 6 min read
Dan Abramov
React Core at Facebook

React Native 0.61을 발표하게 되어 기쁘게 생각합니다. 이번 버전에는 Fast Refresh라는 새로운 리로딩 기능이 포함되어 있습니다.

빠른 새로고침(Fast Refresh)

리액트 네이티브 커뮤니티에 공통적인 문제점에 대해 물었을 때, 가장 많이 언급된 답변 중 하나는 "핫 리로딩" 기능이 제대로 작동하지 않는다는 것이었다. 이 기능은 함수형 컴포넌트에서 신뢰할 수 없었고, 화면 업데이트가 자주 실패했으며, 오타나 실수에 취약했다. 대부분의 사람들이 이 기능을 비활성화했다는 피드백을 받았다.

리액트 네이티브 0.61에서 기존의 "라이브 리로딩"(저장 시 재로딩)과 "핫 리로딩" 기능을 통합해 "빠른 새로고침(Fast Refresh)"라는 새로운 기능으로 재설계했다. 빠른 새로고침은 다음과 같은 원칙으로 처음부터 구현되었다:

  • 빠른 새로고침은 함수형 컴포넌트와 훅을 포함한 모던 리액트를 완벽히 지원한다.
  • 빠른 새로고침은 오타나 실수 후에도 원활히 복구하며, 필요한 경우 전체 재로딩으로 대체한다.
  • 빠른 새로고침은 코드 변환을 과도하게 수행하지 않아 기본적으로 활성화해도 안정적이다.

빠른 새로고침이 작동하는 모습을 보려면 다음 비디오를 확인해 보자:

한번 사용해 보고 의견을 남겨 주세요! 원한다면 개발자 메뉴(iOS에서는 Cmd+D, 안드로이드에서는 Cmd+M 또는 Ctrl+M)에서 비활성화할 수 있다. 활성화와 비활성화는 즉시 적용되므로 언제든지 가능하다.

빠른 새로고침 사용 시 유용한 팁 몇 가지:

  • 빠른 새로고침은 기본적으로 함수형 컴포넌트(와 훅!)의 로컬 상태를 유지한다.
  • 매번 수정 시 리액트 상태를 초기화해야 한다면, 해당 컴포넌트 파일에 // @refresh reset 주석을 추가하면 된다.
  • 빠른 새로고침은 클래스 컴포넌트를 상태를 유지하지 않고 항상 다시 마운트한다. 이는 안정적인 작동을 보장한다.
  • 코드에서 실수를 할 때마다 빠른 새로고침은 파일 저장 후 자동으로 렌더링을 재시도한다. 구문 오류나 런타임 오류를 수정한 후 앱을 수동으로 재로딩할 필요가 없다.
  • 수정 중 console.logdebugger 문을 추가하는 것은 유용한 디버깅 기법이다.

빠른 새로고침 관련 문제가 있다면 GitHub에 보고해 주세요. 검토하겠습니다.

기타 개선 사항

  • use_frameworks! CocoaPods 지원 수정. 0.60 버전에서 CocoaPods를 기본적으로 통합하기 위해 몇 가지 업데이트를 진행했다. 하지만 이로 인해 use_frameworks!를 사용하는 빌드가 깨지는 문제가 발생했다. 이 문제는 0.61 버전에서 수정되어, 동적 프레임워크를 사용하는 iOS 프로젝트에 React Native를 더 쉽게 통합할 수 있게 됐다.

  • useWindowDimensions Hook 추가. 이 새로운 Hook은 자동으로 화면 크기 업데이트를 제공하고 구독한다. 대부분의 경우 Dimensions API 대신 사용할 수 있다.

  • React 16.9로 업그레이드. 이 버전에서는 UNSAFE_ 생명주기 메서드의 구식 이름을 더 이상 사용하지 않도록 변경했고, act 기능이 개선됐다. 자세한 내용과 자동 마이그레이션 스크립트는 React 16.9 블로그 포스트에서 확인할 수 있다.

주요 변경 사항

  • React .xcodeproj 제거. 0.60 버전에서 CocoaPods를 통한 자동 링크 기능을 도입했다. 또한 CocoaPods를 e2e 테스트 실행에 통합해, 이제부터는 iOS 앱에 RN을 통합하는 표준 방식으로 사용한다. 이로 인해 React .xcodeproj 지원이 사실상 중단되었으며, 0.61 버전부터 해당 파일이 제거되었다. 참고: 이미 0.60 버전의 자동 링크를 사용 중이라면 이 변경 사항의 영향을 받지 않는다.

감사 인사

0.61 버전을 만드는 데 도움을 주신 모든 기여자분들께 감사드립니다!

업데이트 내용을 확인하려면 0.61 변경 로그를 참고하세요.

React Native 0.60 출시 소식

· 9 min read
Ryan Turner
코어 메인테이너 & React Native 개발자

수백 명의 기여자가 수개월간 열심히 노력한 끝에, React Native 코어 팀은 버전 0.60 출시를 발표하게 되어 기쁘게 생각한다. 이번 릴리스는 Android와 iOS 플랫폼 모두에서 중요한 마이그레이션을 처리하며, 많은 문제도 해결했다. 이 블로그 포스트는 이번 릴리스의 주요 내용을 다룬다. 항상 그렇듯, 더 자세한 정보는 변경 로그를 참고하기 바란다. 마지막으로, 이번 이정표를 달성하는 데 도움을 준 모든 기여자에게 감사한다!

접근성에 초점을 맞추기

접근성 API에는 announceForAccessibility와 같은 다양한 개선 사항이 추가되었다. 또한 역할(roles), 액션 지원(action support), 플래그(flags) 등 여러 부분에서 개선이 이루어졌다. 접근성은 복잡한 분야이지만, 이러한 개선 사항이 A11Y를 조금 더 쉽게 만들어 줄 것으로 기대한다. 자세한 내용은 2019년 6월 React Native 오픈소스 업데이트를 참고하면 된다.

새로운 시작

React Native의 시작 화면이 업데이트됐다! 새로운 UI를 만드는 데 도움을 준 많은 기여자들에게 감사한다. 이 새로운 "Hello World" 화면은 사용자를 더 친근하고 매력적인 방식으로 생태계에 맞이한다.

새로운 초기 화면은 개발자들이 처음부터 리소스와 좋은 예제를 통해 시작할 수 있도록 돕는다

AndroidX 지원

AndroidX는 안드로이드 생태계에서 중요한 발전을 이루었다. 기존의 지원 라이브러리 아티팩트는 더 이상 사용되지 않는다. React Native 0.60 버전부터는 AndroidX로 마이그레이션되었다. 이는 주요 변경 사항이며, 여러분의 네이티브 코드와 의존성도 마이그레이션해야 한다.

이 변경으로 인해 React Native 앱은 AndroidX를 사용해야 한다. 한 앱에서 둘을 동시에 사용할 수 없으므로, 앱 코드와 의존성 코드 모두 AndroidX 또는 기존 지원 라이브러리 중 하나를 사용해야 한다.

matt-oakes on discussions-and-proposals

여러분의 네이티브 코드는 직접 마이그레이션해야 하지만, @mikehardy, @cawfree, 그리고 @m4tt72node_modules를 패치할 수 있는 똑똑한 도구 "jetifier"를 만들었다. 라이브러리 관리자들은 업그레이드해야 하지만, 이 도구는 임시 해결책을 제공하며 AndroidX 버전을 출시할 시간을 벌어준다. 따라서 AndroidX 마이그레이션과 관련된 오류가 발생하면 이 도구를 사용해 보자.

기본 CocoaPods 설정

이제 CocoaPods가 React Native iOS 프로젝트의 일부로 포함되었다. 이전에 사용하지 않았다면, 앞으로 iOS 플랫폼 코드를 열 때 xcworkspace 파일을 사용해야 한다. (팁: 루트 프로젝트 디렉토리에서 xed ios를 실행해 보자.) 또한, 내부 패키지의 podspec이 Xcode 프로젝트와 호환되도록 변경되었다. 이는 문제 해결과 디버깅에 도움이 될 것이다. 0.60 버전으로 업그레이드하면서 몇 가지 간단한 변경Podfile에 적용해야 한다. use_frameworks!와 관련된 호환성 문제가 있음을 알고 있으며, 이를 해결하기 위한 이슈를 추적 중이다.

Lean Core 제거 작업

WebViewNetInfo는 이전에 별도의 저장소로 분리되었으며, React Native 0.60에서는 이들을 React Native 저장소에서 완전히 이관했다. 또한, 새로운 App Store 정책에 대한 커뮤니티 피드백을 반영해 Geolocation도 분리했다. 아직 마이그레이션을 완료하지 않았다면 react-native-webview, @react-native-community/netinfo, @react-native-community/geolocation에 의존성을 추가해 작업을 완료해야 한다. 자동화된 솔루션을 원한다면 rn-upgrade-deprecated-modules를 사용해 볼 수 있다. 분리 이후 이 저장소들에는 100개 이상의 커밋이 이루어졌으며, 커뮤니티의 지속적인 지원이 기대된다!

네이티브 모듈 자동 연결 기능 추가

React Native CLI 팀은 네이티브 모듈 연결 방식을 크게 개선한 자동 연결(autolinking) 기능을 도입했다. 이제 대부분의 경우 react-native link 명령어를 사용할 필요가 없다. 동시에 팀은 일반적인 연결 프로세스도 전면 개편했다. 위 문서에서 언급한 대로 기존에 연결된 의존성은 react-native unlink로 해제해야 한다.

업그레이드 헬퍼

@lucasbento, @pvinis, @kelset, 그리고 @watadarkstarUpgrade Helper라는 훌륭한 도구를 개발했다. 이 도구는 업그레이드 과정을 더 간단하게 만들어준다. React Native 사용자가 브라운필드 앱이나 복잡한 커스텀 설정을 가진 경우, 버전 간 변경 사항을 쉽게 확인할 수 있도록 도와준다. 업그레이드 문서를 확인하고, 오늘 바로 여러분의 업그레이드 경로에 이 도구를 활용해보자!

Upgrade Helper는 React Native의 다른 버전으로 마이그레이션하기 위해 필요한 변경 사항을 깔끔하고 쉽게 보여준다

라이브러리 관리자를 위한 주의사항

AndroidX로의 변경은 거의 대부분 라이브러리 업데이트를 필요로 한다. 따라서 가능한 한 빨리 지원을 추가해야 한다. 아직 업그레이드할 준비가 되지 않았다면, 사용자가 빌드 시 라이브러리를 패치할 수 있는지 확인하기 위해 jetifier를 사용해 라이브러리를 점검해 보는 것이 좋다.

설정과 README를 업데이트하려면 autolinking 문서를 검토한다. 라이브러리가 이전에 어떻게 통합되었는지에 따라 추가 변경이 필요할 수도 있다. 의존성 인터페이스를 정의하는 방법에 대한 정보는 CLI의 dependencies 가이드를 참고한다.

감사합니다

이번에 소개한 내용은 주요 업데이트 중 일부에 불과합니다. 더 많은 변화를 확인하려면 변경 로그를 살펴보세요. 앞으로도 더 많은 소식에 주목해 주시기 바랍니다. 그동안 0.60 버전을 즐겨보세요!

Releasing React Native 0.59

· 11 min read
Ryan Turner
Core Maintainer & React Native Developer

React Native 0.59 버전을 소개합니다. 이번 릴리스는 88명의 기여자가 참여해 총 644개의 커밋으로 이루어진 대규모 업데이트입니다. 또한, 이슈 관리, 커뮤니티 활성화, 그리고 React Native를 가르치는 등 다양한 형태의 기여도 이루어졌습니다. 여러분의 노력에 감사드립니다. 이번 달에는 많은 사람들이 기다려온 여러 변경 사항이 포함되어 있습니다. 즐겁게 사용해 주시기 바랍니다.

🎣 훅스가 도입되었다

이번 릴리스에는 컴포넌트 간에 상태 로직을 재사용할 수 있는 React 훅스가 포함되었다. 훅스에 대한 관심이 뜨겁지만 아직 잘 모르는 독자를 위해 몇 가지 유용한 자료를 소개한다:

여러분의 앱에서 훅스를 직접 사용해 보길 권한다. 우리가 경험한 것처럼 훅스의 재사용성이 흥미롭게 느껴질 것이다.

📱 업데이트된 JSC로 인한 성능 향상과 안드로이드 64비트 지원

React Native는 여러분의 애플리케이션을 구동하기 위해 JSC(JavaScriptCore)를 사용한다. 안드로이드의 JSC는 몇 년 전 버전이어서 많은 모던 자바스크립트 기능을 지원하지 못했다. 더 나쁜 점은 iOS의 최신 JSC에 비해 성능이 떨어졌다는 것이다. 이번 릴리즈로 이러한 문제가 모두 해결되었다.

@DanielZlotin, @dulmandakh, @gengjiawen, @kmagiera, 그리고 @kudo의 멋진 작업 덕분에 JSC가 몇 년 간의 격차를 따라잡았다. 이로 인해 64비트 지원, 모던 자바스크립트 지원, 그리고 큰 성능 향상이 이루어졌다. 또한, 이제는 유지보수가 가능한 프로세스로 만들어 향후 WebKit 개선 사항을 별도의 노력 없이 활용할 수 있게 해준 점도 칭찬할 만하다. 이 작업을 가능하게 해준 Software Mansion과 Expo에게도 감사드린다.

💨 인라인 리퀘어를 통해 더 빠른 앱 실행

React Native 앱이 기본적으로 뛰어난 성능을 발휘할 수 있도록 돕고자, Facebook의 최적화 기술을 커뮤니티에 제공하려고 한다. 이 기능은 '인라인 리퀘어'라고 불리며, Metro가 지연 로딩할 컴포넌트를 식별할 수 있게 한다. 이로 인해 앱이 필요한 리소스를 필요할 때 로드하므로, 앱 실행 속도가 느려지는 문제를 해결한다. 특히 컴포넌트 구조가 복잡하고 다양한 앱에서 가장 큰 성능 향상을 기대할 수 있다.

0.59 템플릿의 metro.config.js 파일 소스, inlineRequires를 활성화하는 위치를 보여줌

이 기능을 기본적으로 활성화하기 전에, 커뮤니티의 피드백이 필요하다. 0.59 버전으로 업그레이드하면 새로운 metro.config.js 파일이 생성된다. 여기서 옵션을 true로 설정하고 피드백을 보내주길 바란다. 앱의 성능을 측정하고 싶다면 성능 문서에서 인라인 리퀘어에 대해 자세히 알아볼 수 있다.

🚅 Lean Core 진행 중

React Native는 크고 복잡한 프로젝트로, 리포지토리 구조가 복잡하다. 이로 인해 코드베이스는 기여자들이 접근하기 어렵고, 테스트가 힘들며, 개발 의존성으로서 불필요하게 비대해졌다. Lean Core는 이러한 문제를 해결하기 위해 코드를 별도의 라이브러리로 이전해 더 나은 관리를 목표로 하는 노력이다. 지난 몇 차례 릴리스에서 첫 단계를 진행했지만, 이제 본격적으로 시작할 때다.

여러분은 추가 컴포넌트들이 공식적으로 더 이상 사용되지 않는다는 것을 눈치챌 수 있을 것이다. 이는 좋은 소식이다. 이제 해당 기능을 적극적으로 유지보수하는 소유자가 생겼기 때문이다. 경고 메시지를 주의 깊게 확인하고, 새로운 라이브러리로 마이그레이션하라. 이 기능들은 향후 릴리스에서 제거될 예정이다. 아래 표는 컴포넌트, 현재 상태, 그리고 마이그레이션할 수 있는 새로운 위치를 나타낸다.

컴포넌트더 이상 사용되지 않음?새로운 위치
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-system or react-native-fs
MaskedViewIOS0.59@react-native-community/react-native-masked-view
NetInfo0.59@react-native-community/react-native-netinfo
Slider0.59@react-native-community/react-native-slider
ViewPagerAndroid0.59@react-native-community/react-native-viewpager

앞으로 몇 달 동안 더 많은 컴포넌트가 이 경로를 따라 더 가벼운 코어로 이동할 것이다. 우리는 이 작업에 도움을 필요로 한다. Lean Core umbrella로 가서 기여를 시작해 보라.

👩🏽‍💻 CLI 개선 사항

React Native의 커맨드라인 도구는 개발자가 이 생태계에 접근하는 첫 관문이다. 하지만 오랫동안 문제점이 지적되어 왔고 공식적인 지원도 부족했다. 이제 CLI 도구는 새로운 저장소로 이전되었으며, 전담 관리자 그룹이 몇 가지 흥미로운 개선 작업을 진행했다.

로그 형식이 훨씬 더 깔끔해졌다. 또한 명령어 실행 속도가 거의 즉각적으로 빨라졌다. 체감할 수 있을 정도의 차이가 있다:

0.58 버전의 CLI는 시작 속도가 느리다0.59 버전의 CLI는 거의 즉각적으로 실행된다

🚀 0.59 버전으로 업그레이드

여러분의 React Native 업그레이드 프로세스에 대한 피드백을 듣고, 향후 릴리스에서 경험을 개선하기 위해 조치를 취하고 있다. 0.59 버전으로 업그레이드하려면 rn-diff-purge를 사용해 현재 React Native 버전과 0.59 버전 사이의 변경 사항을 확인한 후, 수동으로 변경 사항을 적용하는 것을 추천한다. 프로젝트를 0.59 버전으로 업그레이드한 후에는 새롭게 개선된 react-native upgrade 명령어(이 명령어는 rn-diff-purge를 기반으로 한다!)를 사용해 0.60 버전 이상으로 업그레이드할 수 있다.

🔨 주요 변경 사항

0.59 버전에서 Android 지원은 Google의 최신 권장 사항에 맞춰 정리되었다. 이로 인해 기존 앱에서 문제가 발생할 수 있다. 런타임 크래시와 함께 "이 액티비티에는 Theme.AppCompat 테마(또는 이를 상속한 테마)를 사용해야 합니다"라는 메시지가 표시될 수 있다. 프로젝트의 AndroidManifest.xml 파일을 업데이트하고, android:theme 값이 AppCompat 테마(예: @style/Theme.AppCompat.Light.NoActionBar)인지 확인하는 것을 권장한다.

0.59 버전에서는 react-native-git-upgrade 명령어가 제거되었고, 새롭게 개선된 react-native upgrade 명령어로 대체되었다.

🙏 감사합니다

많은 새로운 기여자들이 플로우 타입에서 네이티브 코드 생성 활성화Xcode 경고 해결에 도움을 주셨습니다. 이러한 작업은 React Native가 어떻게 동작하는지 배우고 더 큰 선을 위해 기여할 수 있는 훌륭한 방법입니다. 감사합니다! 앞으로도 비슷한 이슈들을 기대해 주세요.

이번에 주목할 만한 주요 변경 사항들 외에도, 흥미로운 업데이트들이 많이 있습니다. 모든 업데이트를 확인하려면 변경 로그를 살펴보세요. 0.59 버전은 대규모 릴리스입니다. 여러분이 직접 사용해 보시길 기대합니다.

올해 남은 기간 동안 더 많은 개선 사항들이 예정되어 있습니다. 계속 지켜봐 주세요!

RyanReact Native 코어 팀

0.56 버전 릴리스

· 10 min read
Lorenzo Sciandra
Drivetribe의 코어 메인테이너 & React Native 개발자

오랜 기다림 끝에 React Native 0.56 버전이 드디어 출시되었다 🎉. 이 블로그 포스트는 이번 새 버전에서 소개된 주요 변경 사항을 요약한다. 또한 지난 3월 이후로 무엇을 준비해 왔는지 설명할 기회를 갖고자 한다.

호환성 문제의 딜레마, 또는 "언제 릴리스할 것인가?"

기여자 가이드는 React Native에 적용되는 모든 변경 사항이 거치는 통합 과정을 설명한다. 이 프로젝트는 다양한 도구들로 구성되어 있어, 모든 기능이 정상적으로 작동하도록 조율과 지속적인 지원이 필요하다. 여기에 프로젝트에 기여하는 활발한 오픈소스 커뮤니티까지 더하면, 그 규모가 얼마나 방대한지 짐작할 수 있다.

React Native의 높은 채택률을 고려할 때, 호환성을 깨는 변경 사항은 신중하게 처리해야 하며, 이 과정은 항상 원활하지는 않다. 코어 팀이 새로운 호환성 변경 사항을 통합하고 테스트할 시간을 확보하기 위해 4월과 5월 릴리스를 건너뛰기로 결정했다. 이 과정에서 전용 커뮤니티 커뮤니케이션 채널을 활용해 2018년 6월(0.56.0) 릴리스를 최대한 문제 없이 적용할 수 있도록 노력했다.

0.56.0이 완벽한가? 그렇지 않다. 모든 소프트웨어가 그렇듯 완벽하지는 않다. 하지만 "더 많은 안정성을 기다리는 것"과 "테스트 결과가 성공적이므로 진행할 수 있다" 사이의 균형점에 도달했고, 이제 릴리스할 준비가 되었다고 판단했다. 또한, 최종 0.56.0 릴리스에서 해결되지 않은 몇 가지 문제들 존재한다는 점도 알고 있다. 대부분의 개발자는 0.56.0으로 업그레이드하는 데 문제가 없을 것이다. 앞서 언급한 문제로 차단된 개발자들의 경우, 토론에 참여해 함께 해결책을 모색하기를 기대한다.

0.56.0을 더 안정적인 프레임워크를 위한 기본 구성 요소로 생각할 수 있다. 모든 예외 사항이 해결되기까지는 아마도 1~2주 정도의 광범위한 적용이 필요하겠지만, 이는 2018년 7월(0.57.0) 릴리스를 더욱 향상시킬 것이다.

이 섹션을 마무리하며, 총 818개의 커밋에 기여한 67명의 기여자들에게 감사의 인사를 전한다. 그들의 노력이 여러분의 앱을 더 나은 방향으로 이끌 것이다 👏.

그럼 이제, 더 이상 미루지 않고...

주요 변경 사항

Babel 7

여러분도 아시다시피, 최신 자바스크립트 기능을 사용할 수 있게 해주는 트랜스파일러 도구인 Babel이 곧 v7 버전으로 업그레이드된다. 이번 새 버전은 몇 가지 중요한 변화를 가져오기 때문에, Metro이러한 개선 사항을 활용할 수 있도록 지금이 업그레이드하기에 적절한 시기라고 판단했다.

업그레이드 과정에서 문제가 발생한다면, 관련 문서 섹션을 참고하길 바란다.

Android 지원 현대화

Android 환경에서 주변 도구들이 크게 변화했다. Gradle 3.5, Android SDK 26, Fresco 1.9.0, 그리고 OkHttp 3.10.0으로 업데이트했으며, 심지어 NDK API 타겟을 API 16로 조정했다. 이러한 변경 사항은 문제 없이 적용되며 더 빠른 빌드 속도를 제공할 것이다. 더 중요한 점은, 개발자들이 다음 달부터 시행될 새로운 Play Store 요구사항을 준수하는 데 도움이 될 것이다.

이와 관련하여, Dulmandakh에게 많은 PR을 제출해 준 것에 대해 특별히 감사드린다 👏.

이 방향으로 더 나아가기 위해 필요한 몇 가지 단계가 있으며, Android 지원 업데이트에 대한 미래 계획과 논의는 전용 이슈에서 확인할 수 있다. 또한 JSC에 대한 별도의 이슈도 참고할 수 있다.

새로운 Node, Xcode, React, Flow 소식

이제 React Native의 표준은 Node 8이다. 사실 Node 8은 이미 테스트 중이었지만, Node 6이 유지보수 모드로 전환되면서 본격적으로 채택했다. React도 16.4로 업데이트되었으며, 이번 버전에는 많은 수정 사항이 포함되어 있다.

iOS 8 지원을 중단하고, 이제 iOS 9가 지원 가능한 가장 오래된 버전이 되었다. iOS 8을 실행할 수 있는 기기는 모두 iOS 9로 업그레이드가 가능하므로 이 변경이 문제가 되지 않을 것으로 예상한다. 이로 인해 iOS 8을 실행하는 구형 기기를 위한 우회 코드를 제거할 수 있었다.

지속적 통합(CI) 도구 체인도 Xcode 9.4를 사용하도록 업데이트했다. 이제 모든 iOS 테스트가 애플의 최신 개발 도구에서 실행된다.

Flow 0.75로 업그레이드하여 많은 개발자들이 선호하는 새로운 오류 형식을 사용할 수 있게 되었다. 또한 더 많은 컴포넌트에 대한 타입을 추가했다. 아직 프로젝트에서 정적 타입 검사를 적용하지 않았다면, 런타임이 아닌 코딩 중에 문제를 발견하기 위해 Flow 사용을 고려해 보길 바란다.

그리고 다른 여러 가지...

예를 들어, YellowBox는 디버깅을 훨씬 더 개선한 새로운 구현체로 교체되었다.

전체 릴리스 노트는 여기에서 확인할 수 있다. 또한 이 새로운 버전으로 업그레이드할 때 문제를 피하려면 업그레이드 가이드를 꼭 참고하길 바란다.


마지막으로, 이번 주부터 React Native 코어 팀이 월간 회의를 다시 시작할 예정이다. 회의에서 다룬 내용을 모두가 알 수 있도록 최신 정보를 제공할 것이며, 여러분의 피드백을 다음 회의에 반영할 수 있도록 노력할 것이다.

모두 즐거운 코딩하길 바란다!

Lorenzo, Ryan, 그리고 React Native 코어 팀 모두

추가: 항상 그렇듯, React Native는 아직 0.x 버전으로 많은 변화가 진행 중임을 상기시킨다. 따라서 업그레이드할 때 무언가가 여전히 충돌하거나 고장날 가능성이 있다는 점을 기억하길 바란다. 이슈나 PR을 제출할 때 서로 도움을 주고받으며, CoC를 준수하길 바란다. 화면 너머에는 항상 사람이 있다는 것을 잊지 말자.