Xcode 如何找到隐式目标依赖项?

2023-12-31

Xcode 有时会自动查找依赖项。我认为当我是定义关系的人并且当我变得懒惰时,这是可以的......

但我经常发现自己面临着一个具有多个目标的现有(中型到大型)项目。由于该项目是由其他人制作的,因此我发现很难理解哪些目标取决于什么并非所有关系都是明确的.

Xcode 使用什么规则来查找此类关系?(我希望我能理解这个逻辑run它在我的脑海中,也许可以在将来节省我的时间)或者是什么使得一个目标有资格隐式依赖于另一个目标?

一个目标及其创建的产品可以与另一个目标相关。如果一个目标需要另一个目标的输出才能构建,则称第一个目标依赖于第二个目标。如果两个目标位于同一工作区中,Xcode 可以发现依赖关系,在这种情况下,它会按所需的顺序构建产品。这种关系称为隐式依赖关系。

Source: iOS 开发者库 → Xcode 概念 → Xcode 目标 https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Targets.html


这个答案适用于 Xcode 8.x,我认为适用于 Xcode 9.0。

首先,您需要确保在您尝试构建的方案的“构建”面板中启用“查找隐式依赖项”。

可以通过两种方式使目标“A”“隐式”依赖于目标“B”:

  1. 目标 A 有一个“链接二进制文件与库”构建阶段,该阶段的列表中有一个库,其中包含一样的名字作为 B 的产品。该产品可以位于同一项目中,也可以位于工作区中的另一个项目中。请注意,我说的是“同名”。仅仅因为您从目标 A 选择了 libA.a,并不意味着如果您在不同的目标中有另一个 libA.a 产品,隐式依赖关系将会构建它。详情请参阅下文。
  2. 目标 A 有一个“复制文件阶段”,用于复制文件基本名称通常,“复制文件”构建阶段不能引用与其目标不在同一项目中的文件,但如果您为“复制文件”创建一个虚拟文件,则可以跨项目设置依赖关系复制文件”阶段来复制与 B 的产品同名的文件。例如,如果您有一个包含两个项目 ProjectA 和 ProjectB 的工作区。 ProjectA 具有创建 libA.a 的 TargetA,ProjectB 具有创建 libB.a 的 TargetB。 TargetA 可以通过将“假”零字节文件作为 TargetA 的一部分(碰巧名为 libB.a)来让 TargetB 构建 libB.a,这足以让 libB.a 生成,即使 libB.a 引用了“复制文件”阶段中的 to 是一个与 TargetB 构建的产品输出完全不同的文件。如果您选中“仅在安装时复制”框,Xcode 实际上不会执行复制,但仍会解析依赖关系。实际上,您可以从驱动器中删除您创建的假文件,该文件只是为了在“复制文件”阶段放入一些内容(但您必须将其保留在您的项目中)。

那么为什么会有人想要制作《2》这样的恐怖片呢?我可以想出几个原因。

  1. TargetA 需要 TargetB 复制/生成一些文件,但 TargetB 不会生成要链接到的库。您可以通过让 TargetB 生成一个小型虚拟库来解决此问题,但这可能会因为其他原因而变得痛苦。
  2. 假设我有projectA、targetA和libA.a(以及项目B、C和D的等价物),并且libA.a依赖于libB.a和libC.a,它们都需要首先构建libD.a(可能是一些标头)和/或生成的来源)。您可以使用“与库链接”阶段(也称为解决方案 #1)来完成这一切,但在这种情况下,您最终会在 libA 的最终链接版本中的 libD 中得到 .o 文件的两个副本。如果您做得足够深(例如,一个工作区有 40 个项目,这些项目彼此之间具有不同程度的依赖关系),您很快就会得到巨大的库文件,其中有几个相同的 .o 文件,并且您的链接时间将变得非常可怕。

如果您认为这些都是人为的情况,那么我目前正在将一些遗留代码从一系列显式依赖项移动到隐式依赖项。为什么我要转向隐式依赖?因为 Xcode 中的显式依赖关系需要项目嵌套,一旦获得足够的显式依赖关系,项目浏览器就会变得非常慢,并且您会在 Xcode 中看到很多随机事物的沙滩球。

如果同一工作区中碰巧有两个目标生成具有相同名称的产品并依赖于第三个目标,会发生什么情况?隐式依赖项将选择其中之一。它似乎根据产品的基本名称进行匹配(因此 foo/bar.a 和 baz/bar.a 是相同的),并会选择它找到的第一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 如何找到隐式目标依赖项? 的相关文章

  • 如何将iPhone/iPad应用程序更改为仅iPhone?

    我有点愚蠢 将我的应用程序构建为同时针对 iPhone 和 iPad 而实际上它应该只针对 iPhone 如何更改设置以使构建仅适用于 iPhone 我实际上已经完成了应用程序的编码并准备提交它 所以希望这只是更改一些晦涩的项目设置的情况
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • ios7 navigationController PushViewController 动画错误

    看来我在 navigationController PushViewController 方法中发现了一个错误 为了重新创建它 我采用了示例主详细信息项目并对 didSelectRow method void tableView UITab
  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • iOS 中的构建对象文件扩展名是什么?

    当我在项目中构建java对象类时 将创建带有 class扩展名的构建文件 并且人类不可读 快速构建文件怎么样 example car java gt build gt car class 构建后会是什么 car swift gt build
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if

随机推荐