
Expo가 iOS 27과 React Native 0.88을 지원하는 SDK 58을 출시했다. 새 버전에는 폴더블 기기 대응 기능과 에이전트용 CLI, 네이티브 모듈 및 Android 빌드 개선이 포함됐다. 다만 Expo Go의 SDK 58 버전은 앱스토어와 구글 플레이에 수 주 안에 출시될 예정이며, 그전에는 개발 빌드를 사용해야 한다.
iOS 27·폴더블 기기 대응
iOS 27 SDK로 빌드한 앱은 화면 크기 조절을 지원하고, 앱의 수명 주기는 UIKit의 씬 기반 방식으로 동작한다. AppDelegate.swift를 직접 수정하거나 ios 디렉터리를 수동 관리하는 프로젝트는 씬 수명 주기 마이그레이션 안내를 확인해야 한다. iOS 27에서는 requireFullScreen을 설정해도 앱의 크기 조절을 막을 수 없으며, 앱 크기를 조절할 수 있는 상태에서는 ScreenOrientation.lockAsync가 효과가 없을 수 있다.
SDK 58로 만든 앱은 출시 시점부터 iPhone Duo를 지원하도록 준비할 수 있다. 화면을 접거나 분할 화면을 사용할 때 창 크기에 대응해야 하며, 내비게이션과 탭에는 Expo Router의 Stack·NativeTabs 또는 Expo UI의 SwiftUI 뷰를 활용할 수 있다. 가로 안전 영역을 처리하려면 스크롤 뷰 안쪽 등 더 많은 위치에 <SafeAreaView>가 필요할 수 있다. Expo는 두 화면에 맞춰 뷰를 배치하는 ArrangementView와 힌지 각도·상태를 읽는 expo-hinge도 추가했다. 힌지 상태는 레이아웃이 아니라 상호작용이나 시각 효과에 활용하도록 Apple이 권장한다고 안내했다.
개발 도구와 에이전트 지원
Xcode 27에서 Simulator.app을 대체하는 Device Hub를 Expo CLI가 감지해 시뮬레이터를 실행하고 선택한다. 새 개발 도구 플러그인 expo-device-hub는 브라우저에서 iOS 시뮬레이터와 Android 에뮬레이터를 조작하고 CPU·메모리·네트워크 정보를 볼 수 있게 한다. 설치와 실행은 npx expo install expo-device-hub 뒤 npx expo start 순서다.
에이전트용 실험적 CLI인 @expo/agent-cli는 Expo CLI, EAS CLI, expo-doctor를 바탕으로 동작한다. status는 앱을 실행하지 않고 Expo Go 호환성을 확인하고, dev는 앱 실행에 필요한 빌드 방식을 처리하며, smoke는 실행 확인 후 앱을 종료한다. 시작 명령은 npx @expo/agent-cli@latest agents:setup이다. Expo CLI에도 실행 중인 프로세스와 이벤트 로그를 기계가 읽을 수 있게 보여주는 실험적 명령이 추가됐다.
모듈·빌드·성능 변경
expo-modules-core는 Android용 네이티브 라이브러리를 사전 컴파일해 제공한다. Expo 측의 빈 SDK 58 프로젝트 테스트에서는 Apple M3 Pro에서 네 가지 ABI를 대상으로 한 Android 디버그 빌드가 약 80초에서 약 39초로 줄었다. 이는 해당 테스트에서의 결과이며, 원문은 CPU 코어가 적은 CI 환경에서 절감 효과가 더 클 수 있다고 설명한다. 소스에서 직접 컴파일하려면 expo-build-properties의 android.buildExpoModulesCoreFromSource를 설정한다.
실험 단계인 Rust 기반 변환기 Noxcturnal은 내부 테스트에서 파일별 변환 시간이 약 3배 빨랐고, 전체 콜드 번들링은 약 2배 빨랐다. 가장 큰 테스트 앱에서는 약 5,500개 파일을 묶는 시간이 Babel 사용 시 5.26초, 새 변환기 사용 시 2.46초였으며 443개 파일은 여전히 Babel로 처리됐다. 이 기능은 사용자 지정 변환 워커나 Babel 플러그인·프리셋이 없을 때만 활성화되며, Reanimated 또는 Worklets 변환이 필요한 파일은 건너뛴다. 구현과 수치는 안정화 전에 바뀔 수 있다.
Expo Modules 2.0은 iOS와 Android에서 베타로 제공된다. 일반 Swift·Kotlin 클래스에 주석을 붙여 JavaScript에 노출할 메서드와 속성을 지정하는 방식이다. Expo가 제시한 iPhone 16 Pro Release 빌드 측정에서는 동기 호출이 기존 DSL보다 2.5~5.6배 빨랐다. Android의 마이크로벤치마크 12개에서도 모든 사례에서 Expo Modules 1.0보다 빨랐으며, TurboModules보다도 각 사례에서 빨랐다고 밝혔다. 측정 결과와 API 설명은 Expo Modules 2.0 소개에서 확인할 수 있다.
SDK 58은 React Native를 0.88로 올렸고, 대용량 목록의 행을 가시 영역 주변에서만 렌더링하고 재사용하도록 Expo UI를 변경했다. Expo Router에서는 데이터 로더, 서버 사이드 렌더링, 미들웨어와 네이티브 탭 등이 안정화됐다. SDK 58 프로젝트는 web.output을 지정하지 않으면 서버 출력이 기본이며, 요청마다 HTML을 렌더링한다. SDK 57의 동작을 유지하려면 web.output을 "static"으로 설정하고 apiRoutes 옵션을 활성화해야 한다. 사용자 지정 내비게이터나 expo-router/react-navigation을 쓰는 프로젝트는 SDK 57에서 58로의 마이그레이션 안내를 확인하는 편이 좋다.
업그레이드 전 확인할 점
React Native 0.87부터 Strict TypeScript API가 기본값이 돼 react-native/Libraries/*에서 가져오는 심층 경로는 타입 오류가 된다. InteractionManager 등 일부 API도 제거됐다. SDK 58은 macOS를 아직 지원하지 않으며, expo-file-system의 File.write()는 비동기 함수로 바뀌었다. Android 릴리스 빌드에서는 R8 축소·최적화·난독화가 기본으로 켜져 리플렉션에 의존하는 라이브러리는 ProGuard 유지 규칙이 필요할 수 있다. Expo 도구는 Node.js 22.13 이상(22 계열), 24.3 이상(24 계열) 또는 26 이상을 요구한다.
새 Expo Go 앱은 수 주 안에 출시될 예정이다. 그전까지 npx create-expo-app은 SDK 57 프로젝트를 만들며, SDK 58 프로젝트는 npx create-expo-app --template default@sdk-58로 생성한 뒤 개발 빌드로 실행할 수 있다. 스토어에 출시될 새 Expo Go는 SDK 58만 지원할 예정이다. 업그레이드할 때는 SDK 변경 사항과 마이그레이션 안내를 확인해야 한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요