[iOS] 앱 아이콘 동적으로 변경하기 (Dynamically Change App icon)
안녕하세요 물먹고하자입니다. 오늘은 앱 아이콘을 동적으로 변경하는 방법에 대해서 정리해 보았습니다.
iOS 10.3 이상부터 지원되는 기능입니다.
참고 : https://developer.apple.com/documentation/uikit/uiapplication
// If false, alternate icons are not supported for the current process.
// 앱 아이콘을 변경 할 수 있는지 체크 하는 함수
@available(iOS 10.3, *)
open var supportsAlternateIcons: Bool { get }
// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
// 앱 아이콘을 변경하는 함수
@available(iOS 10.3, *)
open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)
// If `nil`, the primary application icon is being used.
// 현재 변경되어 있는 앱아이콘 이름을 아져오는 함수
@available(iOS 10.3, *)
open var alternateIconName: String? { get }
샘플 완료 동영상
Git 주소 : https://github.com/kimjiwook/AppIconChangeSample
샘플코드
1. 변경할 앱 아이콘들을 추가해 준다.
저는 샘플로 Icon-60J, Icon-60Q, Icon-60W 3가지를 추가했습니다. (3가지로 변경테스트 진행)
2. info.plist 키값 추가해 준다.
1) Icon files(iOS 5) [Dictionary] 추가한다.
2) 하위로 CFBundleAlternateIcons [Dictionary] 추가
3) CFBundleAlternateIcons > 키값 및 아이템을 추가합니다.
CFBundleAlternateIcons 의 추가된 키값을 앱 아이콘 변경할 키값으로 사용됩니다.
3. 코드를 작성해준다.
//
// ViewController.swift
// supportsAlternateIconsSample
//
// Created by JW_Macbook on 2020/12/02.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
/// iCon J Change
@IBAction func changeIConJ(_ sender: Any) {
changeICon(iconName: "iConJ")
}
/// iCon W Change
@IBAction func changeIConW(_ sender: Any) {
changeICon(iconName: "iConW")
}
/// iCon Q Change
@IBAction func changeIConQ(_ sender: Any) {
changeICon(iconName: "iConQ")
}
/// Change icon Name
/// - Parameter iconName: image Name
func changeICon(iconName:String) {
// 1. 필수 체크 (멀티 icon 지원여부 체크), 현재 변경하려는 아이콘과 같은지 체크
guard UIApplication.shared.supportsAlternateIcons,
iconName != UIApplication.shared.alternateIconName else {
return
}
// 2. 변경하기
UIApplication.shared.setAlternateIconName(iconName) { (iconChangeError) in
if let error = iconChangeError {
// 에러
print(error.localizedDescription)
}
else {
print("Success")
}
}
}
}
마무리
이번에 앱 아이콘을 동적으로 변경하는 방법에 대해 알아보았습니다. 소스코드는 매우 심플한편이며, 최근 인스타에서 이벤트 성으로 앱 아이콘을 변경하는 이벤트가 있었습니다. 참고하여 만들어 보게 되었고, 당연히 앱 아이콘을 중간에 변경 못한다고 생각했는데, iOS 10.3 부터 지원해서 충격..
아쉽게도 앱 이름은 변경하는게 지원은 하지 않고 있는 것 같습니다.
Github에 샘플소스 올려두었습니다. 참고해주세요.
즐거운 코딩 되세요~
혹시 아이폰 기본앱이 시계의 초침이 계속 움직이게끔 하는 방법은 없을까요?
답글삭제저도 그걸 너무 원해서 iOS 7때부터 찾아는 봤는데, 제공은하지 않더라구요..
삭제그게 되었다면 모든앱들 아이콘이 움직이고 있지 않을까 싶내요 ㅠㅠ