[iOS] 앱 아이콘 동적으로 변경하기 (Dynamically Change App icon)

  [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에 샘플소스 올려두었습니다. 참고해주세요.


즐거운 코딩 되세요~

댓글

  1. 혹시 아이폰 기본앱이 시계의 초침이 계속 움직이게끔 하는 방법은 없을까요?

    답글삭제
    답글
    1. 저도 그걸 너무 원해서 iOS 7때부터 찾아는 봤는데, 제공은하지 않더라구요..
      그게 되었다면 모든앱들 아이콘이 움직이고 있지 않을까 싶내요 ㅠㅠ

      삭제

댓글 쓰기