iOS - Xcode -Target , PROJECT 区别

1 篇文章 0 订阅
1 篇文章 0 订阅

文/travin(简书作者)
原文链接:http://www.jianshu.com/p/e304247ede59
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

--------------------------------------------------------------------------------------------------------------------------

写在前面 : 从项目中遇到一些问题, 简单总结一下.来个图感受下


图1 : 一份代码, 六份Tatgets

------简单介绍一下------

  1. project就是一个项目,或者说工程,一个project可以对应多个target(你看看上面的图)
  2. targets之间完全没有关系。但target和project有关系,target的setting会从project settings中继承一部分(看图2)

    图2 : project有BuildSetting


    图2 : Targets , 这里的Setting会继承Project的
  3. Target指定了哪些内容?
    3.1. Build Phases
    Target Dependencies Target依赖,某些Target可能依赖某个Target输出的值,这里设置依赖
    Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件
    Compile Sources 是指将有哪些源代码被编译
    Link Binary With Libraries 是指编译过程中会引用哪些库文件

    图3 : Build Phases

    3.2. Info
    这个Info.plist文件内定义了一个iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等等.每一个Target都能设置不同的

------如何创建一个Targets?------

  1. 创建Target版本 (cimmand + D)


    创建版本
  2. Xcode 会询问你这个 target 是不是针对于 iPad 开发的。 “Duplicate Only” 的意思很明显了吧。
    提示:如果你的项目支持通用设置,则 Xcode 不会提示上面的消息。


    询问是否支持ipad
  3. 现在我们有了一个名为 DY Copy, 的新 target 和构建 scheme 。我已经重命名为DYTest了。接下来,来到 “Manage Schemes…”,改名 !



    Manage Schemes
  4. 理论上我们应该区分开发版跟生产版的应用,所以我们应该提供不同的应用图标和启动界面。这可以使测试更加清楚他们现在使用的版本,并且可以防止我们提交开发版本的应用到商店中。 :grinning:
    选中 Assets.xcassets
    然后添加新的 App 图标。选择 icon > App Icons & Launch Images > New iOS App Icon. 将新图标命名为 “AppIcon-Test” 并且添加你需要的图片。然后你肯定要配置一下.

    添加图片


    配置
  5. 配置一下项目(Info, Build Setting等)
    现在回到项目设置,选择开发版的 target 然后修改 bundle ID。可以简单地在原来的 ID 上添加一个 “Test” 后缀。
    Xcode 会自动为新的 target 创建一个 plist 文件(一般命名为 todo copy-Info.plist)。可以在项目的根目录下找到这个文件。将 “copy” 修改为 “Test”,然后将它放到原来的 plist 文件下方。这样可以更方便我们对文件进行操作。

    自动生成的Plist
  6. 现在选择开发版 target 下的 “Build Settings”,滚动到 “Packaging”,然后修改指定 plist 文件为开发版 plist(即刚刚的 todo Test.plist)

  7. (重要) 最后,为生产版和开发版 target 同时设置一个预处理宏和编译器标志。这样在之后的开发中我们就可以在代码中使用这个标识来检测当前运行的应用是哪个版本。
    对于 Objective-C 项目,来到 Building Settings,滚动到 Apple LLVM 7.0 - Preprocessing
    。展开 Preprocessor Macros 并且为 DebugRelease 添加一个变量。对于开发版 target(即 todo Test),设置变量的值为DEVELOPMENT=1
    (校对注:等号两边不能有空格)。相对地,设置开发版 target 的值为 DEVELOPMENT=0。


    其他版本同理
  8. 在开发中,就可以利用这个宏了,例如 :

    #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)

设置了LIFEORIJECT


就像上图 , 某个Target中设置了,这个宏, 后面我就用这个宏来判断,究竟是哪个Target了.

// 同属于生产环境
#ifdef LIFEPROJECT
    // 这里属于life的
#else
    //  这里属于不是life的
#endif

------一些注意事项 : ------

  1. 当为项目添加新文件时,不要忘记同时勾选多个 target 来保持各个 target 中的代码一致。


  2. 如果你的项目中使用了 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'
  3. 如果使用了持续集成系统,比如 Travis CI Jenkins ,不要忘了每个 target 的构建和交付都要配置。


文/travin(简书作者)
原文链接:http://www.jianshu.com/p/e304247ede59
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Xcode中,project 指的是单个应用程序或者库的开发工程,它包含了所有的源代码、资源文件、配置等。workspace 则是一个工程集合,它可以包含多个 project,常用于在同一个界面中管理多个相关的工程。 ### 回答2: Xcode是苹果公司开发的一款集成开发环境(IDE),用于开发iOS、iPadOS、macOS和watchOS应用程序。在Xcode中,有两个重要的概念:project(项目)和workspace(工作区)。 1. Project(项目):一个project代表一个独立的应用程序或库。它包含了应用程序的源代码文件、资源文件、配置信息等等。一个project可以包含多个target,每个target代表了一个不同的构建版本,比如开发版本、上线版本等等。项目中的修改仅对该项目内部生效。 2. Workspace(工作区):工作区是用于组织多个相关的项目的容器。它可以包含一个或多个project,并且支持在这些project之间共享文件和配置。通过使用工作区,我们可以在一个集成的界面中同时打开多个项目,方便进行跨项目的操作和协同开发。在工作区中可以添加或移除项目,也可以方便地在项目之间进行导航和搜索。 简而言之,project是用于管理单个应用或库的文件、设置和构建配置,而workspace是用于管理多个相关项目的容器,方便在一个集成的开发环境中进行跨项目的协同开发和操作。同时,工作区还提供了更方便的导航和搜索功能,使得开发者可以更高效地处理多个项目。 ### 回答3: Xcode中的project(项目)和workspace(工作区)是两种不同的概念和功能。具体区别如下: 1. Project(项目)是指一个完整的开发项目,包含了所有用于构建和管理应用程序的资源文件,比如源代码、图像、音频和其他资产。一个项目通常对应一个应用程序或一个框架。 2. Workspace(工作区)是指一种用于组织和管理多个相关项目的容器。工作区使得开发者可以在同一个Xcode窗口中同时打开、编辑和构建多个项目,方便协同开发和项目组织。 具体区别如下: 1. 组织结构:Project(项目)是一个独立的实体,包含了项目所需的所有资源文件和设置。而Workspace(工作区)则是一个容器,可以包含多个相关的项目。 2. 编译和构建:在Xcode中,Project可以被编译和构建成最终的应用程序或框架;而Workspace本身不能被编译和构建,它只是用于管理和组织项目。 3. 依赖管理:Project(项目)可以指定依赖关系,引入其他项目或框架作为依赖;而Workspace可以集成多个项目,并自动管理它们之间的依赖关系。 4. 工作流程:在一个项目中,开发者通常会专注于一个具体的任务,比如编写代码、调试或构建。而在Workspace中,开发者可以同时处理多个项目,方便协同开发和管理项目之间的依赖关系。 总之,Project(项目)是一个独立的开发单位,包含了项目所需的资源和设置;而Workspace(工作区)是一个用于组织和管理多个项目的容器。使用Workspace可以方便地进行项目协同开发和管理项目依赖关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值