iOS

Alternative App Icon으로 앱 실행 중에 앱 아이콘 변경하기

Phililip 2024. 10. 29.
728x90

안녕하세요.

 

Alternative App Icon이란 것을 사용하면 런타임 때 앱 아이콘을 바꿀 수 있습니다. 왜 난 몰랐지..;;

 

한번 알아볼게용

 


# 앱 아이콘 변경 방법

1) Assets에 기본 아이콘과 함께 대체할 다른 앱 아이콘을 추가합니다.

 

2) (Optional) 만약 화면에서 앱 아이콘 이미지를 보여주고 싶으면 Assets에 Image Set으로 추가해 주세요.

 

[참고] iOS 18에서는 UIImage(named:)를 사용해 앱 아이콘 이미지를 가져올 경우 nil이 반환되기 때문

 

3) 'Build Settings > Alternate App Icon Sets' 설정에 대체될 앱 아이콘 이름을 추가합니다.

 

4) alternateIconName으로 현재 앱 아이콘 이름을 가져오고, setAlternateIconName(_:completionHandler:)로 아이콘을 설정합니다.

 

enum AppIcon: String, CaseIterable {
case `default` = "AppIcon"
case yellow = "AppIcon-Yellow"
case red = "AppIcon-Red"
var iconName: String? {
if self == .default { return nil }
else { return rawValue }
}
}
struct ContentView: View {
@State private var selectedAppIcon: AppIcon = .default
var body: some View {
NavigationView {
List {
Picker(selection: $selectedAppIcon) {
ForEach(AppIcon.allCases, id: \.rawValue) { icon in
HStack {
Image(icon.rawValue)
.resizable()
.frame(width: 80, height: 80)
Text(icon.rawValue)
}
.tag(icon)
.onTapGesture {
/*
기본 아이콘으로 설정하고 싶으면 iconName에 nil을 넘기고, 대체 아이콘으로 설정하고 싶으면 Assets에 추가한 대체 아이콘 이름을 넘긴다.
*/
UIApplication.shared.setAlternateIconName(icon.iconName)
selectedAppIcon = icon
}
}
} label: {
Text("아이콘 선택")
}
.pickerStyle(.inline)
}
.navigationTitle("앱 아이콘 변경")
}
.onAppear {
if let iconName = UIApplication.shared.alternateIconName,
let appIcon = AppIcon(rawValue: iconName) {
selectedAppIcon = appIcon
} else {
// alternateIconName = nil이면 기본 아이콘으로 설정된 것.
selectedAppIcon = .default
}
}
}
}
[참고] alternateIconName이 nil이면 기본 아이콘으로 설정된 것입니다.
마찬가지로, 기본 아이콘으로 설정하고 싶으면 setAlternateIconName에 nil을 넘겨주면 됩니다.

 

# 시연

[참고] 앱 아이콘을 변경할 때마다 나오는 팝업은 os에서 자동으로 제공하는 기능입니다.

 

# 참고

 

Configuring Your App to Use Alternate App Icons | Apple Developer Documentation

Add alternate app icons to your app, and let people choose which icon to display.

developer.apple.com

 

iOS & iPadOS 18 Release Notes | Apple Developer Documentation

Update your apps to use new features, and test your apps against API changes.

developer.apple.com

 


이번 글은 여기서 마무리.

 

 

 

반응형