我试图了解iOS的整个生态系统是如何工作的 到目前为止,我可以为我的大多数问题找到答案(相信我,已经有很多问题了),但对于这个问题,似乎还没有明确的答案
iOS
XcodeProject和XcodeWorkspace文件之间的区别是什么?
关于项目结构,我认为你需要了解三个关键项:目标, 项目和工作区。目标详细指定产品/二进制文件(即应用程序或库)是如何构建的。它们包括构建设置,例如编译器和链接器标志,并定义哪些文件(源代码和资源)实际上属于产品。在构建/运行时,总是选择一个特定的目标。
您可能有几个共享代码和资源的目标。这些不同的目标可以是应用程序的稍微不同的版本(iPad/iPhone,不同的品牌,…),或者自然需要访问与应用程序相同的源文件的测试用例。所有这些相关的目标可以被组合在项目中。虽然项目包含来自所有目标的文件,但每个目标选择自己的相关文件子集。构建设置也是一样:你可以在项目中定义默认的项目范围设置,但如果你的一个目标需要不同的设置,你总是可以在那里覆盖它们:
所有目标继承的共享项目设置,除非它们覆盖它
具体目标设置:PSE iPhone覆盖项目的Base SDK设置
Base SDK
在Xcode中,你总是打开项目(或工作区,但不是目标),它包含的所有目标都可以构建/运行,但没有构建项目的方法/定义,因此每个项目都需要至少一个目标,而不仅仅是文件和设置的集合。
选择一个要运行的项目目标
在很多情况下,项目就是你所需要的。如果你有一个从源代码构建的依赖项,你可以将它嵌入为子项目。子项目可以单独打开,也可以在它们的超级项目中打开。
demoLib是子项目
如果您将子项目的一个目标添加到超级项目的依赖项中,子项目将自动构建,除非它保持不变。这样做的好处是,你可以在同一个Xcode窗口中编辑项目和依赖项的文件,当你构建/运行时,你可以从项目及其子项目的目标中选择:
然而,如果你的库(子项目)被各种其他项目(准确地说,是它们的目标)使用,将其置于相同的层次结构级别是有意义的——这就是工作区的作用。工作区包含并管理项目,它直接包含的所有项目(即,不是它们的子项目)都在同一级别上,它们的目标可以相互依赖(项目的目标可以依赖子项目的目标,但反之则不然)。
工作空间结构
在这个例子中,两个应用程序(AnotherApplication / ProjectStructureExample)都可以引用demoLib项目的目标。这也可以通过将demoLib项目作为子项目包含在其他两个项目中(它只是一个引用,所以不需要重复),但如果你有很多交叉依赖,工作区更有意义。如果您打开一个工作区,您可以在构建/运行时从所有项目的目标中进行选择。
你仍然可以单独打开你的项目文件,但它们的目标很可能不会构建,因为Xcode无法解析依赖关系,除非你打开工作空间文件。工作区给了你和子项目一样的好处:一旦依赖项发生变化,Xcode会重新构建它,以确保它是最新的(尽管我在这方面遇到过一些问题,它似乎不可靠)。
简单地回答你的问题:
1)项目包含文件(代码/资源)、设置和从这些文件和设置构建产品的目标。工作区包含可以相互引用的项目。
2)这两个人都负责构建你的整个项目,但在不同的层面上。
3)我认为大多数情况下有项目就足够了。除非有特殊的原因,否则不要使用工作区。此外,您还可以在以后将项目嵌入到工作区中。
我认为这就是上面这篇文章的意义所在。
有一个注释3):CocoaPods,自动为你处理第三方库,使用工作区。因此,当你使用CocoaPods(很多人这样做)时,你也必须使用它们。
CocoaPods
在短暂的
当我使用CocoaPods开发iOS项目时,有一个.xcworkspace文件,你需要用与CocoaPods相关的.xcworkspace文件打开项目。
.xcworkspace
但是当你用.xcworkspace文件Show Package Contents时,你会找到contents.xcworkspacedata文件。
Show Package Contents
contents.xcworkspacedata
.
<?xml version="1.0" encoding="UTF-8"?> <Workspace version = "1.0"> <FileRef location = "group:BluetoothColorLamp24G.xcodeproj"> </FileRef> <FileRef location = "group:Pods/Pods.xcodeproj"> </FileRef> </Workspace>
注意这一行:
location = "group:BluetoothColorLamp24G.xcodeproj"
.xcworkspace文件引用了.xcodeproj文件。
.xcodeproj
开发环境:
macOS 10.14 Xcode 10.1
Xcode工作区vs项目
它们之间有什么不同?
Workspace是一组项目
Workspace
他们负责什么?
Workspace负责项目之间的依赖关系。
Project
当我在团队/独自开发我的应用程序时,我应该与他们中的哪一个一起工作?
你的选择应该取决于你的项目类型。例如,如果你的项目依赖于CocoaPods依赖管理器,它会创建一个工作空间。
关于这两个文件还有什么需要我注意的吗?
cross-project references<一口>[对]< /一口>
cross-project references
[Xcode组件]