【问题标题】:Can I change app icon programmatically我可以以编程方式更改应用程序图标吗
【发布时间】:2023-03-16 21:10:02
【问题描述】:

我有两个内置的应用图标(免费和高级),是否可以在应用内购买成功完成后以编程方式将免费图标替换为高级图标?

【问题讨论】:

标签: ios icons


【解决方案1】:

不,图标是在应用程序包中指定的,您不得更改。如果您更改它,您的应用签名将变为无效(不是相同的校验和),因此您的应用将不再运行。

【讨论】:

  • 这是否也适用于内部应用程序而不是通过公共 App Store 分发的应用程序? plist 是不可变的吗?
【解决方案2】:

恐怕不会;可以肯定的是,不允许有条件地更改应用图标。

【讨论】:

    【解决方案3】:

    如果没有越狱的手机,我认为这是不可能的。应用程序图标包含在应用程序包中,您不能对其进行写入。

    【讨论】:

      【解决方案4】:

      这是不可能的。应用程序图标不是动态的,只能通过 iTunes Connect 向您的应用程序提交新的更新来更新它们。有关更多信息,请阅读 iTunes Connect 开发人员指南。 https://itunesconnect.apple.com/docs/iTunesConnect_DeveloperGuide.pdf

      【讨论】:

        【解决方案5】:

        我不同意以上所有答案。 请尝试应用程序“OneTap”,它可以让您制作自己的新应用程序图标。 OneTap 应用在 Itune 上是免费的。

        【讨论】:

        • 如果可能的话,我相信很多人都会感兴趣。请留下有效的 URL 链接或解决方案的源代码。
        • 不可能! OneTap 不会更改自己的 AppIcon。它只是用选定的图像打开 Safari,用户应该按保存到主屏幕。在此之后,您可以点击这个新的应用程序图标,该图标将打开 Safari,将您重定向到 OneTap 应用程序因此无法以编程方式更改应用程序图标
        【解决方案6】:

        不,绝对不是。应用程序包的那部分是只读的,也是代码签名的。

        关于 TapOne 应用程序的答案是完全不同的。它为网站或电话号码创建“网络剪辑”。例如,要为您的网站创建一个 iPhone 图标,您可以在网页标题中添加如下内容:

        <link rel="apple-touch-icon" href="/your-custom-icon.png"/>
        

        这里有更多信息:https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

        TapOne 和网络剪辑不会以编程方式更改应用程序包中的图标。

        【讨论】:

          【解决方案7】:

          对于这种情况有一个新的解决方案。

          你可以使用

          setAlternateIconName(_:completionHandler:)
          

          iOS 10.3 与 xcode 8.3 一起发布。

          10.3+

          更新:

          用法很简单,关键是要找出 plist 的用法,注意不能从 xcassets 加载资产(至少对我不起作用)。您需要将图标文件添加到项目中,并且更喜欢 180x180 的图像质量。

          您需要使用“图标文件(iOS 5)”,新的图标文件不起作用。

          最后一件事,当您更改按钮上的图标时,单击它会弹出一个警告窗口,上面写着“您已更改“IcoTest”的图标。”

          //ViewController.swift
          @IBAction func ico1Click(_ sender: Any) {
              if UIApplication.shared.supportsAlternateIcons{
                  UIApplication.shared.setAlternateIconName("Icon2", completionHandler: { (error) in
                      print(error ?? "")
                  })
              }else{
                  print("NO NO")
              }
          }
          
          //Info.plist
          <key>CFBundleIcons</key>
          <dict>
              <key>CFBundleAlternateIcons</key>
              <dict>
                  <key>Icon1</key>
                  <dict>
                      <key>CFBundleIconFiles</key>
                      <array>
                          <string>alternater1_180x180</string>
                      </array>
                      <key>UIPrerenderedIcon</key>
                      <false/>
                  </dict>
                  <key>Icon2</key>
                  <dict>
                      <key>CFBundleIconFiles</key>
                      <array>
                          <string>alternater2_180x180</string>
                      </array>
                  </dict>
              </dict>
          </dict>
          

          【讨论】:

          • 尝试扩展您的答案。您还没有解释它是 UIApplication 上的一种方法或如何设置 plist 或任何东西。只是说“调用这个方法”对任何人都没有用。
          • 我想与人们分享这个激动人心的消息。我将分享一个如何像我一样做的事情。很遗憾,这对你来说还不够。
          • 这是一个令人振奋的消息,你是对的。但是你的答案并没有说明如何使用这个新功能的全部故事,它的含义和实现细节。我对答案投了反对票,因为就目前而言,这是一个简单地试图获得选票而不帮助任何人的答案。如果您修改答案以充分解释该功能,那么我将很乐意投票:)
          【解决方案8】:

          更新:从 iOS 10.3 开始,您可以通过在 info.plist 中定义备用图标来更新应用图标。

          Apple Docs查看更多信息

          【讨论】:

            猜你喜欢
            • 2014-03-07
            • 2016-06-07
            • 1970-01-01
            • 2012-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多