Xcode编译后添加脚本自动拷贝生成文件!

Xcode编译后添加脚本自动拷贝生成文件

我们在做iOS SDK库的时候,当业务到一定程度后,会需要生成很多.a或.framework, .bundle文件,然后打包发给CP,在Xcode每次生成后,我们需要到对应的目录复制对应的文件,一两次还好,操作频率多之后就会很厌烦这个操作,得益于Xcode对脚本的支持很强大,我们可以编写一些shell或python脚本来自动完成这些事情!

要编写这些脚本,当然离不开对这些脚本语言的熟悉,个人觉得不需要太深,会一些基本语法,数据结构和API就行了,哈哈。。毕竟不是专业写脚本的嘛~

接下来先说明脚本需要完成哪些事情? 

一.拷贝SDK库文件

以.framework文件为准,.a文件类似

1.设置目标文件要拷贝到的文件夹

2.寻找.framework文件生成的对应的目录,一般在Products文件夹右键即可找到,比如我这边找到的路径为:/Users/xxx/Library/Developer/Xcode/DerivedData/XXXX-fpwrwiouhlldobdcqbntbkgetmic/Build/Products/Debug-iphoneos/XXXX.framework [涉及到项目隐私,部分名字以XXX替代],Xcode对于很多路径都提供了宏变量,我们在编写shell脚本的时候,可以直接引用,附上一地址,梳理了绝大多数宏变量,感谢该作者。

3.删除之前拷贝过来的文件,开始拷贝新文件

最后附上源代码

SDKs=$1
basepath=$(dirname ${SRCROOT})
echo $basepath
SDK_OUTPUTFOLDER=${basepath}/${SDKs}
echo $SDK_OUTPUTFOLDER
echo ${PLATFORM_NAME}
echo "对外输出目录文件路径:"
echo "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.framework"
# 删除对外输出目录下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.framework"
cp -R "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.framework" "${SDK_OUTPUTFOLDER}/"


SDKs=$2
basepath=$(dirname ${SRCROOT})
echo $basepath
SDK_OUTPUTFOLDER=${basepath}/${SDKs}
echo $SDK_OUTPUTFOLDER
echo ${PLATFORM_NAME}
echo "SDK临时输出目录文件路径:"
echo "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.framework"
# 删除SDK临时输出目录下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.framework"
cp -R "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.framework" "${SDK_OUTPUTFOLDER}/"
# 删除SDKS/Release/下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${CONFIGURATION}/${TARGET_NAME}.framework"
# 拷贝.framework文件到指定编译目标文件夹
cp -R "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.framework" "${SDK_OUTPUTFOLDER}/${CONFIGURATION}"

 

使用方式: 在开发的项目工程-Target设置里,进行Run Script脚本对应设置,在.workspace工程文件当前目录层级下的SDKs/Debug或Release文件夹,Output/文件夹即可找到对应的framework文件

 

二.拷贝资源.bundle文件

原理跟上面类似,只上源代码

#!/bin/sh

# 拷贝.bundle资源文件到目标文件夹内,保证.bundle里面的图片,xib,storyboard资源是编译最新的
# 解决每次修改xib或storyboard文件后,编译后,需要手动拷贝到目标.bundle文件

#!/bin/sh



SDKs=$1
basepath=$(dirname ${SRCROOT})
echo $basepath
SDK_OUTPUTFOLDER=${basepath}/${SDKs}
echo $SDK_OUTPUTFOLDER
echo ${PLATFORM_NAME}
echo "对外输出目录文件路径:"
echo "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle"
# 删除对外输出目录下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle"
# 删除Info.plist文件
rm -rf "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.bundle/Info.plist"
cp -R "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.bundle" "${SDK_OUTPUTFOLDER}/"


SDKs=$2
basepath=$(dirname ${SRCROOT})
echo $basepath
SDK_OUTPUTFOLDER=${basepath}/${SDKs}
echo $SDK_OUTPUTFOLDER
echo ${PLATFORM_NAME}
echo "SDK临时输出目录文件路径:"
echo "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle"



# 删除SDK临时输出目录下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle"
# 删除Info.plist文件
rm -rf "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.bundle/Info.plist"
cp -R "${BUILD_DIR}/${CONFIGURATION}-${PLATFORM_NAME}/${TARGET_NAME}.bundle" "${SDK_OUTPUTFOLDER}/"
# 删除SDKS/Release/下同名文件
rm -rf "${SDK_OUTPUTFOLDER}/${CONFIGURATION}/${TARGET_NAME}.bundle"
# 拷贝.bundle文件到指定编译目标文件夹
rm -rf "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle/Info.plist"
cp -R "${SDK_OUTPUTFOLDER}/${TARGET_NAME}.bundle" "${SDK_OUTPUTFOLDER}/${CONFIGURATION}"

 

posted @ 2018-07-09 11:21  One Piece,我来了!  阅读(3583)  评论(0编辑  收藏  举报