使用 xcodebuild 构建不同的平台

Using xcodebuild to build different platform

我有一个框架项目,我正在尝试使用脚本构建阶段构建一个胖文件 (iphoneos + iphonesimulator),但它不起作用。脚本很简单;它检查当前正在构建的平台,例如:

if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
then
SF_OTHER_PLATFORM=iphonesimulator
else
SF_OTHER_PLATFORM=iphoneos
fi

然后使用 xcodebuild 来构建它:

xcrun xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -sdk ${SF_OTHER_PLATFORM} -configuration "${CONFIGURATION}" BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" $ACTION

为简单起见,省略了脚本的其他细节。

如果我选择初始目标作为模拟器,这很好用,并且生成了模拟器和设备二进制文件,我使用 lipo 获取 fat 文件。当我以相反的方式构建设备文件时,就会出现问题,因此为 iphonesimulator SDK 调用了 xcodebuild。构建失败并出现以下错误:

CodeSign error: entitlements are required for product type 'Framework' in SDK 'Simulator - iOS 8.4'. Your Xcode installation may be damaged.

如果我更改 -sdk 选项,我会得到构建,但不是我需要的模拟器构建。这(有点)没问题,但为了发布(存档)我需要将设备设置为主要目标,否则 xcode 不会给我这个选项。

我该怎么办?

您似乎需要将脚本放在聚合目标类型中。 It was designed for exactly such cases: 一个构建中有两个不同的目标。

我所做的是创建一个新目标(其他->聚合类型)并向其添加脚本并使用该目标创建脂肪释放产品。

这是我正在使用的脚本:

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -sdk iphonesimulator -configuration Release
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -sdk iphoneos -configuration Release

mkdir -p ${TARGET_BUILD_DIR}/../MyApp${CURRENT_PROJECT_VERSION}

cp -r ${TARGET_BUILD_DIR}/../Release-iphoneos/ ${TARGET_BUILD_DIR}/../MyApp${CURRENT_PROJECT_VERSION}

lipo -create "${TARGET_BUILD_DIR}/../Release-iphoneos/MyApp.framework/MyApp" "${TARGET_BUILD_DIR}/../Release-iphonesimulator/MyApp.framework/MyApp" -output "${TARGET_BUILD_DIR}/../MyApp${CURRENT_PROJECT_VERSION}/MyApp.framework/MyApp"

很有魅力。它会创建一个文件夹,其中包含版本号(您在新目标中设置它)和一个胖框架。

编辑:

为什么这对你不起作用。

Developer is free to distribute iOS framework without codesigning it as Consumer will re-codesign it anyway, but Developer is forced by Xcode to codesign his framework when he builds for iOS device.

当您使用设备目标时,您必须对代码进行签名,即使您不必这样做。这就是它与聚合目标一起工作的原因 -> 不需要你进行协同设计,你不需要进行协同设计来发布框架。

选择模拟器,这个过程工作正常,因为你正在使用我认为的调试配置构建。

在项目导航器中,select 您的项目。现在 select 您的目标并在“构建设置”选项卡下,检查 Code Signing Identity 设置。

如果展开它,您应该会看到您在项目中设置的每个配置都有一行(如果没有,您应该会看到默认的调试和发布行)。

现在检查 Release 行(这是调用 Archive 命令时使用的默认设置)设置了正确的标识(这基于您在 Provisioning Profile 下select编辑的内容)。

如果您想了解有关配置文件、签名身份等的更多信息,请查看来自 Applethis link