이 앱은
stream-client-web을 WebView로 띄우는 셸이다. 따라서 웹 서버와 앱을 함께 띄워야 화면이 보인다.
corepack enable
pnpm install
cp .env.example .env.local.env.local의 EXPO_PUBLIC_WEB_URL에 웹 주소를 넣는다. 실행 환경마다 주소가 다르다 — 아래 표 참고.
| 실행 환경 | 웹 주소 | 비고 |
|---|---|---|
| iOS 시뮬레이터 | http://localhost:5173 |
시뮬레이터가 맥의 네트워크를 그대로 쓴다 |
| Android 에뮬레이터 | http://10.0.2.2:5173 |
10.0.2.2가 호스트 PC의 localhost에 매핑된다 |
| 실제 기기 (Expo Go) | http://{개발 PC의 LAN IP}:5173 |
기기와 PC가 같은 네트워크에 있어야 한다 |
웹까지 직접 띄우기 번거로우면 배포된 dev 환경(https://dev.stream.billilge.site)을 가리켜도 된다. 이 경우 아래 "2. 웹 서버 띄우기"는 건너뛴다. 다만 웹을 고치면서 보려면 로컬 주소를 써야 한다.
배포 빌드(eas build)는 .env.local이 아니라 eas.json의 프로필별 env로 주소를 주입한다 — README 참고.
LAN IP 확인:
ipconfig getifaddr en0 # 유선이면 en1 등 다른 인터페이스일 수 있다별도 터미널에서 stream-client-web을 실행한다.
cd ../stream-client-web
pnpm dev실제 기기로 볼 때는 --host가 필요하다. Vite dev 서버는 기본적으로 localhost에만 바인딩해서 다른 기기에서 닿지 않는다.
pnpm dev --hostpnpm start # QR 코드가 뜬다
pnpm ios # iOS 시뮬레이터로 바로 실행
pnpm android # Android 에뮬레이터로 바로 실행
pnpm web # 브라우저에서 실행.env.local을 고쳤으면 Expo 개발 서버를 재시작해야 반영된다. EXPO_PUBLIC_* 값은 번들 시점에 주입되기 때문이다.
기기에 Expo Go 앱만 설치하면 된다 (App Store / Play Store). react-native-webview는 Expo Go에 포함되어 있어 별도 네이티브 빌드가 필요 없다.
pnpm start- 터미널의 QR 코드를 스캔 — iOS는 기본 카메라 앱, Android는 Expo Go 앱 안에서
- 기기와 PC가 같은 와이파이에 있어야 한다
Xcode가 필요하다 (App Store에서 설치, 용량이 크고 시간이 오래 걸린다). Command Line Tools만으로는 시뮬레이터가 없다.
xcode-select -p # /Applications/Xcode.app/... 이 나와야 한다
xcrun simctl list devices available # 사용 가능한 시뮬레이터 목록
pnpm iosxcode-select -p가 /Library/Developer/CommandLineTools를 가리키면 Xcode 설치 후 아래를 실행한다.
sudo xcode-select -s /Applications/Xcode.app/Contents/DeveloperAndroid Studio가 필요하다. 설치 후 Device Manager에서 가상 기기(AVD)를 하나 만든다.
emulator -list-avds # 만든 AVD 목록
pnpm android브라우저에서 react-native-web으로 렌더링된다. 화면 확인용으로는 쓸 수 있지만 하드웨어 백 버튼, 외부 링크 처리 같은 네이티브 동작은 검증되지 않는다. 최종 확인은 기기나 시뮬레이터에서 한다.
셸이 제대로 동작하는지 보려면 아래를 확인한다.
- 웹 화면이 뜨는가
- 로드 중 스피너가 보이고, 로드되면 사라지는가
- Bottom Nav로 화면을 옮긴 뒤 Android 하드웨어 백 버튼이 앱 종료가 아니라 웹 뒤로 가기로 동작하는가 (Android 전용)
- 네트워크를 끊고 앱을 다시 열면 오류 화면과
다시 시도버튼이 뜨는가 - 외부 도메인 링크가 웹뷰 안이 아니라 시스템 브라우저로 열리는가
현재 웹의
ScreenLayout이375x812고정 프레임이라 화면이 꽉 차지 않고 가운데 정렬된 채 여백이 생긴다. 알려진 사항이며 web 레포에서 별도로 대응한다.
| 증상 | 원인 / 해결 |
|---|---|
| "웹 주소가 설정되지 않았습니다" 화면 | .env.local에 EXPO_PUBLIC_WEB_URL이 없다. 채운 뒤 Expo 서버를 재시작한다 |
| "페이지를 불러오지 못했습니다" 화면 | 웹 dev 서버가 꺼져 있거나, 주소가 실행 환경과 맞지 않는다(위 표 확인) |
| 실제 기기에서만 안 닿는다 | 웹을 pnpm dev --host로 띄웠는지, 기기와 PC가 같은 네트워크인지, 맥 방화벽이 막고 있지 않은지 확인 |
.env.local을 고쳤는데 그대로다 |
EXPO_PUBLIC_*은 번들 시점에 주입된다. Expo 개발 서버를 재시작한다 |
| LAN IP가 자꾸 바뀐다 | 공유기가 DHCP로 새 IP를 준 것이다. ipconfig getifaddr en0로 다시 확인해 .env.local을 갱신한다 |
로컬
http://접속은 Expo Go에서 동작한다. 나중에 자체 개발 빌드(EAS)로 넘어가면 iOS ATS 예외 설정이 필요할 수 있다.