(译)iOS核对清单--创建发布你的应用

在过去七年时间里,我们的团队创建了无数iOS应用。在这个过程中我们不断改善我们的开发流程。把最佳实践应用到我们发布的新应用中。

我们已经准备好了两张核对清单。一个是关于如何开始一个iOS项目,一个是关于如何将应用提交到AppStore。

这些清单的流程使我们团队更高效,构建更好的解决方案,减少开发时间和提交到AppStore的风险。

我希望这些清单对你们同样有用。

####开始一个iOS项目

  • Repo/Github

    1 在Github上创建一个仓库,把 iOS gitignore 文件添加进去。

    2 严格按照git-flow workflow流程进行开发,master分支用于你的产品发布,dev分支用于保持最新的代码,feature分支用于当前工作进度。

  • Xcode

    1 确保团队中的每个人使用同一个版本的Xcode。

    2 在Xcode target的”Build Settings”里打开”Analyze during build”和 “Treat Warnings as Errors”选项。

    3 关闭tabs并开启空格键: XCode > Preferences > Text Editing > Indentation > Prefer Indent using Spaces, Tab width 2, Indent width 2

  • Jenkins/OSX Server/TestFlight

    设置 CI/CD(持续集成/持续部署) 确保每次推送到dev分支的所有测试用例都会执行一遍,同时会构建一个Ad Hoc版本并以邮件形式发送到团队的每个成员(邮件内容是commit的log信息)。如果构建或者测试失败,一封构建失败的邮件也会发给团队成员。在Originate,大部分iOS项目都使用OSX Server集成TestFlight功能。

  • 编码风格/规范

    1 遵循苹果官方的建议 iOS coding style guide

    2 此外,遵循这里的建议:http://qualitycoding.org/preprocessor/

    3 保持你的.h文件简洁。只暴露必要的接口给外界,把其他属性、方法、声明等放到.m文件

    4 根据当前显示的页面给ViewController命名。(e.g. LoginViewController)

    5 使用分组(Group)组织你的项目。好的分组应该是这样的:DataModels,Views,Controllers,App Delegate,Supporting Files,Tools等,混乱的项目结构是不能容忍的。

    6 在提交pull request之前,首先过一遍effective code review

  • 框架

    1 MVC(Model View Controller)有时候在iOS开发中会被戏称为Massive View Controller。对于初学者而言,把所有事情都交给massive controllers是一个很常见的错误。根据需求,我们应该把tableview相关的delegates/data sources从view controller中抽离成独立的类。把view(尤其是需要复用的)也抽离成单独的类。把controller中用到的工具性方法放到单独的helper类中去。此外,viewController不应该直接进行网路请求的操作,而应该交给Model或者Manager类去处理。

    2 一些好的code/tutorials/patterns: Lighter View Controllers, Viper and BrowseOverflow (from the iOS TDD book).

  • Views/Nibs/Storyboards

    1 确保在视图中使用constraints/autolayout来适配不同的屏幕。否则只能手动为每个view设置frame sizes/positions来确保不同屏幕都正常显示。PureLayoutFLKAutoLayout已经在我们的一些项目里使用了。

    2 考虑要不要使用Nib文件。Originatge建议不要使用,但决定权应该交给Tech Lead。不建议使用Storyboard是因为对于多人开发很不友好,使Xcode变得迟缓,给写代码增加了不必要的复杂度。

    3 如果需要的话,使用FrameAccessor来修改frame,这将很容易设置UIView的大小和起始坐标。

  • 字体和颜色

    对整个app进行字体和颜色标准化,这样就很容易维护和修改它们,并且可以使代码看起来更整洁。

  • 文字显示

    1 所有显示到界面的字符串都要放到一个本地化文件(localization file)中。

    2 避免使用包含文本的image assets,使用UILabel替换之。

  • 分析

    http://replay.io/ 是我们在Originate使用的分析平台

  • 崩溃报告

    尽管苹果官方的iTunes Connect已经提供了相关功能,但是最好还是使用第三方的工具比如Crashlytics。它们很高效并且有一个更友好的界面。

  • 如果需要,增加 AOP的支持(e.g. for logging)。

  • 第三方代码依赖

    Cocoapods是个不错的选择。

  • 服务器通信

    1 在应用的设置中增加toggle between server environments (e.g. QA, dev, staging, etc.)

    2 如果需要,实现一个app更新通知系统,这样服务器可以通知app有一个新的可用版本,app可以给用户展示相关更新提醒。

    3 在向服务器请求数据的时候,确保使用一个等待提示控件。我们在开发的时候用到了MRProgress

    4 在网络请求中应该使用AFNetworking或者RestKit(if Core Data is needed)。网络优化/配置请看这篇博客:AFNetworking cache

    5 调试工程中,确保所有服务器信息都打印到控制台

    注意:使用 DLog 来打印所有的请求和响应(in debug mode)

    #ifdef DEBUG
    #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    #else
    #define DLog(...);
    #endif
    
  • 完善细节

细节的调整对于app来说是至关重要的。比如增加一些用户特别期待的特性比如:下拉刷新,点击状态栏滑到开头,请求数据的时候显示等待提示框等使你的app更友好。你的设计团队和产品团队应该有一个很高的水准。iOS Human Interface Guidelines是一个不错的参考。

最后,在开始之前,确保创建必须的账号(e.g. iTunes Connect, Urban Airship, Analytics Accounts, etc.)

####提交app到AppStore

发布app到AppStore不容忽视。我们必须按照苹果官方的指南一步一步进行以确保你的app能够顺利发布到AppStore。我们需要花费4~8个小时来执行这些步骤。

当你的app已经准备好了,按照下面步骤:

注意:我们发现开发者们经常忘记添加content flaging到那些创建用户生成数据的app中。苹果会拒绝这样的app,直到你把content flaging添加进去。

  • Core Data

如果你的app中使用了CoreData,当你提交一个更新版本时,你必须确保写了一个迁移脚本来完成你的数据库升级。如果没有这样做,你的app在升级之后很可能会崩溃,用户只能删掉之后重新安装。请参考Core Data Model Versioning and Data Migration

  • App评论窗口

当你想让你的应用程序被用户评论,UAAppReviewManager可以确保使你的app在合适的时间被用户评论。

  • 发布方案

在Xcode的”Edit Scheme”选项,“Archive”应该设置成“Release”。这样可以隐藏log输出并关掉所有在开发阶段的测试用例

注意:由于编译器的优化设置,发布构建有时候与调试构建会有所不同。所以最好在发布到AppStore前几天就开始测试发布构建来捕获一些潜在的问题。

  • 服务器

请将你的发布版本构建在生产服务器上

  • 发布候选配置 Ad Hoc builds / App Store build

确保使用正确的Bundle Identifier, Apple ID, certificates (e.g. Push Certificates)等作为发布的候选配置和AppStore构建。

  • 检查Release版的候选配置

    1 确保你的app与正确的生产服务器进行通信。

    2 确保所有的测试窗口是隐藏的

    3 确保没有敏感数据打印到控制台

    4 确保第三方分析工具比如Analytics工作在正确的生产账号上。

    5 确保第三方服务比如Urban Airship工作在正确的生产账号上。

  • 推送到主分支

    1 在app的plist文件更新你的bundle version number。这个数字可以跟你在appStore里设置的版本号不一致,但最好还是设成一样的。

    2 推送你的代码到主分支并打上tag。

  • 在iTunes Connect上设置你的app

    1 在iTunes Connect创建一个新的app,如果是升级的话,选“Add Version”

    2 确保填满所有信息并上传所有必要的图片(或者视频)

注意:只有“Description” 和 “What’s New In This Version”可以修改一旦你的app审核通过。其他的选项比如图片是不能修改的。

  • 提交

使用Xcode来构建你的最终版本就上传到iTunes Connect。

原文地址:http://blog.originate.com/blog/2015/01/13/ios-checklists-creating-and-submitting-your-app/