当你编译一个Objective-C程序时,代码被转换成2进制文件。但是和Java等其它语言不同,编译无法通过时,没法看出是哪里出的问题。但是,编译时会生成一个dSYM包。它能把编译崩溃报告和代码匹配起来,从而确定问题所在。
问题是dSYM包必须和二进制文件匹配,所以每次代码重建和版本变化时都要附带重建dSYM包。这可够麻烦的。为此我写了个脚本,它能把dSYM包移入文件目录里,生成一个叫“dSYM”的目录项。此外,该脚本还能检查并保存GIT里的包。为了防止2个包重名,脚本以生成时间来命名每个dSYM包。
故障检查
脚本的第一任务是检查能否调试。
if [ "$BUILD_STYLE" == "Debug" ]; then检查该版本能否调试
echo "Skipping debug"
exit 0;
fi
脚本的第一部分是。其实文件还在开发者电脑上,代码也都在,这一步可以略过了。if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
echo "Skipping simulator build"
exit 0;
fi
第二步是检查版本兼容性,先不管储存代码的事。
移动文件
既然dSYM是以生成时间命名的,并且可以在开发者之间以及电脑间迁移,我把环境变量加入到文件里。SRC_PATH=${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}
echo "moving ${SRC_PATH} to ${DEST_PATH}"
mv "${SRC_PATH}" "${DEST_PATH}"
下一步就是建立文件当前位置到转存位置的路径。最好把路径存下来,出问题时好查看。
提交到版本控制
忙了半天,就是为了这个版本控制啊。if [ -f ".git/config" ]; then
git add "${RELATIVE_DEST_PATH}"
git commit -m "Added dSYM file for ${BUILD_STYLE} build" \
"${RELATIVE_DEST_PATH}"
fi
只有当项目是GIT包的一部分时才触发最后这部分代码。
脚本下载 Move_dSYM_To_Storage.sh.zip