我們可能面臨這樣的需求——同一系列的iOSApp產(chǎn)品,需要分開發(fā)布不同的版本。例如一款幼兒教育類App,需要針對(duì)幼兒家長(zhǎng)、教師開發(fā)不同功能需求的產(chǎn)品;或者一款產(chǎn)品測(cè)試的時(shí)候一套AppIcon,上線的時(shí)候另一套AppIcon。諸如此類,在不同情形使用不同的AppIcon。通常由于這樣的系列App功能大同小異,所以會(huì)選擇在同一個(gè)工程中開發(fā)。
不同的版本會(huì)對(duì)應(yīng)不同的BundleIdentifier,Appicon無(wú)可厚非。設(shè)置BundleIdentifier還好說,但是設(shè)置AppIcon卻有很繁復(fù)。我不知道您是否遇到過這樣的需求,小伙伴們是怎么處理的?
在此之前用到的方法就是在工程中文件路徑下建兩個(gè)文件夾,例如iconPRO、iconDEV,每個(gè)文件夾放各自的AppIcon。(請(qǐng)注意,這兩個(gè)文件夾不要添加到工程中)。每次打包的時(shí)候把對(duì)應(yīng)文件夾中的圖片copy出來(lái),添加到工程中。
這樣的方式,是有些繁復(fù)的。有木有通用的解決方式呢?最近對(duì)于這些方面的問題作了一些探索。首先要明白一點(diǎn),在工程中有一個(gè)info.plist的文件,在這個(gè)文件中Icon files存放了appicon的文件名。通過$(PRODUCT_BUNDLE_IDENTIFIER)可以拿到當(dāng)前一個(gè)應(yīng)用程序的bundleid。如果文件名能跟bundleid關(guān)聯(lián)起來(lái),這個(gè)文件名隨bundle而改變,這樣似乎可以解決問題。
我們事先把不同版本所需要的appicon放在工程中,例如放在文件夾iconApp,并把它添加到工程中。假如兩個(gè)版本對(duì)應(yīng)的bundleid為com.owner.weekly和com.owner.daily。
命名規(guī)則如下:

添加到工程中(而不是Assets.xcassets中):

然后設(shè)置info.plist文件中Icon files.如下:

這樣基本的配置就做好了。假如我們現(xiàn)在的bundleid=com.owner.weekly,則在模擬器上的運(yùn)行效果如下:

如果bundleid=com.owner.daily,則運(yùn)行如下:

這樣一來(lái),我們就可以在設(shè)置不同bundleid的時(shí)候,自動(dòng)切換顯示相應(yīng)的AppIcon,不需要再人為去設(shè)置AppIcon。如果你也遇到了相同的需求,不妨試一試。