我有一个框架项目,我正在尝试使用脚本构建阶段构建一个胖文件(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不会给我选项。
我该怎么办?
答案 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设备构建时对其框架进行编码。
当您使用设备目标时,即使您不必这样做,您也会被迫编码。这就是为什么它适用于聚合目标 - >你不希望自己进行协同设计,也不需要签署协议来发布框架。
答案 1 :(得分:0)
选择模拟器,该过程正常,因为您正在构建使用我认为的调试配置。
在项目导航器中,选择您的项目。现在选择您的目标,然后在Build Settings选项卡下,检查Code Signing Identity
设置。
如果展开它,您应该看到在项目中设置的每个配置都有一行(如果没有,您应该看到默认的Debug和Release行)。
现在检查Release行(这是调用Archive命令时使用的默认行),设置正确的身份(这取决于您在Provisioning Profile下选择的内容)。
如果您想了解有关配置个人资料,签名身份等的更多信息,请查看Apple的this link