你的伟大APP的第一个版本V1已经在App Stroe上架了,同时你的设备上也安装了这个版本。现在你开始开发V1.1版本。如果你只是改变了版本号码而保持以前的编译设置,那么当你在你的设备上安装的时候,问题就出现了:它覆盖了以前的老版本V1.
在这篇文章中,我将讲解怎样轻松的让你的同一个应用的2个版本共存于同一个设备,同时我也会讲解如何用2个不同的icons来区分他们。
创建2个不同的App ID
更新:如果你需要用到push Notification和icloud,你需要2个不同的App ID.否则你可以用带两个不同bundle ID的通配符工程。感谢@alloy同学的这个小窍门。
当你安装了一个App,为了确定你是要安装一个新App还是更新一个已经安装的App,设备会比较他们的App ID.
所以第一件要做的事情就是去provisioning center 给你应用的开发版本创建另外一个App ID,这样设备就能够让你的应用的2个版本共存了。
如果你在App Store已经上架的应用用的是这个App ID:com.mycompany.myapp,那么我建议你把新创建的ID命名为:com.mycompany.myapp-beta 或者com.mycompany.myapp-dev
同时你要在那里为新的App ID创建一个provisioning profile.
为开发版本创建一个不同的icon
为了在我的设备上区分2个不同的版本,我用了2个不同的icon,beta版本(新版本)在左上角使用了一个黑黄相间的进度条。
如何在你的设备上让同一个App的两个版本共存?
把你的图标命名为:Icon.png, [email protected], Icon-beta.png, [email protected]
使用不同的构建配置信息
Xcode默认会为你创建2个不同的构建配置:debug和release,我喜欢增加第三个:Appstore.
我是这样使用他们的:
Debug:当我直接用Xcode在我的设备上创建应用
Release:当我把App打包成了一个ipa文件放到我们的空中分发系统(类似testflight但是更简单易用)
Appstore:当我创建提交到AppStore的版本时使用这个配置。
将他们联系起来
用户指定构建设置
现在我们需要设置工程来让它对不同的构件配置使用正确的AppID和icon。
进入工程的Build Settings选项并且滚到最下面,增加一个叫做BUNDLE_IDENTIFIE的用户指定设置(user-defined setting),再增加另外一个命名为APP_ICON_NAME的用户指定设置,参照下面的截图设置每个构建配置:如何在你的设备上让同一个App的两个版本共存?
现在我们需要告诉Xcode在构建应用的时候使用这些设置
info.plist
打开你的工程的info.plist(在Supporting files文件夹下的叫做MyApp-Info.plist)的文件。
在bundle identifier中用${BUNDLE_IDENTIFIER}来替换你当前的bundle identifier。
同样的在iconfiles下面将2个选项替换成${APP_ICON_NAME}@2x.png 和${APP_ICON_NAME}.png
${...}语法是于处理器语法:构件开始的第一个阶段预处理器就会遍历所有的文件并且用设置的值来替换${...}
结论:
这样你就拥有了一个工程会自动在构建测试版本的时候使用测试AppID和icon,在构建AppStore版本的时候使用平常的AppID和icon。
使用预处理器宏你能够在你的代码里使用这些设置项来给不同的配置社会资不同的参数。
你可以更进一步创建更多的构建设置。假设你的App有一个API希望在某些版本下指向生产服务器,在某些版本下又指向开发服务器,你可以使用这个方法来让他们自动指向正确的URL并且给每个版本一个不同的icon!