在 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标

http://nickcheng.com/post/unique-icons-for-your-app-in-different-state-in-xcode5-debug-release

应用在发布到 App Store 之前, 大家都会把应用通过 Ad Hoc 形式发给内部人员进行小范围的测试, 我们把应用的这个状态称为 Staging. 这些人员大多都没有参与过应用, 目的是用来模拟真实用户的操作行为和流程, 以此来找到一些更不容易发现的 Bug.

前段时间我们在准备发布 NextDay 4.0 的时候, 也是这样. 但问题也随之而来了. 大家的 iPhone 上都装有 App Store 版本的 NextDay, 内部测试的 Ad Hoc 版本装上去以后, 图标与名字都和正式版一样, 很难区分. 而我自己的手机上还有 Debug 版本的应用, 这一下就三个了.

所以我就花时间找了一些方法来让不同版本 (不是版本号, 是 Debug, Staging, AppStore 这样的版本) 的同一个应用有各自不同的 Icon 和名字. 这样就避免了上面碰到的问题. 在这里记录一下, 一个是自己备忘, 另外还可以分享给大家:)

准备工作

首先, 不同版本的应用要有不同的 Bundle ID. 这里推荐 Simon Wolf 的命名方式. 如果你的应用原来的 Bundle ID 是 com.mycompany.myapp, 那么这几个版本你可以这么命名:

  • com.mycompany.myapp.debug Debug (Alpha) 版本
  • com.mycompany.myapp.adhoc Staging (Ad Hoc, Beta) 版本
  • com.mycompany.myapp App Store (Production) 版本

然后对应的 Provisionng Profile 也都要准备好. 不用我说了吧.

接下来准备几个不同的图标. 我是用 Curtis Herbert 修改的 PSD 文件 做的. 效果可以看我的截图.

原始 PSD 来自 appicontemplate.com. 使用方法也在原网站.

设置

接下来就是一步一步的设置了.

Build Configurations

首先是添加 Configurations, 位置见下图所示. 项目之前已经有了 Debug 和 Release 两个配置, 可以分别对应咱们的 Debug 版本和 App Store 版本. 所以咱们只添加一个 Staging 版本就可以了. 我为了能让添加的版本按字母序排列在 Debug 和 Release 中间, 用的名字是 "ForBeta".

这步完成后, 你会在 Build Settings 里看到所有的设置都有了三个子选项, 分别对应三个不同的 Configuration.

Schemes

然后, 我们在项目里需要有两个 Scheme. 这两个 Scheme 在 Debug 时候的行为是一样的, 但在 Archive 的时候, 一个用于 Staging 版本发布内部测试, 一个用于 App Store 发布.

Scheme 的设置入口在菜单上: "Product" -> "Scheme" -> "Manage Schemes". 我的两个 Scheme 命名如图:

对应 App Store 的 Scheme 设置里, Run 和 Test 的 Build Configuration 都使用 Debug, Profile 和 Archive 使用 Release.

对应 Staging (Beta) 的 Scheme 设置里, Run 和 Test 也用 Debug, Profile 和 Archive 使用 ForBeta.

有了这里的设置, 咱们就可以通过切换 Scheme 来 Archive 出分别用于 Ad Hoc 发布和 App Store 发布的 App 了.

App Icon

接着就是 Icon. 现在大家应该都用 Xcode 5 了吧! 既然用了, 那就多用用新功能, Icon 设置这块我使用了 Media Assets. 如果你的老项目还没有启用, 那就麻烦你在对应 Target 的 General 下启用一下.

在 Media Assets 中 (在项目中的默认名字应该是 Images.xcassets), 点击菜单 "Editor" -> "New App Icon", 建立两个新的 App Icon, 分别对应 Debug 和 Staging 版本. 然后把之前准备好的图标分别拖进去. 如图:

设置好 Media Assets 后, 还要在对应 Target 的 Build Settings 里分别设置不同版本使用不同的 App Icon. 如图:

这样设置好, 不同版本的应用就拥有了各自不同的图标了.

Bundle ID

再下来就是按照我们前面定义的 Bundle ID 和各个版本的对应关系来进行设置了.

我们需要在 Build Settings 中定义一个变量. 入口在: "Editor" -> "Add Build Setting" -> "Add User-Defined Setting".

然后在对应 Target 的 Info 里把 Bundle ID 设置为我们刚才定义的变量.

这样, 项目在使用不同的配置文件编译的时候就能分别利用不同的 Bundle ID 了.

App Name

设置了图标, 如果觉得有必要把应用名称也顺便区分一下的话, 也是可以的.

我们需要在 Build Settings 中再定义一个变量. 比如我是这么定义的:

然后在应用名称的设置那里使用这个变量:

经过上面的一系列设置, 我现在在 Xcode 里只需要在左上角简单切换一下 Scheme 就可以很方便的编译出各个我需要的应用版本. 妈妈再也不用担心我发布应用了!

参考

时间: 2024-10-18 21:25:13

在 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标的相关文章

解决Xcode 5下使用SVN出现 The operation couldn’t be completed. (NSURLErrorDomain error -1012.) 问题

解决Xcode 5下使用SVN出现 The operation couldn’t be completed. (NSURLErrorDomain error -1012.) 问题 2014年March月25日 / Linux/Unix / 浏览:264 / 暂无评论 /   使用Xcode5 SVN 出现问题 The operation couldn’t be completed. (NSURLErrorDomain error -1012.) 解决方法: 打开终端 然后输入如下命令 svn l

Xcode环境下OpenGL C++ GLFW开发环境搭建

操作系统版本:MacOS Mavericks 10.9.2 Xcode版本:5.0.1 OpenGL版本:4.10 GLFW版本:3.0.4 一.GLFW编译 1.下载并安装cmake(当前最新版本为2.8.12.2) http://www.cmake.org/cmake/resources/software.html 下载cmake-2.8.12.2-Darwin64-universal.dmg文件安装即可 2.下载GLFW源代码(当前最新版本为3.0.4) http://www.glfw.o

Xcode 7下无法联网问题

Xcode 7下,强制执行HTTPS协议 解决: 1.改协议 或 2.如下图更改plist文件

release下不输出NSLog打印的内容,debug下才输出。

软件运行越来越慢,突然在想,是不是因为NSLog,太多的原因.因为自己总是喜欢用NSLog打印出变量,然后,在进行调试程序,找Bug. 网上查找资料,果然,和这个还是有点关系的. 直接上代码,使其在release下不输出NSLog打印的内容,debug下才输出. 要注意,这部分代码是要写在prefix.pch中的. // 在debug模式下输出NSLog,在release模式下不输出NSLog #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_

如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?

分成两种情况来说明: 如果是在 shell 即: gnome-termial终端中, 来启动或 使用 vim的话, 你是 无法 实现这种需求的: 改变vim中的光标形状 : 在插入状态下显示为 beam, 而在 其他 状态下 为 block? 因为 shell下的vim 其光标 始终是由 shell 来 决定的, 也就是说, vim 不是 独立的程序, 它只是寄人篱下, 所以 shell的光标将始终 由shell 来决定, 跟 vim 一点关系都没有, vim 对光标没有影响, 所以, 在she

XCode环境下的一些基本概念

Workspace:简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的Xcode Project, 以及其他的项目中需要使用到的文件.使用Workspace的好处有,1),扩展项目的可视域,即可以在多个项目之间跳转,重构,一个项目可以使用另一个项目的输出.Workspace会负责各个Project之间提供各种相互依赖的关系;2),多个项目之间共享Build目录. Project:指一个项目,该项目会负责管理生成一个或者多个软件产品的全部文件和配置,一个Project可以包含

Xcode 6 下添加pch头文件

没错了,Xcode 6 有着许多坑,例如新建的工程里没有默认的pch文件,当然本质上应该是为了提高编译的速度,但却让开发略微有点不方便. 话不多说,其实新建很简单 1.先新建一个PCH文件 2.设置头文件位置 3.编译搞定

Xcode 6下的PCH文件

XCode6里, 新建工程默认是没有pch文件的,苹果取消pch文件这一点肯定有它的道理,刚开始很多人可能不适应,如果我们想使用pch文件,需要手动添加,添加步骤如下:(依旧直接上图) 翻译过来 大致就是说 也许是因为组件单一模块的原因,所以 放弃了对的import你不应该在你的prefix代码中放入任何的代码,把他们放在你确实需要放入的文件中.把你的定义放到属于他们的文件中. 尽量不要使用宏定义(define)..除非是非不得已的时候,(这里 插一句 不使用宏定义的原因是 宏定义是在预编译的时

文本框,下拉框,单选框只读状态属性

文本框只读属性:readonly="true" 下拉框只读属性: disabled="disabled" 单选框只读属性: $("#<%=txtIsReply.ClientID%>").click(function () { return false; })