一条命令 快速配置 Xcode 各种 环境

开发时经常需要提交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 就更方便了

你可能感兴趣的:(一条命令 快速配置 Xcode 各种 环境)