使用Xcode 6.4创建通用的自定义iOS框架

10

我使用Xcode 6创建了一个自定义的iOS框架。我尝试了许多脚本来使框架通用(适用于模拟器和设备),但它们都没有效果。请建议一种在Xcode 6中创建自定义通用框架的方法。


请有人给我一个解决方案。 - Vork
这里有另一种替代方案:https://github.com/gurhub/universal-framework - mgyky
3个回答

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

输出二进制文件将具有模拟器和设备架构。


3
根据您的问题,要创建自定义通用框架,您需要按照以下步骤操作或访问“http://www.raywenderlich.com/65964/create-a-framework-for-ios”,因为我是参考raywenderlich制作的框架。

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}/"
enter image description here Hope this script will help you.


3

构建和分发框架:

在框架项目中:

  1. 将目标的构建设置(为确保安全,也要为项目设置)中的“仅构建活动体系结构”设置为NO。我们希望构建所有体系结构,以便二进制文件可以在所有受支持的设备上使用,而不仅仅是我们构建的那个设备。根据您的部署目标(以及其所支持的设备),您可能需要添加体系结构ARMv7s。
  2. 为模拟器构建并为设备构建,这将在派生数据文件夹中产生两个框架。

在终端中:

  1. 找到项目的派生数据路径。查找文件夹“Build->Products”。里面应该有“-iphoneos”和“-iphonesimulator”文件夹。每个文件夹里都有一个“.framework”文件夹。将其中一个复制到某个好的文件夹中。从每个“.framework”文件夹中,将其中的二进制文件复制到一个文件夹中。
  2. 在终端中运行命令“lipo-create-output <outputName> <binaryFromiphoneos> <binaryFromiphonesimulator>”。这将创建具有模拟器和设备的所有体系结构的通用二进制文件。用新生成的二进制文件替换复制的“.framework”目录中的文件。

在另一个应用程序中使用框架:

  1. 在项目导航器中选择项目,选择目标,并选择“常规”选项卡。
  2. 将“.framework”文件夹拖到“添加嵌入式二进制文件”的位置。
  3. 在目标的构建设置中,将“.framework”文件夹的路径添加到“框架搜索路径”中。
  4. 使用“#import <frameworkName/frameworkName.h>”导入源代码中的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接