김경록의 앱 개발 여정

[Swift] Launch Screen에 Asset.xcassets 이미지가 적용되지 않는다면 본문

Trouble Shooting

[Swift] Launch Screen에 Asset.xcassets 이미지가 적용되지 않는다면

Kim Roks 2025. 2. 1. 19:59

최근 프로젝트에서 런치 스크린을 추가하는 과정에서 정말 오랜만에 Storyboard를 사용하게 되었다.

평소 코드 기반(CodeBase)으로 UI를 구성해 왔기 때문에 런치 스크린 역시 코드로 구현할 수 있을 거라 생각했지만, 코드만으로는 런치 스크린을 작성할 수 없다는 사실을 알게 되었다.

심지어 SwiftUI를 사용하더라도 런치 스크린만큼은 Storyboard 방식으로 구성해야 한다는 점도 새롭게 배운 부분이었다.

📖 HIG를 참고해보니...

HIG 원문

먼저 Apple의 Human Interface Guidelines (HIG)을 참고했는데,

지금까지 내가 경험했던 앱들과는 상충되는 부분이 많아 의아했다. 특히 다음과 같은 규칙들이 눈에 띄었다.

  • 런치 스크린에서는 텍스트를 포함하지 말 것 (로컬라이징이 불가능함)
  • 앱의 브랜딩이나 광고 요소를 넣지 말 것 (앱 소개 공간이 아님)
  • 가능한 한 기존 UI와 일관성을 유지할 것

관련 hig 일부

 

런치 스크린은 사용자가 앱을 실행할 때 빠르게 표시되어야 하며, 앱의 초기 상태를 암시하는 역할을 한다. 따라서 동적 요소가 포함되면 안 되고, 텍스트 역시 다국어 지원이 어렵기 때문에 배제하는 것이 권장된다.

 

온보딩의 유무에 따라 달라지는 권장사항 또한 있었지만 이 또한 모호한 부분이 꽤나 있었다

 

🚨 이미지가 표시되지 않는 문제 발생

HIG를 숙지한 후, 나는 Assets.xcassets에 이미지를 추가한 뒤, 런치 스크린의 UIImageView에 해당 이미지를 설정했다. 그런데 실행해 보니이미지가 투명하게 표시되거나 보이지 않는 문제가 발생했다.

처음에는 이미지 파일 자체의 문제인지 의심되어, 시스템 이미지를 대신 넣어보았는데 정상적으로 표시되었다. 이는 내가 추가한 이미지가 올바르게 로드되지 않는다는 의미였다.

🔍 원인 분석

문제를 조사해 본 결과, Launch Screen은 Assets.xcassets의 이미지를 제대로 인식하지 못할 수도 있다는 점을 알게 되었다.

이는 런치 스크린이 빌드 타임에 정적으로 결정되기 때문으로, 런타임에 해석되는 리소스(예: xcassets의 이미지)를 불러오지 못하는 경우가 있다.

또한, 내가 사용하던 Tuist 환경에서는 다른 모듈에 있는 이미지를 런치 스크린에서 불러오는 것이 불가능했다. 런치 스크린은 특정 모듈이나 다이나믹한 리소스를 의존할 수 없으며, 오직 정적인 데이터만을 포함해야 하기 때문이다.

 

이 문제가 일부 프로젝트에서만 발생하는 듯했다. 나 역시 프로젝트별로 다른 결과를 경험했다.

이에 따라 다양한 사례를 찾아보며 구글링을 거듭했지만, 명확한 원인을 규명하기보다는 이런 현상이 종종 발생한다는 결론에 도달했다.

완벽한 해결책을 찾지 못한 점이 다소 아쉬웠다.

 

가장 애정하는 국내 블로거 또한 같은 주제에 대해 다룬 걸 보고, 분석보단 이해로 마무리하기로 했다.

https://ios-development.tistory.com/384

✅ 해결 방법

결론적으로, 런치 스크린에서는 Assets.xcassets를 사용하지 않고, 프로젝트 리소스 폴더에 직접 이미지 파일을 추가하는 것이 가장 확실한 해결책이었다. 다음과 같은 방식으로 문제를 해결했다.

 

Asset이 아닌, png 파일

 

  1. Assets.xcassets에서 이미지를 제거하고, 프로젝트 폴더 내에 직접. png.png 파일을 추가함
  2. LaunchScreen.storyboard에서 UIImageView를 선택한 후, Image 속성에서 해당 파일을 직접 선택
  3. 변경 사항을 반영하기 위해 Clean Build Folder(Shift + Command + K) 실행 후 다시 빌드

이렇게 설정한 후에는 정상적으로 런치 스크린에서 이미지가 표시되었다.

📝 마무리

이번 경험을 통해 런치 스크린의 제약 사항과 동작 방식에 대해 좀 더 깊이 이해하게 되었다. 특히,

  • 코드로 런치 스크린을 작성할 수 없다는 점
  • Assets.xcassets의 이미지를 사용할 수 없을 수도 있다는 점
  • 정적인 리소스만 사용해야 한다는 점을 명확하게 알게 된 계기가 되었다.