8

我们的命令以前是这样的

xcodebuild -configuration Release -target "xxx" -sdk iphoneos9.0 -scheme "xxx" archive

现在在 Xcode 7 中,我们得到这个错误:

Build settings from command line:
    SDKROOT = iphoneos9.0

=== BUILD TARGET xxx WatchKit Extension OF PROJECT Mobile WITH CONFIGURATION Release ===

Check dependencies
target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphoneos' platform

我们如何指定使用 iOS 9.0 SDK 和 watchos 2.0 SDK?

4

2 回答 2

24

如果你需要一个模拟器构建运行这个:

xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeWithWatchOS2Target -destination 'name=iPhone 6' build

如果你需要一个设备构建运行这个:

xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeWithWatchOS2Target build

诀窍是,对于任何构建,您都需要删除-sdk选项。对于模拟器构建,您需要指定-destination哪个应该是iPhone 6iPhone 6 Plus。对于设备构建,您可以跳过-destination.

于 2015-08-11T23:59:35.393 回答
1

您看到此错误的原因有多种,但归结为依赖关系。如果您选择构建 iOS 目标的方案,那么使用以下命令不会有问题。请注意,我曾经iphoneos自动选择最新的 SDK。

xcodebuild -configuration Release -target "ios" -sdk iphoneos -scheme "ios" build

您遇到的问题是由于对 watchOS 扩展的依赖而触发的。我创建了一个示例项目并添加了一个 watchOS 应用程序。在构建阶段选项卡中,您会在Dependencies部分看到iOS目标依赖于WatchOS目标。

在此处输入图像描述

destination如果您在构建命令中指定 a ,这不是问题。xcodebuild但是,如果您告诉使用特定的 SDK 进行构建,它确实会产生问题。为什么?因为无法使用 iOS SDK 构建 WatchOS 目标。如果您指定iphoneos为 SDK,则构建将失败。

指定目的地可以解决问题,但要知道您正在使用特定的模拟器。如果您在另一台机器上使用相同的命令并且该模拟器不可用,则构建将失败。

老实说,我不知道是否有一条中间道路可以让您选择最新的 SDK,并且仍然为每个目标使用正确的 SDK,而不管依赖关系如何。如果你删除了iOS目标的依赖,那么上面的构建命令应该不会失败。您可能还需要更新您正在使用的方案。

于 2015-12-11T08:26:18.073 回答