iOS 3-新建Target管理项目的调试,测试,发布版本。

iOS新建Target来管理项目的调试、测试、发布等不同版本。

应用场景

一个项目,不同环境下的不同版本。(测试,发布,模拟器,真机)

例如,我公司最近老大提出一个设想,希望能让公司项目在模拟器上面跑。但是我们项目中有用到POS机的SDK,不做对应的处理是不可以正常运行到模拟器上的。
我的第一个想法就是从主线拉个分支去做,把对应引用到POS机SDK的地方都删除或者注释掉。很显然,第二天就被否了。O(∩_∩)O哈哈~因为你不可能每天都去更新这个分支。所以在得到老大跟同事的引导之后,还是确实需要用Target去做滴。

官方文档中的介绍
A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. A target defines a single product; it organizes the inputs into the build system—the source files and instructions for processing those source files—required to build that product. Projects can contain one or more targets, each of which produces one product.

The instructions for building a product take the form of build settings and build phases, which you can examine and edit in the Xcode project editor. A target inherits the project build settings, but you can override any of the project settings by specifying different settings at the target level. There can be only one active target at a time; the Xcode scheme specifies the active target.

英文好的同学可能很快就知道了Target的妙用,在一个Xcode工程中,每个Target单独对应一个应用(A target defines a single product),因为我们可以在每个Target中单独设置属于这个Target的配置文件属性。

官方文档地址:《苹果官方文档-Xcode Target部分》
滴"滴"滴"下面开始发车~

创建Target

1、「右键Duplicate-Duplicate Only」复制单个Target 或者 新建Target,然后重新命名

2、修改Target对应生成的「xxx copy.plist」的工程配置文件的名字

3、Target对应「Build Settings」下配置Info.plist路径,或者直接在「General」中选择您对应的info.plist。(建议后者,可视化操作嘿嘿~)

4、因为重新命名了Target的名字,所以需要在「Schemes」中选择「Manage Schemes」删除之前为copy的schemes,然后重新添加当前所有的Target的Schemes。(这个时候有一个注意点!需要勾选添加之后的schemes的「Shared」一项。)

5、配置预编译的宏,这个宏的作用就类似于我们之前在.pch之间用「#if DEBUG- #else- #endif」的DEBUG,我们切换选择项目的「Build Configuration」的时候,NSLog会不同显示。
配置的位置:在「Target-Preprocessor Macros」下的Debug和Release中。宏名字没有特殊要求, 格式有两种,一种为:XXXXXXXXX = 0或者"NEW_TARGET名字" ; 另一种为 xxxxxxxx
6、在类中添加匹配宏代码,区分Target,并且添加属于该Target的代码。方式有三种为:
第一种:

        //#ifdef target1的预编译宏名字
        #if target1的预编译宏名字
           // target1下的特有代码,比如说请求IP地址
        #else
           // 其他target下的特有代码,比如说请求IP地址
        #endif

第二种:

        // #ifdef xxxxxx
        #if xxxxxx == 0 或者 NEW_TARGET名字
         // 该target下的特有代码,比如说请求IP地址
        #elif xxxxxx == 1 或者 NEW_TARGET名字
         // 该target下的特有代码,比如说请求IP地址
        #else
         // 没找到匹配的预编译宏
        #endif

第三种:

        if (xxxxxx == 1 或者 NEW_TARGET名字) { 
          // 该target下的特有代码,比如说请求IP地址
        } else {
          // 其他target下的特有代码,比如说请求IP地址
        }
7、这步骤是可选的,但强烈推荐。如果您希望使开发和生产构建更容易,并且防伪,您应该为每个版本使用单独的图标和启动屏幕。这将使您的测试人员知道他们正在使用哪个应用程序,并希望阻止您发送开发版本。
   我们知道设置应用图标和和启动图片的有两种方式,一种是把图片加到「Assets.xcassets」中,另一种是直接把图片加到项目文件下。我只测试了图片加到「Assets.xcassets」这种,在「Assets.xcassets」创建之后,修改或者不修改图片夹的名字后,直接在「Target-General」中选择对应的图片夹即可。
8、 如果你使用了Cocoapods的话,需要把新的Target添加到podfile文件中。有两种添加方式。
第一种:

    platform :ios, '8.0'
    workspace 'xxxxxxxxx'  
    // 添加第三方框架       
    target 'xxxxxx' do
    pod 'AFNetworking', '3.1.0'
    end
    // 添加的内容和上边的完全一样
    target 'xxxxx' do
    pod 'AFNetworking', '3.1.0'
    end

第二种:直接用link_with关联多个Target

    platform :ios, '8.0'  
    workspace 'xxxxxxxxx'  
    link_with 'target1', 'target2'  
    pod 'xxxxxx'

图片说明

新建target.png
Duplicate only.png
NewAppIDIcon.png
也可以在General中直接选择对应的info.plist.png
build settings里面设置预编译宏,可在代码里直接使用.png
代码中用到之前在Preproessor Macors中设置的预编译的宏.png
image-asset.jpg
新建target之后拖拽新的资源文件的时候.png
注意点,新建Target之后,新拖入项目中的文件,勾选对应需要该文件的Target.

但是做了这么多,还是不能解决我项目有POS机SDK编译不通过的问题,O(∩_∩)O哈哈~
因为General-->Linked Frameworks and Libraries导入了对应的framework 跟 Build Phases-->Compile Sources中有文件引用到那些SDK,需要删掉。。。最终完成了编译及运行。。。
好记性不如烂笔头

如果有什么不对的,请大神们及时纠正.并且赏个 ?? 吧O(∩_∩)O哈哈~

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容