使用xcodebuild构建不同的平台

时间:2015-12-04 17:57:06

标签: ios xcode xcodebuild

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

protected void Page_Load()
{
    if(!IsPostBack)
    {
        PopulateGridview();
    }
}

然后使用xcodebuild构建它:

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

为简单起见,省略了有关脚本的其他详细信息。

如果我选择初始目标作为模拟器,这很好,生成模拟器和设备二进制文件,我使用lipo来获取胖文件。当我以相反的方式执行此操作时会出现问题,并构建设备文件,因此为iphonesimulator SDK调用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

如果我更改CodeSign error: entitlements are required for product type 'Framework' in SDK 'Simulator - iOS 8.4'. Your Xcode installation may be damaged. 选项,我会获得构建,但不是模拟器构建,这就是我需要的。这将是(有点)罚款,但为了构建发布(存档),我需要将设备设置为主要目标,否则xcode不会给我选项。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

看起来您需要将脚本放在聚合目标类型中。 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"

像魅力一样工作。它创建一个文件夹,其中包含版本号(您在新目标中设置它)和内部的胖框架。

编辑:

为什么这对你不起作用。

  

开发人员可以免费分发iOS框架而无需对其进行协调签名   因为消费者无论如何都会对其进行重新编码,但开发人员却被迫   Xcode在为iOS设备构建时对其框架进行编码。

Creating iOS/OSX Frameworks: is it necessary to codesign them before distributing to other developers?

当您使用设备目标时,即使您不必这样做,您也会被迫编码。这就是为什么它适用于聚合目标 - >你不希望自己进行协同设计,也不需要签署协议来发布框架。

答案 1 :(得分:0)

选择模拟器,该过程正常,因为您正在构建使用我认为的调试配置。

在项目导航器中,选择您的项目。现在选择您的目标,然后在Build Settings选项卡下,检查Code Signing Identity设置。

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

现在检查Release行(这是调用Archive命令时使用的默认行),设置正确的身份(这取决于您在Provisioning Profile下选择的内容)。

如果您想了解有关配置个人资料,签名身份等的更多信息,请查看Apple的this link