アプリ変更アイコン

アプリ変更アイコン

JDタオバオでは、618やダブルイレブンになるたびに、該当するテーマに合わせてアプリアイコンが変更されますが、その間アプリはアップグレードされていないため、アプリアイコンを変更できる設定が必要です。

いくつかのドキュメントを確認したところ、次の方法が見つかりました。

写真を準備する

120x120と180x180の2つのサイズの画像を用意します。それぞれ [email protected][email protected] という名前を付けました。

次に、画像をプロジェクトのディレクトリに配置します。画像アセットに配置しないように注意してください。

Info.plistの変更

プロジェクトの Info.plist を開き、ファイルを右クリックしてソース コードとして開き、次のコードを追加します。

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>NewAppIcon</key> // 这个是函数需要用到的参数
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon</string> // 这个地方的icon就是文件名
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

アイコン変更機能を追加

更新するには次のコードを追加します。

if UIApplication.shared.supportsAlternateIcons {
    
    
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    
    
        UIApplication.shared.setAlternateIconName("NewAppIcon") {
    
     error in
            if let error = error {
    
    
                print(error.localizedDescription)
            } else {
    
    
                print("Success!")
            }
        }
    }
}

アップデートが完了すると、プロンプトウィンドウがポップアップ表示され、操作性があまり良くないことがわかります。したがって、少し変更する必要があります。
いくつかのメソッドを追加します。

func setApplicationIconName(_ iconName: String?) {
    
    
    if UIApplication.shared.responds(to: #selector(getter: UIApplication.supportsAlternateIcons)) && UIApplication.shared.supportsAlternateIcons {
    
    
        
        typealias setAlternateIconName = @convention(c) (NSObject, Selector, NSString?, @escaping (NSError) -> ()) -> ()
        
        let selectorString = "_setAlternateIconName:completionHandler:"
        
        let selector = NSSelectorFromString(selectorString)
        let imp = UIApplication.shared.method(for: selector)
        let method = unsafeBitCast(imp, to: setAlternateIconName.self)
        method(UIApplication.shared, selector, iconName as NSString?, {
    
     _ in })
    }
}

後で電話をかける場合は上記の方法を使用してください。

if UIApplication.shared.supportsAlternateIcons {
    
    
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    
    
        self.setApplicationIconName(nil)
    }
}

このようにして、アイコンをサイレントに変更することができます。

おすすめ

転載: blog.csdn.net/xo19882011/article/details/135454649