【问题标题】:Change App icon programmatically以编程方式更改应用程序图标
【发布时间】:2014-03-07 08:24:44
【问题描述】:

我见过this application on iTunes,它正在iphone 中创建自定义图标。在我的应用程序中,我还想更改图标,特别是我想要做的是在我的图标中有一个标签,并且我想以编程方式更改标签的值。

【问题讨论】:

  • 这是不可行的。
  • @samfisher 查看我的答案。他们基本上只是在诱使用户认为他们点击了应用程序图标,而他们实际上只是在点击网页视图主屏幕快捷方式。
  • 是的,我知道,上面引用的应用程序只是玩了把戏。我的评论是关于通过 Objective-C 代码的实际技术实现。

标签: iphone xcode icons appicon


【解决方案1】:

只有我的两分钱。

直接添加到 plist 很好,如果在 Xcode 中直观地看到,最终效果是在 plist 中有一个“奇怪”的值(IOS5...):

2) 在模拟器(Xcode 10 beta...)上运行调试控制台,您将看到:

MobileGestalt.c:890:此平台不支持 MGIsDeviceOneOfType。

但有效

3) 不要直接在 AppDelegate 中调用。如果需要,可以将其称为 dispatched:

    final func changeIcon(){

        let name = "Icon1"
        let icon = UIImage(named:  name)
        if UIApplication.shared.supportsAlternateIcons{
            UIApplication.shared.setAlternateIconName(name, completionHandler: { (error) in

                print(error ?? "ok")
            })
        }
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        let when = DispatchTime.now() + 1
        DispatchQueue.main.asyncAfter(deadline: when) {
            self.changeIcon()
        }

        return true
    }
.....

4) 注意:图标名是你在上层key中输入的符号名,例如:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>Icon1</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>logo2_120x120</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>Icon2</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>logo3_120x120</string>
            </array>
        </dict>
    </dict>
</dict>

并且不要在 plist 中添加 @2x 或类似内容。

【讨论】:

    【解决方案2】:

    可以从 iOS 10.3 更改 appIcon。

    斯威夫特 3:

    if UIApplication.shared.supportsAlternateIcons{
            UIApplication.shared.setAlternateIconName("icon2", completionHandler: { (error) in
                print(error ?? "")
            })
    }
    

    目标 C:

    [[UIApplication sharedApplication] setAlternateIconName:@"icon2" completionHandler:^(NSError * _Nullable error) {
            //NSLog(@"Error...");
    }];
    

    在 info.plist 中将 supportAlternateIcon 设置为 Yes。主图标和辅助图标都应添加到应用的 Info.plist 文件的 CFBundleIcons 键中。

    //Info.plist
    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>Icon1</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>icon1</string>
                </array>
                <key>UIPrerenderedIcon</key>
                <false/>
            </dict>
            <key>Icon2</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>icon2</string>
                </array>
            </dict>
        </dict>
    </dict>
    

    参考资料:

    【讨论】:

      【解决方案3】:

      这是不可能的。除非您的应用属于报亭类别。对于报亭应用,使用代码更改图标,

      UIApplication *app = [UIApplication sharedApplication];
      [app setNewsstandIconImage:newsstandImage];
      

      注意:@Enrico 建议的是不同的解决方案。您的应用程序图标仍会出现在主屏幕中,将创建一个重复的图标。大多数用户不会喜欢的。

      【讨论】:

      • 我的申请不属于报亭类别
      • 每天我都想改变图标上的文字,比如是否每天都改变
      • @SeemaSharma 那不可能
      【解决方案4】:

      video tutorial of the app 看来,他们所做的似乎只是创建了一个网页,其中包含您创建的自定义图标的图标,然后用户将点击“添加到主屏幕”以添加自定义网页到主屏幕。这应该足以让你继续前进。

      【讨论】:

      • 如何在我的应用程序中更改 appicon 上的标签?
      • 图标为白色,图标上有一个文本用于显示某些值,我想以编程方式更改该文本
      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2023-03-16
      • 2013-12-16
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多