10

我已经使用 Xcode 6 创建了一个自定义 iOS 框架。我尝试了许多脚本来使框架通用(用于模拟器和设备)。但它们都不适合我。请建议我为 iOS 创建一个自定义通用框架的方法Xcode 6。

4

3 回答 3

6

通过终端将两个二进制文件合并为一个通用二进制文件:

首先编译设备二进制文件,然后单独编译模拟器二进制文件。

找到两个二进制文件。如果要检查编译到每个架构中的架构,可以在终端中运行以下命令:

lipo -info /path/to/binary

示例输出:

fat 文件中的架构:/path/to/binary 是:armv7 arm64

现在您可以将两个二进制文件合并为一个:

lipo -create /path/to/simulator/binary /path/to/device/binary -output /path/to/output/binary

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

于 2015-09-08T00:32:09.253 回答
3

要构建和分发框架:

在框架项目中:

  1. 将目标(以及项目,为了安全起见)的构建设置“仅构建活动架构”设置为 NO。我们希望构建所有架构,以便二进制文件可以在所有受支持的设备中使用,而不仅仅是我们碰巧构建的设备。根据您的部署目标(以及因此,您支持的设备),您可能需要添加架构 ARMv7s
  2. 为模拟器构建和为设备构建,这将在派生数据文件夹中生成两个框架。

在终端:

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

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

  1. 在项目导航器中选择项目,选择目标,然后选择“常规”选项卡。
  2. 将 .framework 文件夹拖到显示“在此处添加嵌入式二进制文件”的位置。
  3. 在目标的构建设置中,将 .framework 文件夹的路径添加到“框架搜索路径”。
  4. 使用 #import <frameworkName/frameworkName.h> 在源代码中导入文件
于 2015-09-08T18:59:44.693 回答
3

根据您制作自定义通用框架的问题,您需要按照以下步骤操作或访问“<a href="http://www.raywenderlich.com/65964/create-a-framework-for-ios" rel="nofollow noreferrer ">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.) 现在你需要做的是将你的静态库设置为活动方案。确保您在 tragets 库的 Build Settings 中添加了“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}/"
在此处输入图像描述 希望这个脚本能帮到你。

于 2015-09-09T12:16:11.193 回答