targets-90

问题描述:如何使用Xcode的Targets来管理开发和生产版本的构建 大家好,小编为大家解答一个有趣的事情的问题。很多人还不知道一个有趣的事情,现在让我们一起来看看吧!

targets是什么意思

targets-90的相关图片

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

下面开始我们的教程!

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

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

enum environmentType {。

case development, production。

let environment:environmentType = .production。

switch environment {。

case .development:。

// set web service URL to development。

// set API keys to development。

print("It's for development")。

case .production:。

// set web service URL to production。

// set API keys to production。

print("It's for production")。

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

在本文中,笔者将向你展示一个更好的方法,来区分开发和生产版本。具体来说,我们将在XCode中创建一个开发Target。此方法同时适用于新的,和现有的大型项目,所以你可以使用一个现有的应用程序,来学习本教程。

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

如何创建一个新的Target

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

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

enter image description here。

Xcode会问你,新target是否为iPad而开发。对于本教程,我们选择 逗Duplicate Only地。

enter image description here。

Note: If your project supports universal devices, Xcode will not prompt the above message.。

注意:如果你的项目支持通用设备,Xcode则不会提示上述消息。

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

Select the new target in the TARGETS list. Press Enter to edit the text and put a more appropriate name. I prefer 逗todo Dev地. You’re free to choose whatever name you like.。

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

Next, go to 逗Manage Schemes…地, select the new scheme you created in step 1 and press 逗Enter地. Make the scheme name the same as the new target name (which is the one you choose for the new target.)。

接下来,选择逗Manage Schemes…地,选择你在步骤1中创建的新scheme,按下逗Enter地。使scheme名称和新的target名称一样(也就是你为新target选择的名称。)

enter image description here。

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

Go to Assets.xcassets and add a new icon. Right click icon > App Icons & Launch Images > New iOS App Icon. Rename the new icon to 逗AppIcon-Dev地 and add your own images.。

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

enter image description here。

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

enter image description here。

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

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

enter image description here。

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

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

enter image description here。

enter image description here。

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

enter image description here。

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

使用target和宏

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

Objective-C:

#if DEVELOPMENT 。

#define SERVER_URL @"" 。

#define API_TOKEN @"DI2023409jf90ew" 。

#else

#define SERVER_URL @"" 。

#define API_TOKEN @"71a629j0f090232" 。

#endif

In Objective-C, you can use #if to check the condition of DEVELOPMENT, and set up the URLs/API keys accordingly.。

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

Swift:

#if DEVELOPMENT。

let SERVER_URL = ""。

let API_TOKEN = "DI2023409jf90ew"。

#else

let SERVER_URL = ""。

let API_TOKEN = "71a629j0f090232"。

#endif

在Swift中,你仍然可以使用#if为动态编译评估构建配置。然而,不是使用# define来定义原始常量,在Swift中,我们简单地使用let来定义全局常量。

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

现在,当你选择逗todo Dev地 scheme,并运行这个项目,你将自动创建开发版本,服务器配置设置为开发环境。你现在可以向TestFlight或HockeyApp上传开发版本,供你的测试人员和管理人员进行测试。

之后,如果你需要创建一个生产版本,简单地选择逗todo地 scheme 即可。不需要任何代码更改。

管理多个Targets的一些提示。

1.当你将新文件添加到项目时,别忘了同时选择两个Targets,保持代码在两个版本中同步。

enter image description here。

2.如果你使用Cocoapods,别忘了将新的target添加到podfile。你可以使用 link_with来指定多个targets。你可以进一步查询Cocoapods documentation了解更多细节。你的podfile看起来应该像这样:

source ''

platform :ios, '7.0'。

workspace 'todo'。

link_with 'todo', 'todo Dev'。

pod 'Mixpanel'

pod 'AFNetworking'。

文/OneAPM(简书作者)

原文链接:

target是什么意思的相关图片

target是什么意思

targets

n. (服务的) 对象( target的名词复数 ); (欲达到的) 目[指]标; (射击的) 靶子; [军事] 军事攻击目标; 。

[网络] 靶标; 研究对象; 针对; 。

[例句]The rebels appear to be making hit-and-run guerrilla style attacks on military targets.。

叛乱分子似乎是在对军事目标实施打了就跑的游击式攻击。

[其他] 形近词: largess pargets forgets。

如何使用 Xcode Targets 管理开发和生产版本的相关图片

如何使用 Xcode Targets 管理开发和生产版本

target

KK: []

DJ: []

n.

1. 靶子;攻击的目标

He missed the target.。

他未击中靶子。

2. (欲达到的)目标,指标

His target is to save $100 a week.。

他的目标是每周储蓄一百元。

3. (批评,嘲笑的)对象[(+for/of)]。

His proposal became the target of criticism.。

他的建议成了批评的目标。

4. 【美】【铁】(道岔上的)信号圆牌,圆板信号机。

5. 小圆盾

vt.

1. 把...作为目标(或对象)。

2. 规定...的指标

The company has targeted a profit for the year.。

公司已经规定了今年的利润指标。

3. 把...对准[(+on/at)]。

4. 挑出

以上结果由 Dr.eye译典通字典 提供。

target是什么意思的相关图片

target是什么意思

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

下面开始我们的教程!

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

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

enum environmentType {。

case development, production。

let environment:environmentType = .production。

switch environment {。

case .development:。

// set web service URL to development。

// set API keys to development。

print("It's for development")。

case .production:。

// set web service URL to production。

// set API keys to production。

print("It's for production")。

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

在本文中,笔者将向你展示一个更好的方法,来区分开发和生产版本。具体来说,我们将在XCode中创建一个开发Target。此方法同时适用于新的,和现有的大型项目,所以你可以使用一个现有的应用程序,来学习本教程。

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

如何创建一个新的Target

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

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

enter image description here。

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

enter image description here。

Note: If your project supports universal devices, Xcode will not prompt the above message.。

注意:如果你的项目支持通用设备,Xcode则不会提示上述消息。

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

Select the new target in the TARGETS list. Press Enter to edit the text and put a more appropriate name. I prefer “todo Dev”. You’re free to choose whatever name you like.。

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

Next, go to “Manage Schemes…”, select the new scheme you created in step 1 and press “Enter”. Make the scheme name the same as the new target name (which is the one you choose for the new target.)。

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

enter image description here。

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

Go to Assets.xcassets and add a new icon. Right click icon > App Icons & Launch Images > New iOS App Icon. Rename the new icon to “AppIcon-Dev” and add your own images.。

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

enter image description here。

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

enter image description here。

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

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

enter image description here。

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

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

enter image description here。

enter image description here。

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

enter image description here。

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

使用target和宏

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

Objective-C:

#if DEVELOPMENT 。

#define SERVER_URL @"" 。

#define API_TOKEN @"DI2023409jf90ew" 。

#else

#define SERVER_URL @"" 。

#define API_TOKEN @"71a629j0f090232" 。

#endif

In Objective-C, you can use #if to check the condition of DEVELOPMENT, and set up the URLs/API keys accordingly.。

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

Swift:

#if DEVELOPMENT。

let SERVER_URL = ""。

let API_TOKEN = "DI2023409jf90ew"。

#else

let SERVER_URL = ""。

let API_TOKEN = "71a629j0f090232"。

#endif

在Swift中,你仍然可以使用#if为动态编译评估构建配置。然而,不是使用# define来定义原始常量,在Swift中,我们简单地使用let来定义全局常量。

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

现在,当你选择“todo Dev” scheme,并运行这个项目,你将自动创建开发版本,服务器配置设置为开发环境。你现在可以向TestFlight或HockeyApp上传开发版本,供你的测试人员和管理人员进行测试。

之后,如果你需要创建一个生产版本,简单地选择“todo” scheme 即可。不需要任何代码更改。

管理多个Targets的一些提示。

1.当你将新文件添加到项目时,别忘了同时选择两个Targets,保持代码在两个版本中同步。

enter image description here。

2.如果你使用Cocoapods,别忘了将新的target添加到podfile。你可以使用 link_with来指定多个targets。你可以进一步查询Cocoapods documentation了解更多细节。你的podfile看起来应该像这样:

source ''

platform :ios, '7.0'。

workspace 'todo'。

link_with 'todo', 'todo Dev'。

pod 'Mixpanel'

pod 'AFNetworking'。

文/OneAPM(简书作者)

原文链接:

Eclipse编译C语言生成的格式问题

target

[英][ˈtɑ:gɪt][美][ˈtɑ:rgɪt]。

n.(服务的)对象;

目标;

(射击的)靶子;

目的;

vt.瞄准;

把…作为攻击目标;

第三人称单数:targets过去分词:targetedtargetted复数:targets现在进行时:targettingtargeting过去式:targetedtargetted。

以上结果来自金山词霸

例句:

1.

Canada's

energy

sector

is

another

target.

加拿大能源行业是另一个目标

-----------------------------------。

如有疑问欢迎追问!

满意请点击右上方【选为满意回答】按钮。

原文地址:http://www.qianchusai.com/targets-90.html

tan^3xsecx不定积分

tan^3xsecx不定积分

范冰冰书法-80,范冰冰书法天下第一鸡

范冰冰书法-80,范冰冰书法天下第一鸡

狙击精英V2按R,狙击精英v2全收集图文

狙击精英V2按R,狙击精英v2全收集图文

seducer,Seducers in Ecuador

seducer,Seducers in Ecuador

jd5196航班座位图,jd5511航班座位图

jd5196航班座位图,jd5511航班座位图

白鹿仓游玩攻略,白鹿仓旅游景区营业时间

白鹿仓游玩攻略,白鹿仓旅游景区营业时间

microplastics-100

microplastics-100

写一段自己生活经历,以自己生活经历的作文200字左右

写一段自己生活经历,以自己生活经历的作文200字左右

中国银行是国企吗,中国银行是国企吗是公务员吗

中国银行是国企吗,中国银行是国企吗是公务员吗

遇到不顺心的事的句子,遇到不顺心的事怎么发朋友圈

遇到不顺心的事的句子,遇到不顺心的事怎么发朋友圈