我们可能面临这样的需求——同一系列的iOSApp产品,需要分开发布不同的版本。例如一款幼儿教育类App,需要针对幼儿家长、教师开发不同功能需求的产品;或者一款产品测试的时候一套AppIcon,上线的时候另一套AppIcon。诸如此类,在不同情形使用不同的AppIcon。通常由于这样的系列App功能大同小异,所以会选择在同一个工程中开发。
不同的版本会对应不同的BundleIdentifier,Appicon无可厚非。设置BundleIdentifier还好说,但是设置AppIcon却有很繁复。我不知道您是否遇到过这样的需求,小伙伴们是怎么处理的?
在此之前用到的方法就是在工程中文件路径下建两个文件夹,例如iconPRO、iconDEV,每个文件夹放各自的AppIcon。(请注意,这两个文件夹不要添加到工程中)。每次打包的时候把对应文件夹中的图片copy出来,添加到工程中。
这样的方式,是有些繁复的。有木有通用的解决方式呢?最近对于这些方面的问题作了一些探索。首先要明白一点,在工程中有一个info.plist的文件,在这个文件中Icon files存放了appicon的文件名。通过$(PRODUCT_BUNDLE_IDENTIFIER)可以拿到当前一个应用程序的bundleid。如果文件名能跟bundleid关联起来,这个文件名随bundle而改变,这样似乎可以解决问题。
我们事先把不同版本所需要的appicon放在工程中,例如放在文件夹iconApp,并把它添加到工程中。假如两个版本对应的bundleid为com.owner.weekly和com.owner.daily。
命名规则如下:
添加到工程中(而不是Assets.xcassets中):
然后设置info.plist文件中Icon files.如下:
这样基本的配置就做好了。假如我们现在的bundleid=com.owner.weekly,则在模拟器上的运行效果如下:
如果bundleid=com.owner.daily,则运行如下:
这样一来,我们就可以在设置不同bundleid的时候,自动切换显示相应的AppIcon,不需要再人为去设置AppIcon。如果你也遇到了相同的需求,不妨试一试。