【问题标题】:xcodebuild does not install into applications folderxcodebuild 未安装到应用程序文件夹中
【发布时间】:2015-11-27 21:49:47
【问题描述】:

我有一个带有两个可执行目标的 XCode 项目,我将它们用于我自己的工作(也就是说,我不出售或发布应用程序,但它们对我来说仍然很重要),这取决于一个外部项目。到目前为止,构建应用程序并安装到 /Applications 文件夹中没有问题。我所做的是进入命令行并输入:

sudo xcodebuild -scheme Trainer install

这会将目标 Trainer 安装到 Applications 文件夹中,并且可以从那里运行应用程序。如果我尝试使用 -target Trainer 指定目标,它将不起作用,因为它不会在外部项目中找到依赖项。不管怎样,自从上次成功后,发生了两件事:

  • 我已升级到 OS X 10.11
  • 我已将 XCode 升级到版本 7.1.1 (7B1005)

无论出于何种原因,xcodebuild 都不再将构建的产品安装到 /Applications 文件夹中。现在使用 xcodebuild 构建时,构建日志的最后几行是:

Touch /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/BuildProductsPath/Release/Trainer.app.dSYM
cd /Users/pbholmen/Projects/SoundSample
/usr/bin/touch -c /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/BuildProductsPath/Release/Trainer.app.dSYM

RegisterWithLaunchServices /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/InstallationBuildProductsLocation/Applications/Trainer.app
cd /Users/pbholmen/Projects/SoundSample
builtin-lsRegisterURL /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/InstallationBuildProductsLocation/Applications/Trainer.app

** INSTALL SUCCEEDED **

我试图简单地将它构建的 Trainer.app 复制到 /Applications 文件夹中,但如果我双击它,它就不会运行。当然,在 XCode 中构建和运行应用程序时,应用程序可以使用“调试”和“发布”配置。

当它确实工作时,这将是构建日志的最后几行(在终端中):

Touch build/Release/Trainer.app.dSYM
cd /Users/pbholmen/Projects/SoundSample
/usr/bin/touch -c /Users/pbholmen/Projects/SoundSample/build/Release/SoundSample.app.dSYM

RegisterWithLaunchServices /Applications/Trainer.app
cd /Users/pbholmen/Projects/SoundSample
builtin-lsRegisterURL /Applications/Trainer.app

** INSTALL SUCCEEDED **

如果我尝试从 XCode 中进入构建日志,找到它放置构建的位置,然后在 Finder 中移动到该位置并从 XCode 外部启动应用程序,这也不起作用。

在这里您可以看到我的目标部署构建设置:

Build settings

在“部署位置”下,我尝试了“是”和“否”,在“OS X 部署目标”下,我尝试了“OS X 10.10”和“OS X 10.11”。以及两者的所有四种组合。

【问题讨论】:

  • 使用archive 并从那里安装怎么样?
  • 谢谢。我已经尝试过了,它以前不能工作,但现在可以工作了,在我设置了我的目标所依赖的框架的部署位置之后,该框架位于不同的项目中。所以,我现在可以安装它,但我希望有一种方法可以通过命令行(更快)来完成,所以我会保持我的问题开放。
  • 如果你想管理 Xcode 项目依赖项,那么听起来你需要创建一个 Xcode 工作区并构建它。
  • 感谢您的帮助。我已经将外部项目添加到我的主项目中,这也应该可以工作。我现在已经弄清楚了问题所在,会写一篇文章通知其他读者。

标签: xcode macos


【解决方案1】:

经过几个小时的折腾,我终于找到了答案。首先,命令

sudo xcodebuild -scheme Trainer install

错了。这是一种解决方法,因为我无法让 XCode 从命令行管理我的外部依赖项,即使它们在 XCode 中被正确管理。对于项目的主要目标以外的目标,正确的调用是

sudo xcodebuild -target Trainer install

以前,第一次调用会起作用,即使方案并不真正包含“安装”操作,也会安装产品。 XCode 7.1 显然不再如此。我以前不能使用-target 而不是-scheme 的原因是因为我的目标依赖于另一个项目中的框架,该框架已添加到我的主项目中(添加了外部 project ,而不仅仅是框架)。在我的主项目中正确设置了所有依赖项,并且从命令行它仅在指定方案时才起作用,而不是在指定目标时。在指定 -target 的情况下运行 xcodebuild 时,xcodebuild 不会在外部项目(Swift 框架)中找到模块。

我现在已经找到了原因。包含外部框架的项目未正确设置。它被设置为将框架安装到虚假位置(/tmp/ProjectName.dst/Library/Frameworks,这是默认位置)。此外,我的主项目需要将 /Library/Frameworks 添加到框架搜索路径中。似乎当项目在 XCode 中构建或用于归档等时......库和可执行文件被构建到与系统本身分开的“私有”文件夹结构中。但是,当运行 xcodebuild install 时,它会尝试将外部框架安装到适当的系统文件夹中,并将其链接到那里。因此,在 XCode 中运行的设置在运行“xcodebuild”时可能不起作用。

编辑:现在可以使用,但 StackOverflow 不会让我在两天前将其标记为正确。

【讨论】:

  • 我可以确认 Xcode 8.2.1 中方案和目标之间的这种行为仍然相同,即使您已将“安装构建产品位置”设置为 /
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 2015-07-21
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多