[HMLY]3.如何使用Xcode Targets管理开发和生产版本?

本文原地址:http://www.appcoda.com/using-xcode-targets/

在开始此教程之前,我们假设你已经完成了应用程序的开发和测试,现在准备提交生产发布。问题是,某些web服务URLs指向测试服务器,而API keys则为测试环境而配置。在提交应用程序给苹果审核之前,你需要修改所有这些API keys和URLs以适应生产环境。这很正常,对吧?但是,除了将这些值在开发和生产环境之间来回更改,是否存在更好的方法来管理开发和生产版本呢?

下面开始我们的教程!

首先,你们中的一些人可能想知道为什么在应用开发时,需要使用两个单独的数据库和环境。

原因是,随着持续不断的构建新的功能或者开发应用,你想确保开发版本和现有版本相互区分。标准软件开发过程旨在针对软件(在我们的案例中,即为iphone应用)的不同版本,使用不同的环境。开发版本软件通常使用一个不同于生产版本的数据库(或者其他系统,比如分析)。这就是为什么我们应该在不同的环境中使用不同的服务器和数据库。开发人员通常在测试期间使用虚拟图像和数据。在测试或开发环境中,通常会使用一些测试数据,比如”test comment“,”argharghargh“和”one more test comment“。很明显,你可不希望真实用户看到这样的消息。如果你的应用使用了分析系统,你可能在测试阶段发送成千上万的事件。同样,你不想在同一个数据库中混合测试数据和生产数据。这就是为什么总是推荐使用相互独立的开发和生产环境。

在使用两个独立的环境时,你的应用需要一种方法来找出它应该连接的环境。一个常用的方法实在主app delegate中定义一个全局变量,将应用初始化为开发或生产模式。

这种方法需要你在每次切换环境时,改变全局变量。尽管还算快速和方便,这种方法也有一些重大的限制。首先,因为我们在开发和生产环境中使用同一个budle ID,你不能在同一个设备上安装两个应用版本。当你想在同一台设备上测试应用的开发版本,但目前仍在使用应用的生产版本时,就非常不方便。此外,这种方法可能会意外地将应用的开发版本发布到 应用商店。如果你亡了改变单一的全局变量,你就会发布错误的应用程序。笔者记得有一次在应用提交之前,忘记改变全局变量,用户获得的就是应用的开发版本。那简直就是一场灾难。

在本文中,笔者将向你展示一个更好的方法,来区分开发和生产版本。

具体来说,我们将在Xcode中创建一个开发Target。此方法同时适用于新的,和现有的大型项目,所以你可以使用一个现有的应用程序,来学习本教程。

通过使用这种方法,应用的生产和开发版本将具有相同的基础代码,但是可以有不同的图标,bundle ID,并只指向不同的数据库。发布和提交过程非常简单。最重要的是,测试人员和经理可以在同一设备上,安装应用程序的两个版本,所以他们完全清楚正在测试的是哪个版本。

如何创建一个新的Target

如何在Xcode中创建一个开发Target?笔者将使用自己的模板项目”todo“,逐步演示开发过程。你可以使用自己的项目,按部就班即可。

  1.在Project Navigator面板中找到项目设置。在tragets区域,右键单击现有target,并选择Duplicate复制现有的target。

  2.Xcode会问你,新target是否为ipad而开发。对于本教程,我们选择”Duplicate Only“。

Note:if your project supports universal devices,Xcode will not promt the above message .注意:如果你的项目支持通用设备,Xcode则不会提示上述消息。

  3.现在,我们有了一个新的target,和一个新的构建scheme,名为todo copy。让我们对它重命名,使其容易理解。

    ·在TARGETS列表中,选择新的target。按enter键来编辑文本,选择一个合适的名字。笔者更喜欢”todo Dev“.可以自由选择任何喜欢的名字。

    ·接下来,选择”Manage Schemes...“,选择你在步骤1中创建的新scheme,按下”Enter“。使cheme名称和显得target名称一样(也就是你为新的target选择的名称。)

  4.步骤4是可选的,但强烈推荐使用。如果你想简单的区分开发和生产版本,你应该为每个版本使用单独的图标和启动屏幕。这将使你的测试人员很清楚地知道他们正在使用哪个应用,防止你发布开发版本的应用。

选择Assets.xcassets,并添加一个新的图标。右击icon>App Icon & Launch Images > New iOS  APP icon。将新图标重命名为”AppIcon-Dev“,然后添加自己的图片。

5.现在回到项目设置,选择你的开发target,并更改bundle identifier。比如,你可以在原ID上简单添加”Dev“。如果你执行了步骤4,确保你把应用图标设置为上一步冲创建的那个。

6.Xcode将为你的target自动添加plist文件(比如todo copy-info.plist),你可以在项目的根目录中找到它。将它从”copy“重命名为”Dev“,并将其保存在原来的plist文件下。这样就能方便管理文件。

7.现在打开开发target的”Build Settings“,滚动到”Packaging“,将值更改为开发Plist文件(比如todo Dev.plist)

8.最后,我们将为生产和开发targets配置一个预处理宏/编译器标记。这样之后就可以在代码中使用标记来检测正在运行的是应用程序的哪个版本。

对于Objective - C项目,选择Build Settings,滚动到Apple LLVM 7.0 - Preprocessing。展开Preprocessor Macors,添加Debug和Release fields变量。对于开发target(比如todo Dev),将值设置为DEVELOPMENT = 1.换句话说,将值设置为 DEVELOPMENT = 0 来表示生产版本。

对于Swift项目,编译器不再支持预处理器指令。相反,它使用编译时属性和构建配置。添加一个标识,来标示开发版本,选择开发target。选择Build Settings和向下滚动到Swift Compiler - Custom Flags部分。将值设置为-DEVELOPMENT来标示target为开发版本。

现在,你已经创建和配置完成开发target,下一步是什么?

使用target和宏

通过配置宏DEV_VERSION,可以在代码中使用它,为项目执行动态编译。下面是一个简单例子:

Object-C

#if DEVELOPMENT
#define SERVER_URL @"http://dev.server.com/api/"
#define API_TOKEN @"DI2023409jf90ew"
#else
#define SERVER_URL @"http://prod.server.com/api/"
#define API_TOKEN @"71a629j0f090232"
#endif

在Objective - C中,你可以使用#if检查DEVELOPMENT的情况,并相应地设置URLs/API keys。

注意:通常情况下,你应该把上面的代码放入app delegate。但实际上取决于你在哪里初始化应用的设置。

现在,当你选择”todo Dev“scheme,并运行这个项目,你将自动创建开发版本,服务器配置设置为开发环境。现在可以向TestFlight或HockeyApp上传开发版本,供测试人员和管理人员进行测试。之后,如果你需要创建一个生产版本,简单地选择”todo“scheme即可。不需要任何代码更改。

管理多个targets的一些提示1.将新文件添加到项目时,别忘了同时选择两个targets,保持代码在两个版本的同步。

2.如果用cocoapods,别忘了将新的target添加到podfile。可以使用link_with来指定多个targets。podfile文件内容:

source ‘https://github.com/CocoaPods/Specs.git‘
platform :ios, ‘7.0‘
workspace ‘todo‘
link_with ‘todo‘, ‘todo Dev‘
pod ‘Mixpanel‘
pod ‘AFNetworking‘  
 
时间: 2024-10-04 04:24:16

[HMLY]3.如何使用Xcode Targets管理开发和生产版本?的相关文章

使用Xcode的Targets来管理开发和生产版本的构建

如何创建一个新的Target 如何在Xcode中创建一个开发的target?我使用示例项目“todo”引导您一步一步完成整个过程..您也可以使用自己的项目并按照步骤: 1. 在项目的导航面板进入项目设置.在Targets区域下,右键单击现有目标并选择 `Duplicate` 复制现有的目标. 2.Xcode会询问你新的target是否是为iPad开发.对于本教程,我们只是选择“Duplicate Only”. 提示:如果您的项目支持通用设备,Xcode不会提示上述消息. 3.现在我们有一个名为`

如何使用Xcode的Targets来管理开发和生产版本的构建

如何创建一个新的Target 所以你如何在Xcode中创建一个开发的target?我使用示例项目“todo”引导您一步一步完成整个过程..您也可以使用自己的项目并按照步骤: 1. 在项目的导航面板进入项目设置.在Targets区域下,右键单击现有目标并选择 `Duplicate` 复制现有的目标. 2.Xcode会询问你新的target是否是为iPad开发.对于本教程,我们只是选择“Duplicate Only”. 提示:如果您的项目支持通用设备,Xcode不会提示上述消息. 3.现在我们有一个

iOS Mobile Development: Using Xcode Targets to Reuse the Code 使用xcode targets来实现代码复用

In the context of iOS mobile app development, a clone is simply an app that is based off another mobile app. A clone usually has more or less the same code base with probably a slightly different functionality. It’s quite common for this app to have

查看Xcode所使用Swift的版本

查看Swift版本 $ xcrun swift -version 查看Xcode位置 $ xcrun --find swift 参考链接:http://stackoverflow.com/questions/30790188/how-do-i-see-which-version-of-swift-im-using-in-xcode

Xcode 向6.0以后版本添加iOS开发空白模板

打开finder,找到应用程序,找到xcode 右键显示包内容.按照如下目录进行查找:Contents ? Developer ? Platforms ? iPhoneOS.platform ? Developer ? Library ? Xcode ? Templates ? Project Templates ? Application 如下图,拷入空白模板后: 因为Xcode5.1.1或低于该版本的部分Xcode都有空模板( Empty Application.xctemplate,路径与

xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是在给项目升级的时候用xcode8.0打包并且上传构建的版本后,在新建版本里看不到新上传的 构建版本 并且在"活动"里也找不到新版本的信息,上传多次还是不行如下图 经查阅资料是 iOS10的权限兼容问题,现有如下解决办法 打开 info.plist 文件添加一下 权限设置(原则上只添加在你的项目中需要的权限设置就可以了) 1.访问麦克风权限:Privacy - Microphone Usage

Xcode静态检查分析代码

Clang静态分析和Instruments来剖析代码有一些不同,Clang更致力于在编译的过程中通过自身的一套判断机制来找出代码中潜在的隐患. 在XCode 3.2之后的版本里,Clang已经被集成进来,Static Analysis 是基于 Clang 的非常好的静态代码分析工具.可以从xcode直接运行Static Analysis 分析器. Static Analysis 优点: 1.使用操作容易. 2.能够在编码阶段,开发自行进行代码检查.早期发现代码隐患. 3.直接分析源代码来发现程序

同时兼容 Xcode 7 和 Xcode 8

做为 iOS 开发者,你肯定会对 iOS 10 中的新特性感到无比兴奋,并迫不及待地想要在应用中进行实践.虽然你想马上就动手以便第一时间就能"上船".但 iOS 10 正式上线却是几个月以后的事情,而且在那之前,你还需要保持每几周就发布一次的频率.这个情况听起来是不是跟你现在的处境很像呢? 当然,目前你还不能用 Xcode 8 来编译需要发布的应用--因为它无法通过 App Store 的验证.所以你需要把项目拆分成两个分支,稳定分支和 iOS 10 开发分支-- 而不可避免地是,这烂

iOS真机调试 for Xcode 5

由于Xcode5的到来,关于iOS软件进行真机调试方面,有了一些变化,苹果在Xcode 5中修改了一些规则,一方面是阻止以往破解的方式进行调试(免证书).另一方面是添加了自动生成证书的功能特性,来加快我们开发者生成一些调试用的证书.免去我们频繁要去苹果开发者网站自己生成.接下来就介绍一下如何在Xcode5中进行真机调试. 一.真机调试所需材料说明 在申请真机调试证书之前,先对苹果真机调试所需的文件进行说明: 苹果真机调试需要证书(Certificates)和描述文件(Provisoning Pr