iOS 发布流程和分支使用方法
Branches
- stable - 当前app store线上版本最后commit,所有版本的tag应该从此分支标记,在app store最后发版时刻tag
- master - 当前app store待发版本开发分支,所有针对当前待发版本做的修改,一般应该从master checkout一个新分支,之后开Merge Request进行review,然后merge进入master
- testflight - testflight 打包分支,所有在testflight上发布的版本应当从此分支打包,并且标记tag
- x.x.x - 临时发版branch,当某次发版时,如果master中的commits有一些不想进入下一版本,则临时建立某分支用于发版,发版后删除。
发布流程
比如,当前APP STORE线上版本为 4.9.10,待发的下一版本为4.9.12,有一个正在长期做的feature新导航页在navigation分支,则:
- Stable分支为4.9.10的最后一个commit,发布后打tag4.9.10
- 4.9.10发布后,马上将 testflight分支置为master,并且修改版本为4.9.12.0,并且向苹果申请testflight审核(最长一周)
- 所有开发在自己的feature或者bug fix分支做开发,之后通过MR,在规定时间如周四中午前,merge进入master
- 开发负责人,在周四code freeze之后,确认master的修改,然后merge进入testflight
- 测试对比stable和当前testflight之间的commits,确认所有commits都是针对我们选择要发版的feature或者bug fix
- 测试修改testflight分支上版本号为 4.9.12.1并打tag,上传到testflight(这时应该已经通过了4.9.12.x的审核,可以马上测试)
- testflight参与者进行测试,报bug,默认为p1,测试和开发商议是否为 p0或者p2,并修复
- 修复时,同样按照bug fix => testflight MR的形式review和merge,完成后通知测试,测试将testflight分支版本修改为4.9.12.2,上传并再次测试
- 反复测试直到没问题
- 测试和开发确认,然后在app store上发布
- 测试将当前testflight merge到stable,然后打tag 4.9.12
- 开发将当前testflight merge到master,继续下一版本开发
特殊情况
比如,在上述情况下,在进入正式发版code freeze之前,navigation分支想让大家先测试一下,则:
- 该开发reset testflight分支到navigation分支,通知测试
- 测试修改testflight分支版本号(如4.9.12.1),打tag,并打包上传到testflight,通知测试参与者 Code freeze之后则原则上不允许新的feature内测,并且code freeze之后,版本从4.9.12.2开始(累计)。
比如,在上述情况下,4.9.12需要做一次紧急发版仅仅包括少量fix
- 开发从stable checkout出4.9.12分支,cherry-pick适当的master中的修改,然后所有其他修改通过 bug_fix => 4.9.12
- 4.9.12好了之后 reset testflight为 4.9.12,并按上述过程测试打包发布
比如,在上述情况下,4.9.12需要做一次紧急发版仅仅包括少量fix,且时间不够testflight审核
- 开发从stable checkout出4.9.12分支,cherry-pick适当的master中的修改,然后所有其他修改通过 bug_fix => 4.9.12
- 测试直接从4.9.12打包并通过开发者设备测试
- 测试完成直接提交审核
- 发布后,4.9.12 merge 到 stable,master,打tag,之后删除此分支