博客园客户端(Universal App)开发随笔 – App也需要物流前的打包

想起来一个笑话:唐僧一行千辛万苦来到佛祖面前,准备取经,佛祖轻声问了一句:汝等带U盘了吗?师徒4人立刻昏倒在地。好吧,扯远了,不过是想告诉大家准备工作一定要到位。

Universal App 的打包发布其实与传统的 Windows Phone / Windows Store App 项目并无太大不同,但是鉴于总有人会在这些步骤中遇到问题,而且即使是发布过几个应用的开发者也不例外,所以对这个看起来比较繁琐的过程做一个小结还是必要的。

打包前的准备工作

1. 修改编译模式

在调试程序时,我们通常会选择 debug 模式,但是发布时不要忘记切换到 Release 模式,否则程序打包后连验证程序都不会执行,更不用说上传到应用商店了。为了保证程序在所有设备上都运行,我们选择 Any CPU,这样就可以保证我们的 UAP 运行在所有可以运行的平台上(包括基于 ARM 架构的 Windows RT 平板和基于 x86 架构的平板,例如 Surface Pro)了。

2. 修改 Manifest 文件

Manifest 文件记录了项目中的一些基础元数据,包括项目名称,申请的权限,项目的 Logo 和发布者信息等等,只有这些信息都填写完整并且准确,打包的文件才能保证通过上传时的自动验证。

在项目中我们可以找到本项目的 appxmanifest 文件。

我们还可以通过菜单中的选项找到修改 Manifest 文件的入口。

下面我们来逐个标签检查 Manifest 文件的内容是否完整。

在 Application 标签页中,我们需要填写项目的基本信息,并确认是否需要修改对应的屏幕旋转方向和在锁屏时如何通知用户。

与 Windows 项目不同的是, Windows Phone 项目还需要用户填写是否允许将 App 安装到 SD 卡的选项。

在 Visual Assets 标签页中,我们需要将所有用到的 Logo 图片做好对应,一般来说,如果在 Assets 文件夹中图片的命名规范正确的话,这里可以自动检测并将图片自动载入的。

需要注意的是,Badge Logo 的图片要求比较严格,要求只能有白色和透明两种颜色,哪怕有一个像素出现别的颜色,都会在自动验证程序时检测到并且不予通过,所以修改这几个图片的时候要务必小心,确认只包含白色和透明色。

在 Capabilities 页面,我们需要填写项目申请的权限,例如本项目必须在网络下运行,所以必须申请 Internet 权限。最关键的注意事项是,任何 Windows App,如果申请了网络权限,就必须在 Setting 菜单中添加隐私声明 (Privacy Statement)的入口,否则会不能通过人工审核阶段。关于如何添加隐私声明,请参考之前的博客:博客园客户端(Universal App)开发随笔 - Setting Page的实现方法与经验

Windows Phone 的项目还需要额外填写对于设备传感器的申请,如果在 App 中应用到了陀螺仪,磁场传感器,NFC,前/后摄像头等资源,需要在这里予以声明。

在 Declarations 标签页中,我们要对 App 使用的其他资源进行声明,例如博客园项目使用到了后台任务,就需要在这里声明后台任务的入口。

如果 App 使用到了特殊的通知事件,可以在 Content URIs 页面进行声明,需要注意的是,Windows 8.1 仅支持 https 协议的安全页面,不再支持 http 协议。

Packaging 页面非常关键,这里的任何一项填错都会导致项目通不过上传时的自动审核。不过好在如果我们在下面的步骤中选择了将项目对应到商店中的 App,那么这个页面中的大部分项目都会自动填好。而如果我们选择仅仅打包,委托别人帮忙发布,那么这些信息就一定要填写完整。本页面中需要填写的信息,可以在对应的开发者账户页面找到信息。

另一个注意事项是最后的 Generate app bundle 选项。如果选择了 always,那么如果之前的 Visual Assets 中有对应的多种尺寸的图片,那么打包时就会生成一个对应多种尺寸设备的整包(bundle)。这样以后再更新项目,也必须上传一个 bundle,否则就不能通过上传审核。这也意味着,Assets 文件夹里的图片只能增加,不能再减少。

当然以上的所有项目,我们都可以右键点击 manifest 文件,选择 view code 进行修改或更新。貌似这也是一个更适合 geek 的方法。

开始打包

Manifest 文件修改完之后,我们就可以开始正式的打包工作了。

这里我们选择 Create App Packages

在这里,有两种选择,选择Yes是直接登陆 Microsoft Dev 账户,将项目和商店中的 App 进行绑定,这样 Manifest 文件中关于开发者的信息会自动更新到 Microsoft Dev 账户的对应信息。这种方式适用于自己发布自己项目的情况。

选择No是不登陆账户,仅仅打包。这种情况适用于委托第三方帮忙发布项目的情况,或者是想先打个包出来给别人共享用作测试,测试完成后,你就可以直接用这个测试包提交应用了,这样更符合一般的工作流程,避免你的测试包和最后提交商店的包不一致。

我们强烈建议选择No,使用第二种方式。 在下一篇随笔中会详细说到如何提交应用。

我们先选择第一种,登陆 Microsoft Dev 账户。

登陆以后,该开发者之前提交过的项目就都显示出来,我们也可以为新项目重新预留一个名字。

为项目选择版本信息,输出位置,是否打包生成和 CPU 等信息。

都填写完之后,就可以打包项目了。打包完成后,会显示项目位置,并会提醒开发者为项目执行验证程序(Windows App Certification Kit)。由于上传后服务器会首先执行这个程序对项目进行初次自动验证,如果有不合规范的地方就不予通过,所以为了确保上传的成功性,我们通常会在本机先执行一次验证程序。

如果验证程序在本机通过,那么就可以向商店上传应用了。由于篇幅所限,我们会在将来的文章中继续介绍商店上传的注意事项。

总结

本文按照流程介绍了 Universal App 在上传商店前的打包步骤,并分析了 Windows 和 Windows Phone App打包时的细小区别和容易导致上传失败的注意事项。

我们的已经发布的应用和代码可以在下面找到:

Windows Phone Store App link:

http://www.windowsphone.com/zh-cn/store/app/博客园-uap/500f08f0-5be8-4723-aff9-a397beee52fc

Windows Store App link:

http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059

GitHub open source link:

https://github.com/MS-UAP/cnblogs-UAP

MSDN Sample Code:

https://code.msdn.microsoft.com/CNBlogs-Client-Universal-9c9692d1

时间: 2024-07-28 23:37:04

博客园客户端(Universal App)开发随笔 – App也需要物流前的打包的相关文章

博客园客户端(Universal App)开发随笔 - Setting Page的实现方法与经验

前言 几乎所有的移动 App 都会为用户提供一个设置页面(Setting Page 或 Preference Page),来满足大家对于一个 App 众口难调的需求.虽然有一种说法表示,最好的 App 不需要设置,一切默认呈现给用户的就是最好的选择.但是对于大多数开发人员来说,这样的境界不是可以简单达到的:而且对于部分“设置控”用户来说,没有设置页面怎么看都觉得少了些什么.所以对于大部分 App 来说,设置页面还是一个必备品. 本文将分别介绍 Windows 和 Windows Phone 的设

博客园客户端(Universal App)开发随笔 - UAP中的项目和目录组织

前言 本篇随笔主要是分享一下做一个Universal App的目录组织结构,说明什么样的结构才能适合一个团队开发,使开发成员之间的相互影响最小.这些组织好的项目和目录会成为一个公共的规约,大家都能知道什么东西应该放在哪里,或者在什么地方能找到什么功能.这对于避免重复写code或者最大限度地复用code来说是至关重要的. 这种工程结构和目录划分虽然没有什么理论基础,但是是经过我们很多项目的经验总结出来的,如果是个人开发者,也严重建议参考此组织结构,能够帮助你理清思路,做好功能设计和类设计. 项目组

博客园客户端(Universal App)开发随笔 -- 样式管理与夜间模式

以今天的眼光来看,一个好应用首先是要有好的用户体验.而好的用户体验最直观的就来自于用户界面.好的用户界面则需要好的设计,更需要好的实现.今天我们就向大家分享一下我们在使用Xaml实现界面设计上的一点心得. 样式管理 我们拿到的设计,大多是一张红线图,布满了距离,字号,色号,事无巨细的量化了我们的用户界面.如果我们就这样把各种属性照搬到上Xaml文件中,那看起来就非常不妙了,比如这样: <TextBlock Text="首页"FontFamily =" Segoe WP

博客园客户端(Universal App)开发随笔 – UAP 项目的发布

在费尽无数脑细胞开发出一款 App 并且通过测试,自我感觉良好的时候,我们一定希望我们的 App 能够尽快出现在商店的首页上,被人下载,使用,打分,评价,反馈,甚至是被无情地喷.但据本人经验,通常从项目打包好(打包的具体注意事项,请参见前文),到通过审核,其他用户在商店可以看到,往往都像新手第一次编译程序一样,一波三折,弹出不同的错误和警告,这个时候,只有耐下性子,一个一个问题都解决了,才能顺利通过审核.所以我觉得还是很有必要写点什么,讲一下 App 发布时的注意事项,省得大家多走弯路. 虽说开

博客园客户端(Universal App)开发随笔 - 应用漫游数据(roaming)

当用户在多个windows设备上使用应用时,我们希望用户的某些设置和数据可以在多个之间共享,比如我们新版本中收藏的文章.通常情况下要实现这种功能,我们可能需要自己弄个服务器或者使用onedrive等网站来存放文件,但是对于我们这种小型的应用有点过了,额外增加了代码和维护的工作.这种时候使用windows roaming就是一个比较方便的选择. 所谓的漫游数据,MSDN上是这样介绍的: Windows 8 可在用户设备之间自动传输某些应用数据.应用开发人员无需再执行费力的工作.漫游应用数据为最终用

博客园客户端(Universal App)开发随笔 -- 数据基础准备

在开始之前,我们先了解下博客园提供的接口: 博客: http://wcf.open.cnblogs.com/blog/help新闻: http://wcf.open.cnblogs.com/news/help 以博客园_48小时阅读排行为例,返回的Xml如下图(RSS,如果你用IE打开的话,会提示你订阅..). 博客园的大部分API返回的都是RSS(还提供分页!),如果只是做一个简单的RSS reader,可以直接用SyndicationClient,在RetrieveFeedAsync后会把X

博客园客户端(Universal App)开发随笔 -- App的精灵:自定义控件

前言 拿到一个App的需求后,对于前端工程师来说,第一步要干什么?做Navigation规划!第二步要干什么?做页面分解!页面分解如何做?首先要确定UI Element的容器,其次要抽象UI Element本身,也就是要做一堆自定义控件,最终组成整个页面.今天我们就说说自定义控件如何实现吧. 感性认识 在我们的博客园UAP的Windows Phone的版本中,一个最重要的自定义控件就是PostControl,它的样子如下图中红色矩形内所示. 这个控件在无数页面中都要用到,而且有几种变种.上面看到

博客园客户端(Universal App)开发随笔 -- 增量加载 (incremental loading)

在我们的应用(博客园UAP)中,加入了ListView上拉获取更多内容的功能(GridView也可以),这个功能是通过ISupportIncrementalLoading接口实现的,这是个从Windows 8就开始提供的接口(当然你可以通过ScrollViewer来实现这个功能,只不过稍微麻烦点,还要自己再封装..). 这个接口的定义十分简单: public interface ISupportIncrementalLoading { bool HasMoreItems { get; } IAs

博客园客户端(Universal App)开发随笔 - Hello, Universal

在移动和云成为微软的主题之后,Windows Phone 8.1 手机和Windows 8.1平板也渐渐成熟,吸引了越来越多的开发者.为了让开发者们高效的开发一款跨手机和平板的应用,微软顺势推出了Universal应用的概念. 今天我们想向大家分享怎样用C#和XAML语言开始开发一个跨Windows 8.1和 Windows Phone 8.1 的 Universal 应用. 准备 首先硬件方面我们的计算机要支持Hyper-V功能或者有一部运行Windows Phone 8.1 操作系统的手机.