2012-04-06 105 views
11

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

+2

由于iOS的'10.3'这是可能的!看看这个答案:http://stackoverflow.com/questions/41950994/is-this-possible-to-apply-the-alternative-icon-to-the-ios-application – KlimczakM 2017-03-30 12:16:58

回答

13

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

+0

这是否也适用于内部应用程序,而不是通过公共App Store发布的应用程序? plist是不可变的吗? – 2015-02-03 23:25:00

0

恐怕不是;很确定应用程序图标不允许有条件地更改。

0

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

-1

我不同意上面的所有答案。 请尝试应用程序“OneTap”,它会让你自己的图标你的新应用程序。 OneTap应用程序在Itune上免费。

+3

我相信很多人有兴趣,如果这是可能的。请保留一个有效的URL链接或解决方案的源代码。 – Vincent 2013-10-21 12:23:21

+1

这是不可能的! OneTap不会更改其自己的AppIcon。它只是打开Safari与选定的图像和用户应按保存到主屏幕。在此之后,您可以点击这个新的应用程序图标,将打开Safari浏览器,将您重定向到OneTap应用程序 因此,以编程方式更改应用程序图标是不可能的 – AlexPrinceton 2014-05-08 08:19:43

3

不,绝对不是。应用程序包的这一部分是只读的,并且还有代码签名。

有关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和网页剪辑不会编程更改应用程序包中的图标。

9

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

您可以使用

setAlternateIconName(_:completionHandler:) 

iOS的10.3出来和Xcode 8.3。

10.3+

更新:

用法很简单,关键是要找出的plist用法和注意,你不能从xcassets加载资产(至少对我来说没有工作)。您需要将图标文件添加到项目中,并选择180x180图像以提高质量。

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

最后一件事情是,当您更改按钮上的图标时,会弹出一个警报窗口,其中显示“您已更改”IcoTest“的图标。

enter image description here

//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> 
+0

尝试扩展您的答案。你还没有解释过这是UIApplication的一种方法,或者如何设置plist或任何东西。只是说'调用这个方法'对任何人都没有用。 – dlbuckley 2017-01-25 15:19:41

+0

我想与大家分享这个令人兴奋的消息。我会和我一样分享一下如何做。很伤心这对你来说还不够。 – ymutlu 2017-01-25 18:29:18

+0

这是令人兴奋的消息,你是正确的。但是你的回答并不能告诉我们如何使用这个新功能的全部内容,它的含义和实现细节。我投下了答案,因为就目前而言,这仅仅是为了获得选票而不是帮助任何人。如果你修改你的答案以充分解释功能,那么我会高兴地投票它:) – dlbuckley 2017-01-26 09:51:16

1

的更新:因为iOS的10.3可以由具有在info.plist中定义的备用图标更新的应用图标。

多见于Apple Docs

相关问题