gpt4 book ai didi

ios - 使用 xcodebuild 构建不同的平台

转载 作者:行者123 更新时间:2023-12-01 18:47:34 26 4
gpt4 key购买 nike

我有一个框架项目,我正在尝试使用脚本构建阶段构建一个胖文件(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 文件。当我以相反的方式执行此操作并构 build 备文件时,就会出现问题,因此为 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 :一个构建中有两个不同的目标。

我做的是创建新目标 (Other->Aggregate 类型)并向其添加脚本并使用该目标来创建胖发布产品。

这是我正在使用的脚本:

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.



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

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

关于ios - 使用 xcodebuild 构建不同的平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com