Xcode 项目与 Xcode 工作区 - 差异

标签 xcode

我试图了解 iOS 的整个生态系统如何作品。
到目前为止,我可以为我的大部分问题找到答案(相信我,已经有很多答案了),但对于这个问题,似乎还没有明确的答案。

XcodeProject 和 XcodeWorkspace 文件有什么区别?

  • 他们两个有什么区别?
  • 他们负责什么?
  • 当我在团队中/单独开发我的应用程序时,我应该与他们中的哪一个一起工作?
  • 关于这两个文件还有什么我应该注意的吗?
  • 最佳答案

    我认为您需要了解关于项目结构的三个关键项目:目标、项目和工作区。 目标 详细指定产品/二进制文件(即应用程序或库)的构建方式。它们包括build设置,例如编译器和链接器标志,并定义哪些文件(源代码和资源)实际上属于产品。当你构建/运行时,你总是选择一个特定的目标。

    您可能有几个共享代码和资源的目标。这些不同的目标可能是应用程序的略有不同版本(iPad/iPhone、不同品牌,...)或自然需要访问与应用程序相同的源文件的测试用例。所有这些相关目标都可以分组在 中。项目 .虽然项目包含来自其所有目标的文件,但每个目标都会选择自己的相关文件子集。build设置也是如此:您可以在项目中定义默认的项目范围设置,但如果您的目标之一需要不同的设置,您可以始终在那里覆盖它们:

    Shared project settings that all targets inherit, unless they overwrite it

    所有目标都继承的共享项目设置,除非它们覆盖它

    Concrete target settings: PSE iPhone overwrites the project’s Base SDK setting

    具体目标设置:PSE iPhone 覆盖项目的Base SDK环境

    在 Xcode 中,您总是打开项目(或工作区,但不是目标),并且它包含的所有目标都可以构建/运行,但是没有构建项目的方法/定义,因此每个项目至少需要一个目标才能不仅仅是文件和设置的集合。

    Select one of the project’s targets to run

    选择要运行的项目目标之一

    在很多情况下,项目就是你所需要的。如果您有从源代码构建的依赖项,则可以将其嵌入为 子项目 .子项目可以单独打开,也可以在其 super 项目中打开。

    demoLib is a subprojec

    demoLib 是一个子项目

    如果将子项目的目标之一添加到 super 项目的依赖项中,则子项目将自动构建,除非它保持不变。这里的优点是您可以在同一个 Xcode 窗口中编辑项目和依赖项中的文件,并且在构建/运行时,您可以从项目及其子项目的目标中进行选择:

    Running targets from a subproject

    但是,如果您的库(子项目)被各种其他项目(或准确地说是它们的目标)使用,则将其置于相同的层次结构级别是有意义的——这就是 工作区是给。工作区包含和管理项目,它直接包含的所有项目(即不是它们的子项目)都在同一级别上,它们的目标可以相互依赖(项目的目标可以依赖于子项目的目标,反之则不然)。

    Workspace structure

    工作区结构

    在此示例中,两个应用程序(AnotherApplication/ProjectStructureExample)都可以引用 demoLib 项目的目标。这也可以通过将 demoLib 项目作为子项目包含在其他两个项目中(仅供引用,因此无需重复),但如果您有很多交叉依赖项,工作区更有意义。如果您打开一个工作区,您可以在构建/运行时从所有项目的目标中进行选择。

    Running targets from a workspace

    您仍然可以单独打开您的项目文件,但它们的目标很可能不会构建,因为 Xcode 无法解析依赖项,除非您打开工作区文件。工作区为您提供与子项目相同的好处:一旦依赖项发生变化,Xcode 将重建它以确保它是最新的(尽管我遇到了一些问题,但它似乎不能可靠地工作)。

    您的问题简述 :

    1) 项目包含文件(代码/资源)、设置和从这些文件和设置构建产品的目标。工作区包含可以相互引用的项目。

    2)两者都负责构建您的整个项目,但在不同的层次上。

    3)我认为项目在大多数情况下就足够了。除非有特定原因,否则不要使用工作区。此外,您以后可以随时将项目嵌入到工作区中。

    4)我认为这就是上面的文字是为了……

    3) 有一个备注:CocoaPods ,它会自动为您处理 3rd 方库,使用工作区。因此,当您使用 CocoaPods 时,您也必须使用它们。 (很多人都这样做)。

    关于Xcode 项目与 Xcode 工作区 - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21631313/

    相关文章:

    iphone - 从电话功能 iPhone 应用程序中排除 iPod Touch

    更新启用位码的框架后,IOS 应用程序大小翻了一番

    ios - 找不到 XCTest/XCTest.h 文件 XCode 5.1.1 iOS7

    objective-c - 用未知数量的列填充 NSTableView

    swift - 使用带有自定义参数的协议(protocol)函数

    xcode - Cocoa PreferencePane 用户默认值始终存储在 com.apple.systempreferences.plist 中

    ios - 几次更新后,存档的应用程序不会出现在组织者中

    iphone - 显示 UILabel * 秒;除了 NSTimer 之外还有其他方法吗?

    xcode - 您如何看待 XCode Instruments 中负责内存分配的具体方法?

    objective-c - Xcode Objective-c 编译时条件