引言:

在前段时间,团队内部会议上,iOS, Android端的leader在汇报用户使用客户端反馈时, 只能根据用户的描述来排查出现的问题以及原因, 放出去的版本多了,有时很难分清A用户出现的问题是v1.0.0的版的?还是v1.0.1版的,所以,如何获取应用的程序集版本号,在一定程序上能够快速定位到问题.

一、问题场景

开发移动应用产品,业内听到较多的做法是:敏捷,快速版本迭代更新。殊不知,迭代的快了,容易扯着。

我记得云城在刚创建之初,当时还没有做移动产品,完全是给Bambook输出血液,即内容, 某系统在同步这块下了非常大的功夫跟精力,但由于没有做过这类系统架构的经验,导致在开发过程中的bug飙升,然,又不得不提供给“需求方”一个又一个版本,所以,抛出去的组件版本连测试的同事都有点 眼花,幸运的是,文华(原云城技术总监)会每周举行”Bug消灭会”,专门针对近一周内出现的问题进行汇总、筛选,并当场找开发工程师解决,提出问题的根源,解决的方法。

有些bug隐藏在不同的版本中,A说a这个bug已经修复掉了,B说我在小b那个设备上还重现着呢,怎么可能修复掉呢?A对B说,你用的哪个设备?什么固件版本?组件版本是多少?B傻眼,无以回答…

以上的情景,在大多数的开发团队中会碰到,还有,做Android开发的朋友也喜欢做多个版本的迭代,如果不事先做好程序集版本的收集,那么,用户反馈上来的问题是哪个版本出现的,就不知道了。

另有一种情况,即:版本更新,应用内置检查更新功能,此时,server端需要拿到当前用户手上的版本号跟服务器的版本做比对,不一致的话,则进行更新..

二、解决之道

Windows Phone的解决方法与其他端并无差别,归纳起来,主要是获取Assembly中的Version值,代码如下:

   1:   /// 
   2:   /// 获取程序集版本号
   3:   /// 
   4:   /// 
   5:   public string GetVersionNumber()
   6:   {
   7:     try
   8:     {
   9:        string version = typeof(MainPage).Assembly.ToString();
  10:         if (!string.IsNullOrEmpty(version)
  11:             && version.IndexOf("Version=") >= 0)
  12:          {
  13:              version = version.Substring(version.IndexOf("Version=") + "Version=".Length);
  14:               version = version.Substring(0, version.IndexOf(","));
  15:                return "version " + version;
  16:          }
  17:         else
  18:          {
  19:              return "version unknown";
  20:           }
  21:       }
  22:       catch (Exception ex)
  23:        {
  24:           return "version unknown";
  25:         }
  26:    }

 

效果如下:

说明一点:

你在本地拿到的这个版本号与你把应用提交到Marketplace上获取的,不是同一个,切记!

总结:

应用版本的比对,版本更新的均可以使用此种方法处理,如果您有更好的方式,请告诉我。