写在前面 : 从项目中遇到一些问题, 简单总结一下.来个图感受下
------简单介绍一下------
- project就是一个项目,或者说工程,一个project可以对应多个target(你看看上面的图)
- targets之间完全没有关系。但target和project有关系,target的setting会从project settings中继承一部分(看图2)
- Target指定了哪些内容? 3.1. Build Phases Target Dependencies Target依赖,某些Target可能依赖某个Target输出的值,这里设置依赖 Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件 Compile Sources 是指将有哪些源代码被编译 Link Binary With Libraries 是指编译过程中会引用哪些库文件
3.2. Info 这个Info.plist文件内定义了一个iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等等.每一个Target都能设置不同的------如何创建一个Targets?------
创建Target版本 (cimmand + D)
Xcode 会询问你这个 target 是不是针对于 iPad 开发的。 “Duplicate Only” 的意思很明显了吧。 提示:如果你的项目支持通用设置,则 Xcode 不会提示上面的消息。
- 现在我们有了一个名为 DY Copy, 的新 target 和构建 scheme 。我已经重命名为DYTest了。接下来,来到 “Manage Schemes…”,改名 !
- 理论上我们应该区分开发版跟生产版的应用,所以我们应该提供不同的应用图标和启动界面。这可以使测试更加清楚他们现在使用的版本,并且可以防止我们提交开发版本的应用到商店中。 :grinning: 选中 Assets.xcassets 然后添加新的 App 图标。选择 icon > App Icons & Launch Images > New iOS App Icon. 将新图标命名为 “AppIcon-Test” 并且添加你需要的图片。然后你肯定要配置一下.
- 配置一下项目(Info, Build Setting等) 现在回到项目设置,选择开发版的 target 然后修改 bundle ID。可以简单地在原来的 ID 上添加一个 “Test” 后缀。 Xcode 会自动为新的 target 创建一个 plist 文件(一般命名为 todo copy-Info.plist)。可以在项目的根目录下找到这个文件。将 “copy” 修改为 “Test”,然后将它放到原来的 plist 文件下方。这样可以更方便我们对文件进行操作。
- 现在选择开发版 target 下的 “Build Settings”,滚动到 “Packaging”,然后修改指定 plist 文件为开发版 plist(即刚刚的 todo Test.plist)
(重要) 最后,为生产版和开发版 target 同时设置一个预处理宏和编译器标志。这样在之后的开发中我们就可以在代码中使用这个标识来检测当前运行的应用是哪个版本。 对于 Objective-C 项目,来到 Building Settings,滚动到 Apple LLVM 7.0 - Preprocessing 。展开 Preprocessor Macros 并且为 Debug 和Release 添加一个变量。对于开发版 target(即 todo Test),设置变量的值为DEVELOPMENT=1 (校对注:等号两边不能有空格)。相对地,设置开发版 target 的值为 DEVELOPMENT=0。
在开发中,就可以利用这个宏了,例如 :
#if DEVELOPMENT // 这是正式版咯 #else // 这是开发版咯 #endif
这里补充一种方法 ,
Xcode中可以利用Compiler Flags来设置宏
可以通过设置Compiler Flags来定义宏,然后就可以在代码中使用这些宏,来进行条件编译的操作。有三种方式设置:// 在Target>Build Setting>Custom Compiler Flags>Other C Flags OTHER_CFLAGS (Other C Flags) // 在Target>Build Setting> Preprocessing > Preprocessor Macros GCC_PREPROCESSOR_DEFINITIONS (Preprocessor Macros) // 在Target>Build Setting> Packaging > Info.plist Preprocessor Definitions INFOPLIST_PREPROCESSOR_DEFINITIONS (Info.plist Preprocessor Definitions)
就像上图 , 某个Target中设置了,这个宏, 后面我就用这个宏来判断,究竟是哪个Target了.// 同属于生产环境 #ifdef LIFEPROJECT // 这里属于life的 #else // 这里属于不是life的 #endif
------一些注意事项 : ------
当为项目添加新文件时,不要忘记同时勾选多个 target 来保持各个 target 中的代码一致。
如果你的项目中使用了 Cocoapods,不要忘记在 podfile 中增加新的 target。我们可以使用 link_with
来指定多个 target。可以在 Cocoapods 文档中找到更详细的内容 。现在 Podfile 看起来应该是这样的xcodeproj '/Volumes/MYGIT/DY/DY/DY.xcodeproj' platform :ios , ‘7.0’ workspace 'DY' // 这个 link_with 'DY', 'DYTest' // 这个 pod ‘AFNetworking’, ‘> 3.0’ pod 'Masonry', '0.5.3' pod 'RDVTabBarController', '~> 1.1.9' pod 'MBProgressHUD', '~> 0.9.2' pod 'MJExtension', '~> 3.0.10' pod 'MJRefresh', '~> 3.1.0' pod 'SDWebImage', '~> 3.7.5'
- 如果使用了持续集成系统,比如 Travis CI 或 Jenkins ,不要忘了每个 target 的构建和交付都要配置。
链接:http://www.jianshu.com/p/e304247ede59
來源:简书
本文地址:http://blog.csdn.net/zhaoyabei/article/details/45396913 转载注明出处
可以看到已达到想要的效果,总的来说,选中一个Target后可以更改与之相关的各种属性,如Info、Build Setting、Build Phases等,来生成不同的app。本文中提到链接:
本文地址:http://blog.csdn.net/zhaoyabei/article/details/45396913 转载注明出处
可以看到已达到想要的效果,总的来说,选中一个Target后可以更改与之相关的各种属性,如Info、Build Setting、Build Phases等,来生成不同的app。本文中提到链接:
Target简介
多个Target的使用场景
Target的使用使用Xcode创建工程时默认的设备是iPhone,并且默认选中Include Unit Tests(单元测试)和Include UI Tests(UI测试), 创建成功后可看到四个文件夹 (工程名字、TestTests、TestUITests、Products),在开发中一般都是关注在工程名字下的文件家,对于其他文件夹一直没有在意过,现就研究一下
工程目录:四个文件夹(3个Target文件夹:(工程名字、单元测试、UI测试)、Products),从下面第二张图中可以得知单元测试和UI测试都在TARGETS下面,那他们也是Target,从图一可以得知前三个文件夹,每个文件夹对应一个Target,同时也对应一个Product的(Products目录下有三个文件),每个Target文件夹都是真实文件夹并且每个下面都有一个Info.plist,这说明他们可以独立管理
———–
在工程中,一个Target对应一个Product, 一个Project包含多个Target,Target中的Build Settings会继承自Project的Build Settings
在中国开发一般都很少进行单元测试,对于iOS来说我在学习过程中从来都没有接触过单元测试,一次都没有接触过,都是关注最上面那个Target文件夹。
多个Target的使用场景
- 通常创建工程的时候默认的Devices是iPhone,如果公司刚开始只开发了iPhone设备上的App,后来想开发iPad上的App,而iPad上的App和iPhone上的App功能界面有很多相似之处,那么如何开发iPad上的App呢?复制之前的App对应的Target命名为iPad,然后在iPad对应的Target上进行开发
- 添加其他工程到当前工程
- 添加静态库
- 版本控制(最新版本、测试版本、生产版本): 比如为了防止测试人员混淆App是测试版本还是生产版本,可以使用不同的App的名字和不同的App Icon加以区分
Target的具体使用
- 通过复制某个Target来创建一个新的Target, 选中第一个Target,然后右键,Duplicate,弹出一个框询问你是只是仅仅复制,还是复制并转成iPad,这里选择的是Duplicate Only,复制成功后可以看到在TARGETS中多了一个 Test copy, 在Products文件夹中也多了一个Test copy.app, 工程根目录下多了一个Test copy-Info.plist文件
2、看到Target的名字带有copy不爽,给她重命名,双击即可重命名,重命名后可以看到Products文件下对应的Test copy.app 的名字随着改变,继续重命名Test copy-info.plist文件,这还没有完,选择Product—>Scheme—>Manage Schemes,双击选中的Scheme,修改Scheme对应的名字,修改新的Target对应的Build Settings—> Packaging—>Info.olist File 对应的新的plist名字
3、修改每个Target对一个的plist文件:Info.plist(Test), Test2-Info.plist(Test2) 中的Bundle display name(没有就添加) 和 Bundle identifier
4、分别选中每个Scheme,然后运行,此示例完成了同一个工程,打出了两个App,名字不一样
5、同理:也可以对App Icon和Launch Image 做不同处理
选中Assets.xcassets–>右键–> App Icons & Launch Images —> New iOS App Icon 并重命名为AppIcon-Test2, 然后分别为AppIcon和AppIcon-Test2添加对应的图标
修改每个Target中的Build Settings中的App Icon 对应的name
运行效果如图:
6、同理启动图也是一样操作
7、当添加新的Target的时候,在创建类或其他文件时,在Targets中会多出对应的Target,注意你要选中放到那个Target中,还是都放
如果使用了Cocoapods,在Podfile中需要指明target,可以使用link_with同时指定多个Target, 例如 link_with ‘TargetName’, ‘TargetName2’
本文地址:http://blog.csdn.net/zhaoyabei/article/details/45396913 转载注明出处
可以看到已达到想要的效果,总的来说,选中一个Target后可以更改与之相关的各种属性,如Info、Build Setting、Build Phases等,来生成不同的app。
本文中提到链接: