zoukankan      html  css  js  c++  java
  • 上架

    在过去七年时间里,我们的团队创建了无数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 ControllersViper andBrowseOverflow (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。

  • 相关阅读:
    ExecuteNonQuery()返回值
    GridView导入至EXCEL (报错处理:只能在执行 Render() 的过程中调用 RegisterForEventValidation)
    mysql 远程登录
    四舍六入 银行家算法
    linux-grep-tail-find
    spring 事务注解
    aop execution 表达式解析
    事务有效条件
    oracle 日期取 月 日
    spring cloud 定时任务
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5137467.html
Copyright © 2011-2022 走看看