我使用Xcode 6创建了一个自定义的iOS框架。我尝试了许多脚本来使框架通用(适用于模拟器和设备),但它们都没有效果。请建议一种在Xcode 6中创建自定义通用框架的方法。
我使用Xcode 6创建了一个自定义的iOS框架。我尝试了许多脚本来使框架通用(适用于模拟器和设备),但它们都没有效果。请建议一种在Xcode 6中创建自定义通用框架的方法。
通过终端将两个二进制文件合并为通用二进制文件:
首先编译设备二进制文件,然后分别编译模拟器二进制文件。
找到两个二进制文件。如果要检查每个文件中编译了哪些架构,可以在终端中运行以下命令:
lipo -info /path/to/binary
示例输出:
/path/to/binary 中的 fat 文件体系结构为:armv7 arm64
现在,您可以将两个二进制文件合并为一个:
lipo -create /path/to/simulator/binary /path/to/device/binary -output /path/to/output/binary
输出二进制文件将具有模拟器和设备架构。
1.) 创建一个项目。
2.) 通过选择Cocoa Touch Static Library向您的项目添加新的目标。(有关更多参考信息,请访问:http://www.raywenderlich.com/65964/create-a-framework-for-ios)
3.) 现在您需要做的是将静态库设置为活动方案。请确保您已在目标库的构建设置中添加了“arm64”。
4.) 选择iOs设备并进行构建。但是,为了使其适用于所有设备,您需要添加下面的脚本。
脚本:
# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
UNIVERSAL_OUTPUTFOLDERx64=${BUILD_DIR}/${CONFIGURATION}-universalx64
# Step 1. Build Device and Simulator versions
xcodebuild -target DKHelperLib ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target DKHelperLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target DKHelperLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR="${UNIVERSAL_OUTPUTFOLDERx64}" BUILD_ROOT="${BUILD_ROOT}"
# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
# Step 2. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" "${UNIVERSAL_OUTPUTFOLDERx64}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"
# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
构建和分发框架:
在框架项目中:
在终端中:
在另一个应用程序中使用框架: