#!/bin/sh
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
# Step 1. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration ${CONFIGURATION} -sdk iphoneos \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build
# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"
# Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
"${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"
# Step 5. Convenience step to copy the framework to the project's directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"
# Step 6. Convenience step to open the project's directory in Finder
open "${PROJECT_DIR}"
我有上面的shell脚本来为Xcode构建选项创建设备和通用框架。
是否可以使用上面的shell脚本从Command终端创建/生成iOS Framework,并使用以下配置
请告诉我从中创建/生成iOS Framework的步骤 命令终端。必须欣赏最好的解释
答案 0 :(得分:3)
只需将参数添加到xcodebuild
ENABLE_BITCODE=NO
用于禁用bitcode
ENABLE_BITCODE=YES
启用bitcode
例如
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
答案 1 :(得分:1)
在您发布的shell脚本中,将# Step 1. Build Device and Simulator versions
下的代码替换为以下内容。
1)为设备bitcode禁用创建框架:
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration ${CONFIGURATION} -sdk iphoneos \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
2)为设备bitcode启用创建框架
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration ${CONFIGURATION} -sdk iphoneos \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
3)为Universal bitcode disable
创建框架xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration ${CONFIGURATION} -sdk iphoneos \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=NO
4)为Universal bitcode enable
创建框架 xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO \
-configuration ${CONFIGURATION} -sdk iphoneos \
BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} \
-sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" \
BUILD_ROOT="${BUILD_ROOT}" clean build ENABLE_BITCODE=YES
编辑:
要构建框架,您可以执行以下任一操作:
1.替换每个配置的代码,转到终端并运行shell脚本,方法是导航到包含shell脚本并运行./<nameOfTheShellScriptFile>.sh
的文件夹。但请确保您有可用的构建设置。这将在目录${BUILD_DIR}/${CONFIGURATION}-universal
中创建具有适当配置的框架
2.在Xcode中添加运行脚本。在Xcode中打开您的项目,单击方案下拉列表(在“停止”按钮旁边)并选择您的框架方案。再次打开下拉菜单,然后单击“编辑方案...”。你会看到左边有6个动作。您可以选择将脚本添加到哪个操作更有意义(您希望在每个“运行”操作上创建此通用框架,还是仅在存档时创建?)。下拉该操作并单击Post-actions。单击+按钮添加新操作,然后单击“新建运行脚本操作”。将“提供构建设置”设置为框架目标以获取适当的构建设置。将脚本粘贴到文本区域中,然后单击“关闭”。现在,每次执行脚本操作后,脚本都会运行并再次为设备和模拟器体系结构构建框架,并将通用框架放在项目目录中。这需要一些时间来完成,特别是如果你的项目很大,所以要耐心等待,直到查找器打开,以显示包含框架的项目目录。现在,您可以在每次需要不同的配置(bitcode启用或禁用)时更改脚本中的代码,或者为不同的配置添加不同的方案,并使用适当的脚本为每个方案执行整个步骤。