ios 打包framework用到的脚本 一

现在Applecpu架构如下

  • arm7: 在最老的支持iOS7的设备上使用
  • arm7s: iPhone55C上使用
  • arm64: 运行于iPhone5S64 ARM 处理器
  • i386: 32位模拟器上使用
  • x86_64: 64为模拟器上使用


判断一个Framework支持哪些架构

我们该怎么验证生成的Framework支持哪些平台呢,总不能一个个测试吧?当然不用.下面的命令是加上armv7s前后生成的framework的对比

Yearsdembp:Products Years$ lipo -info ./MyFramework.framework/MyFramework 

Architectures in the fat file: ./MyFramework.framework/MyFramework are: i386 x86_64 armv7 arm64 


Yearsdembp:Products Years$ lipo -info ./MyFramework.framework/MyFramework 

Architectures in the fat file: ./MyFramework.framework/MyFramework are: armv7 armv7s i386 x86_64 arm64




1. 关于cocoa framework的制作


网络上介绍基本正确,但是制作的过程中,需要注意两点,1.1 通用性 1.2适用是需要的配置


1.1 自定义动态framework - cocoaframework,需要的脚本,下列脚本基本能编译出模拟器和真机都适用的framework。

权做以记录,需要用的同学,需要根据脚本自己修改。本脚本用来打包framework用的


1.2 由于制作的是动态framework,所以在引用的时候需要注意下列3各配置

1.2.1 是否在引用项目project信息配置中,将该framework添加"linked Framework and Libraries"中

1.2.2 是否将framework添加到"Embedded Binaries"中

1.2.3 头文件引用的时候,需要如下引用 : framework/header.h


下列是脚本:

set -e

set +u

# Avoid recursively calling this script.

if [[ $SF_MASTER_SCRIPT_RUNNING ]]

then

exit 0

fi

set -u

export SF_MASTER_SCRIPT_RUNNING=1



# Constants

SF_TARGET_NAME=${PROJECT_NAME}

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal


FRAMEWORK_TARGET=CocoaFramework



# Take build target

if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]

then

SF_SDK_PLATFORM=${BASH_REMATCH[1]}

else

echo "Could not find platform name from SDK_NAME: $SDK_NAME"

exit 1

fi


if [[ "$SF_SDK_PLATFORM" ="iphoneos" ]]

then

echo "Please choose iPhone simulator as the build target."

exit 1

fi


IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos


#编译非模拟器版本arm64

xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS='arm64' VALID_ARCHS='arm64' $ACTION

#编译非模拟器版本arm7

xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"  CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS='armv7 armv7s' VALID_ARCHS='armv7 armv7s' $ACTION


#编译非模拟器版本i386

xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/i386" SYMROOT="${SYMROOT}" ARCHS='i386' VALID_ARCHS='i386' $ACTION


# 编译非模拟器版本x86_64

xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/x86_64" SYMROOT="${SYMROOT}" ARCHS='x86_64' VALID_ARCHS='x86_64' $ACTION


#复制到相应为文件

rm -rf "${UNIVERSAL_OUTPUTFOLDER}"

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_TARGET}.framework""${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework"


#通过lipo命令合并起来


lipo -create  "${BUILD_DIR}/${CONFIGURATION}-iphoneos/i386/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/x86_64/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/arm64/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/armv7/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}" -output"${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}"


#这里我将文件复制到项目的位置,顺便打了个包。

folderpath="${PROJECT_DIR}/Framework/"

if [ -d $folderpath ]

then

rm -R "${PROJECT_DIR}/Framework/"

echo "exist"

fi



mkdir "${PROJECT_DIR}/Framework"

mv "${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework""${PROJECT_DIR}/Framework/${PROJECT_NAME}.framework"




2. 静态framework与动态framework的改变可以通过修改 "Build Settings -> Mach-O Type"类型来改变,而不需要重新建立新的项目


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值