2019 年初的 UWP 开发体验分享

2019-02-16 00:51:50 +08:00
 LancerComet

首先为程序打个广告:如果您喜欢看漫画,欢迎尝试使用「哔哩哔哩漫画 UWP 」,我正在努力将其打造成为体验接近 PerfectViewer / ComicsViewer / MangaMeeya 等老牌漫画软件的 UWP 漫画应用,心情舒畅地在 Windows 大屏设备上阅读漫画,当然还处于早期,有问题可按程序中提供的方式进行反馈,感谢支持,商店地址: https://www.microsoft.com/store/apps/9NN9L42J9FS3

由来

本来这是一个 Side Project,我的本职工作是 Web 切图仔,所以这是一个个人项目,一开始的目标只是让自己能够使用 Surface 去阅读漫画而已,不过在和其他人交流的工程中,慢慢变成希望能够和大家一起分享,所以就开始往更加细致的方向打磨,做成一个大概能拿出来给大家使用的程序.

至于使用 UWP 而没有选择 Electron 之类的主要还是因为 UWP 程序的触摸体验要好很多,在 Surface 上看漫画的话触摸体验是刚需,不过这也意味着放弃了熟悉的技术选型和跨平台部署,不过没关系只要最终好用就行了.

开发体验

我个人感性地认为微软的这套技术( XAML 的 WinUI + C#)的开发体验是非常好的,比拿社区的东西东拼西凑要舒服很多,所有事情微软都帮你做的一清二楚,从丰富的 API 到最后的部署打包整个流程非常紧凑,丝毫没有打断的感觉,我认为特别是 JS 社区需要学习的地方,三大金刚除了 Angular 因为其定位不同所以功能比较完整之外,其他两个需要拼凑的东西很多,刚开始的体验就比较糟心(比如公司使用 Vue + TS 的面向对象,所以要额外配置 TS 的 Loader、写好 TSLint、自定义 VueLoader、规划项目结构划分模块、实现可以注入至 VueComponent 的 ServiceContainer、实现 TS 反射的 DI、自己配置 Jest 等等等等).

个人本身就比较偏好标记语言写界面,所以 XAML 深得我心,再加上 Web 视图框架借来的 MVVM 已被微软实践好多年,所以上手速度就是一个字快,十分容易接受,而且 XAML 的功能确实强大,Web 上能实现的功能它基本全都有,而且微软新为 UWP 加入的特性让你的选择更广,结果就是出人意料的灵活,我一开始总觉得 Windows 的程序界面不会灵活到像 Web 一样,但结果是真有一拼.

WinUI 内置的 UWP 组件功能还是比较齐全,设备交互上做的十分完善,已经做好了各种外设的交互处理,非常省心;内置组件的可制定性很高,可以通过模板完全自己控制,魔改一番还能保持已有功能,加分;另外微软也实现了很多诸如懒加载、虚拟列表等细节功能,可以省去很多自己写代码实现的时间.

UWP 用 C# 开发的话有时候给人一种在用脚本施展魔法的错觉,优秀的语言 + 高度封装的接口设计使得精力完全集中在程序业务实现,不管过了多久键盘上都会留下浓浓的糖的味道,两个字舒服. 虽然身为切图仔但个人还是比较推崇在工程上使用面向对象来构建,能够最大程度统一代码风格,稳固项目结构,因此 C# 也没给个人带来什么困扰,反而因为不用去实现一堆 ServiceContainer 啊 DI 啊的轮子什么的变得更省心了.

另外大家也知道 UWP 限制很多,不能那么随心所欲,不过因为没有什么 Win32 经验所以不敢过多评论,因为对于一个漫画阅读器来讲 UWP 的功能是完全足够了.

三方生态

用其他热门语言的眼光来看确实很惨,常见的东西有一些但也不那么丰富,比如想找一个 webp 的解码轮子然而并没有,最终还是使用 jpg 放弃了 webp ;比如设计师会使用 AE 制作 SVGA 动画在程序中使用,UWP 就完全没有这个东西,不过自己简单使用 Win2D 造了一个之后会用上去——总之以干活的眼光看还是少.

程序上架和数据打点

程序打包直接用 VS 向导完成后上传微软商店即可,程序审核时间最长经历过两天,最短 40 分钟,幺蛾子不多,不像苹果一样严格到发疯. 数据打点使用巨硬家的 AppCenter,无缝与 UWP 集成的 SDK 非常方便,数据打点 API 也十分简单,程序崩溃自动记录并上传,很省心.

项目体验

虽然是个人的 Side Project,不过公司同事对本项目的态度还是很积极的,在 Leader 的支持下也变为了官方名义版本,一位后端同学专门为 UWP 开发了独立接口(一个也算啊 (:3 」∠ ❀) ),账号部门的同学帮忙协助解决极验验证码的问题,所以心里是非常非常感激的,这种编码之外的工作体验对个人的激励是非常大的.

不过 UWP 这种 .NET 技术栈的东西,在国内互联网公司中的基础设施建设就是 0,所以有很多东西是要重新造的,比如登录、评论、支付、JSBridge 等等,这些组件在很多公司基本都是公司级别的通用组件,业务部门只负责调取,平台部门负责实现,在面对什么都没有的情况下只能自己从头开始,不过好在需要造的东西不是很多,和相关部门的同学沟通也很顺利,还是在相对短的时间内实现了基础功能. 当然有一些东西就直接将计就计,比如评论就直接嵌了一个网页评论组件而已.

而且整个项目中没有产品经理的介入我觉得是最爽快的一点——按照自己的口味去做设计,按照自己的想法实现功能,然后上架让大家使用,没有乱七八糟的条件约束,这应该是很多朋友也包括我一直想做的事情之一,现在稍稍摸到了这个成就还是比较开心的 (:3 」∠ ❀)

另外多亏当年对美术产生的浓厚兴趣,再加上接触设计类工具软件较早并且在一直使用没有荒废,因此就算在没有设计师的支援下,做出来的东西大概应该没有瞎到各位,自认为正常使用应该是没问题的吧.

一些不佳的体验

因为算是刚刚接触,所以有时候会被微软的迷之 API 迷惑,比如 WinRT 和 .Net Framework 的混搭,能找到多个可以实现相同功能的 API,相关讨论比较少,所以需要多花点时间摸索;有时候会碰到一些有 Bug 的 API,不过多是 .Net 遗留下来的,一般使用 UWP 的新 API 可解决——总之就是相关讨论确实比其他语言少,所以要花的时间多一点.

另外就是微软的文档,你说它全吧它确实挺全的,但有时候感觉逻辑上不清晰,比如一个组件上的重要使用方式会放在设计规范文档中; API Document 有些带示例有些不带就不太方便;还有一些新 Feature 没有详细文档,只有一个类似博文的 Introduction,而且还可能因为 Nuget 的包比较新细节上略有不同,反正文档上总会有些瑕疵吧,不过总体来讲还是很全的.

另外目前 UWP 使用 Sqlite + EF Core 不太友好,比较折腾,简单的说就是 Migration 需要使用 CLI 进行手工操作,还需要先将项目转换为 .NET Standard 项目后进行操作之后再转为 UWP Application,感觉有些山寨,而不是直接改表定义改 Entity 之后自动迁移.

还有就是 VS + Resharper 那个流畅度真的不咋地啊,程序一开多就慢到不行了(但我又离不开 JB 家的习惯).

总结

至今为止微软的 UWP 生态依然很薄弱,当然这和当下的需求和历史进程有关,不过从个人感情来讲,还是希望微软的生态建设越来越好,这两年微软的态度大家都有目共睹;对于本应用,希望还是能够继续完善下去,毕竟作为十年前钻被窝用 PSP 看漫画的基佬,如今使用自己开发的程序在看漫画,还是想要以认真负责的态度来对待,成为自己理想中的目标.

很少写文章记录,感谢您的阅读.

PS:一个微小的贡献,适用于 UWP 的 SVGA 播放器: https://github.com/LancerComet/SVGAPlayer-UWP

7328 次点击
所在节点    分享创造
34 条回复
mmdsun
2019-02-16 13:47:16 +08:00
@tulongtou Windows 10 mobile 死掉了。uwp 还没。Xbox,HoloLens 还都是 uwp
LancerComet
2019-02-16 13:52:18 +08:00
@tulongtou Mobile 版本 GG,不过不代表 UWP 完蛋
azh7138m
2019-02-16 13:54:30 +08:00
@LancerComet 漫画 app 能有啥入口。。。一个月打开个位数次,对 w10m 用户来说 app 才比较重要,有的时候浏览器适配是有点尴尬的
lizhuoli
2019-02-16 18:25:41 +08:00
身为公司还能支持这种所谓的业余兴趣,真的爽啊。哪像我们,UWP 的今日头条和抖音都是完全第三方开发者自己搞的,API 全靠抓包,感觉和公司氛围有关
deepred
2019-02-16 20:27:01 +08:00
@lizhuoli 忙着双月计划,哪有时间搞这种没 OKR 的东西
LancerComet
2019-02-16 23:07:52 +08:00
@lizhuoli 所以个人还是很感激的,在国内感觉可遇不可求
winoros
2019-02-17 14:09:05 +08:00
支持
ipad 是不是只能等网页版了
LancerComet
2019-02-17 14:54:24 +08:00
@winoros iPad 正在适配中
inoki
2019-02-19 22:58:04 +08:00
请教一下生成 upload 包之后本地 certificate 一直通不过,各项都显示 nullpointer,原因未知。但真机和模拟器运行都可以正常运行,审核那边大丈夫?😂
LancerComet
2019-02-19 23:08:10 +08:00
@inoki 没遇到过这种问题,感觉是不是那个测试工具的事情?不过微软那边的审核看起来只是装上去用一会而已,如果能运行估计也就放走了
inoki
2019-02-20 02:26:37 +08:00
嘛,我这边也是这样感觉的,看审核结果啦!
Handle
2019-02-21 01:03:03 +08:00
赞,正好平板上需要一些靠谱的 UWP 应用,库喜+1
inoki
2019-02-22 12:31:35 +08:00
@LancerComet 好了好了,看来是本地认证工具的问题了,谢啦老哥
nsynet
2019-09-24 20:22:49 +08:00
如果是使用 Electron 开发,受众应该是至少多 10 倍吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX