iOS自动化打真机+虚拟机包脚本

先说手动打包:

        lipo -create 真机路径 虚拟机路径 -output 真机或虚拟机路径

真机路径和虚拟机路径指的是真机生成的framework中的这个黑色图标的东西。create的输出结果会覆盖掉 output的这个黑丝图标的文件。-output输出的framework就是合并之后的包。

iOS自动化打真机+虚拟机包脚本_第1张图片

再说自动化脚本

1.新建一个.sh文件,文件名叫啥都行,此处叫xcodebuild,新建一个空白文件,改后缀为.sh就行了。没啥快捷键。文件存放路径一般和即将打包的项目的.xcodeproj同级 

iOS自动化打真机+虚拟机包脚本_第2张图片

2.在需要打包的xcode项目的build Phases中 new run script phase

iOS自动化打真机+虚拟机包脚本_第3张图片

3.在新建的run script中添加脚本运行。这里写了之后,每次build都会运行,很浪费时间,不打包的时候这里可以注释掉(前面加#) 

iOS自动化打真机+虚拟机包脚本_第4张图片

4,真机build一次,虚拟机build一次,就成功了

iOS自动化打真机+虚拟机包脚本_第5张图片

 

第一个就是真机的包,第二个是真机假虚拟机的包,如果有把pod打成zip的需求,可以添加如下命令,

zip -r 压缩后的zip名字.zip Pod

iOS自动化打真机+虚拟机包脚本_第6张图片

另外:.虚拟机打包不应包含arm64架构,因此在项目中应该手动去掉。我的项目中还需要去掉i386架构,你的项目如果如果不需要可以去掉。如果有如下报错信息,说明xxx.a不支持某个架构,这里是不支持i386,就需要去掉对应的框架:

xxx.xcodeproj The linked library 'xxx.a' is missing one or more architectures required by this target: i386.

iOS自动化打真机+虚拟机包脚本_第7张图片

.sh的脚本代码如下:

#!/bin/sh

# 取得build的target名(get project name)
FRAMEWORK_NAME="项目名"
#或者用下面的这个自动获取项目名
#FRAMEWORK_NAME=${PROJECT_NAME}

UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/Pod"

#UNIVERSAL_PRODUCT_PATH="${UNIVERSAL_OUTPUT_FOLDER}/framework名.framework"

#创建输出目录,并删除之前的framework文件
if [ ! -d "${UNIVERSAL_OUTPUT_FOLDER}" ];then
    mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
fi
if [ ! -d "${UNIVERSAL_OUTPUT_FOLDER}/Library" ];then
    mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}/Library"
fi

if [ ! -d "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal" ];then
    mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal"
fi

#删除旧的framework
if [ -d "${UNIVERSAL_OUTPUT_FOLDER}/Library/framework名.framework" ];then
    rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/Library/framework名.framework"
fi

if [ -d "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal/framework名.framework" ];then
    rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal/framework名.framework"
fi
#xcodebuild clean
#rm -rf ${BUILD_DIR}
# 设置真机和模拟器生成的静态库路径 (set devcie framework and simulator framework path)  ${TARGET_NAME}
DEVICE_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneos/framework名.framework"
SIMULATOR_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/framework名.framework"


#拷贝framework到Library和Library-Universal目录
cp -rf "${DEVICE_DIR}" "${UNIVERSAL_OUTPUT_FOLDER}/Library"
cp -rf "${SIMULATOR_DIR}" "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal"


#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/Library-Universal/framework名.framework/framework名" "${DEVICE_DIR}/framework名" "${SIMULATOR_DIR}/framework名"

#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi


#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"


你可能感兴趣的:(SDK,ios,自动化打包,ios,自动化,sdk)