开发时经常需要提交ipa 每次手动打包 有点麻烦
理想的情况时执行一条命令 就自动打包生成ipa
但是生成ipa之前 测试环境和正式环境一些参数是不同的. 比如网络环境 肯定有测试和线上接口 还有我们用的小米推送也有测试和线上环境之分 还有证书和授权文件选择.
大概研究了下 这些都可以通过修改文件内容来达到目的
而修改文件内容就用 sed 强大的编辑功能
课前补充知识sed命令详解http://my.oschina.net/u/727843/blog/731288
参考我的配置 先贴出来 一步一步走
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
${PlistBuddy} -c "delete :$MiSDKRunKey" ${project_infoplist_path}
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 就更方便了
网友评论