开发时常常须要提交ipa 每次手动打包 有点麻烦git
理想的状况时执行一条命令 就自动打包生成ipagithub
可是生成ipa以前 测试环境和正式环境一些参数是不一样的. 好比网络环境 确定有测试和线上接口 还有咱们用的小米推送也有测试和线上环境之分 还有证书和受权文件选择.shell
大概研究了下 这些均可以经过修改文件内容来达到目的xcode
而修改文件内容就用 sed 强大的编辑功能网络
课前补充知识sed命令详解http://my.oschina.net/u/727843/blog/731288并发
参考个人配置 先贴出来 一步一步走ide
1进入项目目录 xxxx:项目绝对路径 获取项目名称工具
#指定编译模式测试
build_model="Debug"网站
project_path="xxxxx"
cd ${project_path}
project_name=$(ls | grep xcodeproj | awk -F.xcodeproj'{print $1}')
2 info.plist 相关配置
这里要用到/usr/libexec/PlistBuddy 专门修改.plist文件
project_infoplist_path=${project_path}/${project_name}/Info.plist
PlistBuddy="/usr/libexec/PlistBuddy
取版本号
bundleShortVersion=$(${PlistBuddy} -c"print CFBundleShortVersionString"${project_infoplist_path})
取build值
bundleShortVersion=$(${PlistBuddy} -c"print CFBundleVersion"${project_infoplist_path})
小米推送设置
MiSDKRunKey="MiSDKRun"
MiSDKRun=$(${PlistBuddy} -c"print $MiSDKRunKey"${project_infoplist_path})
#不存在添加 不一样则修改
if [ "$MiSDKRun" = "" ]; then
#因为没有添加字段 和 值为"" 空 没法区分判断 索性都先删除
${PlistBuddy} -c "delete :$MiSDKRunKey" ${project_infoplist_path}
${PlistBuddy} -c"add :$MiSDKRunKey string $build_model"${project_infoplist_path}
echo"add $MiSDKRunKey"
elif [ "$MiSDKRun" != "$build_model" ]; then
${PlistBuddy} -c"set :$MiSDKRunKey $build_model"${project_infoplist_path}
echo"update $MiSDKRunKey"
fi
3修改配置文件
#自定义配置文件 路径
configure_path="${project_name}/Classes/Tools/YXQCommon.h"
sed -i "" "s?#define REVIEW_MODE[^\n]*?#define REVIEW_MODE 0?"${configure_path}
#-i "" 是必须的 为了备份 为空的话就不备份
#只是改了个宏定义 根据它来判断 用什么接口 为0是测试环境 1 为正式环境
获取大概位置 修改受权文件 证书配置
#自定义项目文件相对路径
project=${project_name}.xcodeproj/project.pbxproj
sed 通常只支持单行 项目文件明显是多行 就要倒找须要更改的行数范围
这样搜索的都是通用字符串 配置文件更改行数改变后 依然能够搜索到所在范围
#/End XCBuildConfiguration section 打开看.pbxproj详情 只有这个字符串固定
#找到匹配字符串所在行
debugTag="Debug[^\n]*{"
releaseTag="Release[^\n]*{"
endTag="End XCBuildConfiguration section"
debug=`sed -n "/$debugTag/=" ${project}`
#debugTag搜索出来会有两个结果 须要改变的行数是后面匹配到的 因此取结果的第二行
debug=`echo "$debug" | sed -n "2p"`
release=`sed -n "/$releaseTag/=" ${project}`
release=`echo "$release" | sed -n "2p"`
end=`sed -n "/$endTag/=" ${project}`
#打印行数
echo "debug = $debug release = $release end = $end"
start=$debug
end=$release
#打印行数看看
echo "start = $start end = $end"
自定义debug受权文件 自行查看 须要更换时更换
自定义debug证书 自行查看 须要更换时更换
profile="xxxxx"
identity="\"iPhone Developer: xx \(xxxxx\)\";"
#release 相关证书 受权文件也要单独配置
sed -i "" -e "$start,$end s/\(PROVISIONING_PROFILE = \"\).*\"/\1$profile\"/g" -e "$start,$end s/\([^{]*CODE_SIGN_IDENTITY[^{]* = \)\([^{]*\)/\1$identity/" ${project}
#sed 多行匹配 多点修改 模式
#改变指定行范围的匹配字符串 不加g 只处理第一次匹配 加上p会 多插入一行 -e 多点编辑
#这里也要去补一下正则了 .* 任意n个非空字符 [^{]* 任意n个非{ 字符
若是有其余须要修改的 照着修改就好了
其余配置也可自行设置
到这里 xcode 相关配置 修改已完成 下一步就是 打包了
#以前研究过IOS工程自动打包并发布脚本实现http://my.oschina.net/u/727843/blog/391946能够去看看
有个更强大的工具 就是fir了http://fir.im/
自动配置itms-services://协议 只需提供ipa 还提供了一键打包发布相关命令
1首先要自定义 更新log 吧
请求输入内容 回车后继续执行下一步
echo -n "enter chages log:"
read log
fir_log="$log \n测试\n fir auto debug"
echo -e"log is $fir_log \nnow goon."
2打包并发布到fir
#token fir 网站获取
fir_token="xxxxx"
#自定义 ipa 保存路径
out_path="/Users/xx/Desktop/ipa/$build_model"
#若是path 不存在建立下
if [ ! -x"$out_path" ]; then
mkdir"$out_path"
fi
#获取当前系统时间
time=`date +%y-%m-%d:%Hh%Mm%Ss`
#根据时间 版本号等定义ipa name
name="$build_model+$project_name-$bundleShortVersion-$bundleVersion+$time"
echo"the ipa name is $name.ipa"
#fir 打包上传命令
fir build_ipa -o ${out_path} -w -S ${project_name} -n "$name"-C ${build_model} -p -c ${fir_log} -Q -T ${fir_token}
其余相关配置查看 fir官网https://github.com/FIRHQ/fir-cli/blob/master/README.md
3若是上传完成后 想更改ipa 名字
echo -n"enter name (rename the ipa):"
readlog
if [ "$log" = "" ]; then
echo "input name is null"
else
cd ${out_path}
mv $name.ipa $log.ipa
echo "renamed the ipa"
fi
主要是懒 常常忘记 这些配置文件更改.
我去不能上传附件?一键配置debug环境并fir打包上传.sh
把已上命令放在一个文件里 用终端打开执行就能够了
终端能够设置 exit 自动关闭窗口 当shell彻底退出后关闭
若是你会用 alfred 就更方便了