태그
목차

스플래시 스크린

Expo 프로젝트를 위한 스플래시 화면을 만드는 방법과 기타 모범 사례를 알아본다.

생성일: 2024-04-11

수정일: 2024-04-11

splash 스크린, 또는 시작 화면은 사용자가 앱을 실행할 때 가장 먼저 보게 되는 화면이다. 이 화면은 앱이 로딩되는 동안 표시된다. 또한 네이티브 SplashScreen API를 사용하여 splash 스크린이 사라지는 시점을 제어할 수 있다.

앱의 Splash 스크린 설정하기

기본 splash 스크린은 흰색 빈 화면이다. 프로젝트의 app.json 에 있는 splash 키를 사용하여 이를 커스터마이징할 수 있다.

Splash 이미지 만들기

splash 이미지를 만들기 위해 이 Figma 템플릿을 사용할 수 있다. 이 템플릿은 Android와 iOS용 아이콘과 splash 이미지를 위한 최소한의 디자인을 제공한다.

자세한 과정은 아래 영상을 참고한다:

Android

Android 화면 크기는 매우 다양하다. 이에 대처하는 한 가지 전략은 가장 일반적인 해상도를 살펴보고 그에 맞게 디자인하는 것이다. 기기와 해상도 목록은 여기에서 볼 수 있다. splash 이미지를 자동으로 크기 조정 및 자를 수 있으므로, 화면에 정확히 맞출 필요가 없는 한 우리의 규격을 유지할 수 있다. 이는 Android와 iOS에 하나의 splash 이미지를 사용할 수 있어 편리하다. 이 가이드에서 읽어야 할 내용과 해야 할 작업이 줄어듭니다.

iOS

Expo는 기기 화면 크기에 따라 앱의 이미지 크기를 조정한다. splash.resizeMode 를 사용하여 이미지 크기 조정에 사용되는 전략을 지정할 수 있다. 최신 화면 크기 목록은 iOS Human Interface Guidelines의 '기기 화면 및 크기 사양'을 참조한다.

Splash 이미지를 .png로 내보내기

splash 스크린을 만든 후 .png 형식으로 내보내 assets 디렉토리에 저장한다. 현재는 .png 이미지만 지원된다. 다른 이미지 형식을 사용하면 앱의 프로덕션 빌드가 실패한다.

splash.image 사용하기

app.json 을 열고 splash.image 의 값으로 새 splash 이미지를 가리키는 경로를 추가한다. 기본 파일명을 변경하지 않았다면 ./assets/splash.png 가 되어야 한다.

{
  "expo": {
    "splash": {
      "image": "./assets/splash.png"
    }
  }
}

splash 이미지 미리보기는 Expo Go 로컬 개발, 독립형 빌드 및 개발 빌드로 제한된다. 자세한 내용은 아래의 환경 간 차이점 섹션을 참조한다.

Expo Go에서 splash 이미지를 미리 보려면 Expo Go를 다시 열고 Expo CLI에서 프로젝트를 시작한다. 새 splash 스크린이 보일 것이다. 그러나 약간의 지연이 있을 수 있다.

Note

Android에서는 알림 창의 새로 고침 버튼을 눌러야 한다. iOS에서는 app.json 의 splash 스크린 변경 사항을 보려면 Expo Go를 닫았다가 다시 열어야 한다.

splash.backgroundColor

splash 이미지의 배경색을 흰색이 아닌 다른 색상으로 설정하면 주변에 흰색 테두리가 보일 수 있다. 이는 기본값이 #ffffffsplash.backgroundColor 프로퍼티 때문이다.

이를 해결하려면 아래 예시와 같이 splash.backgroundColor 를 splash 이미지 배경색과 동일하게 설정한다:

{
  "expo": {
    "splash": {
      "image": "./assets/splash.png",
      "backgroundColor": "#FEF9B0"
    }
  }
}

splash.resizeMode

제공하는 모든 splash 이미지는 종횡비를 유지하고 사용자 기기의 해상도에 맞도록 크기가 조정된다.

크기 조정에는 contain (기본값)과 cover의 두 가지 전략을 사용할 수 있다. 두 경우 모두 splash 이미지는 splash 스크린 내에 있다. 이는 React Native <Image>resizeMode 와 유사하게 작동한다.

이를 예제에 적용하고 backgroundColor를 제거해 보자:

{
  "expo": {
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "cover"
    }
  }
}

결과는 다음과 같다:

위 예시에서 이미지는 종횡비를 유지하면서 전체 너비를 채우도록 늘어난다. 그래서 splash 이미지의 로고가 resizeModecontain 으로 설정된 경우보다 더 크게 보이는 것이다.

containcover 의 차이를 자세히 알아보려면 블로그 글을 참조한다.

Android와 iOS용 커스텀 설정

splash 옵션은 app.json 에서 androidios 아래에 설정을 중첩하여 플랫폼별로 설정할 수 있다. 또한 각 플랫폼에서만 사용할 수 있는 특정 설정 옵션이 있다:

Important

앱에서 Expo Prebuild(이전의 관리형 워크플로우)를 사용하여 네이티브 androidiOS 디렉토리를 생성하지 않는다면, app.json 의 변경 사항은 아무런 효과가 없을 것이다. 자세한 내용은 여기를 참조한다.

Android의 splash 스크린 API 제한 사항

Android에서는 대부분의 경우 iOS와 동일하게 splash 스크린이 동작한다. 독립형 Android 애플리케이션의 경우에는 약간의 차이가 있다. 이 시나리오에서는 app.json 내의 android.splash 설정에 특별히 주의를 기울여야 한다.

resizeMode 에 따라 Android는 다음과 같이 동작한다:

환경 간 차이점

앱은 Expo Go에서 열리거나 독립형 앱으로 열릴 수 있으며, 게시되거나 개발 중일 수 있다. 이러한 환경 간에는 splash 스크린 동작에 약간의 차이가 있다.

iOS 캐싱

커스텀 iOS 빌드에서는 빌드 간에 시작 화면이 캐시로 남아 있어 새 이미지 테스트가 어려울 수 있다. Apple은 다시 빌드하기 전에 파생 데이터 폴더를 지울 것을 권장한다. 이는 Expo CLI에서 다음을 실행하여 수행할 수 있다:

npx expo run:ios --no-build-cache

시작 화면 테스트에 대한 자세한 내용은 Apple의 가이드를 참조한다.