V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
LancerComet
V2EX  ›  分享创造

2019 年初的 UWP 开发体验分享

  •  1
     
  •   LancerComet ·
    LancerComet · 2019-02-16 00:51:50 +08:00 · 7059 次点击
    这是一个创建于 1890 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先为程序打个广告:如果您喜欢看漫画,欢迎尝试使用「哔哩哔哩漫画 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

    34 条回复    2019-09-24 20:22:49 +08:00
    pod
        1
    pod  
       2019-02-16 01:06:30 +08:00 via Android   ❤️ 1
    强势关注
    ych8398527
        2
    ych8398527  
       2019-02-16 01:10:21 +08:00 via Android   ❤️ 1
    关注
    May725
        3
    May725  
       2019-02-16 01:10:38 +08:00 via iPhone   ❤️ 1
    赞,文章写得很用心
    hjc4869
        4
    hjc4869  
       2019-02-16 01:16:47 +08:00   ❤️ 1
    webp 可以直接建一个 C++项目编译 libwebp,然后 C#这边 P/Invoke。
    LancerComet
        5
    LancerComet  
    OP
       2019-02-16 01:31:00 +08:00 via Android
    @hjc4869 感谢,之后试试
    duskdandelion
        6
    duskdandelion  
       2019-02-16 01:36:24 +08:00 via Android
    原来是群里的大佬
    litmxs
        7
    litmxs  
       2019-02-16 01:41:56 +08:00 via Android
    这是 Bilibili 官方的吗?还是第三方?
    ragnaroks
        8
    ragnaroks  
       2019-02-16 08:42:46 +08:00
    XAML 喜欢吗?
    喜欢就砍了
    neko2
        9
    neko2  
       2019-02-16 09:04:22 +08:00   ❤️ 1
    .瑟瑟发抖
    LancerComet
        10
    LancerComet  
    OP
       2019-02-16 09:56:37 +08:00 via Android   ❤️ 1
    @litmxs 已是漫画官方客户端
    @ragnaroks 说错了,我十分讨厌 XAML
    hljjhb
        11
    hljjhb  
       2019-02-16 10:51:57 +08:00 via Android   ❤️ 1
    好评 前两天有在 windows store 看到
    azh7138m
        12
    azh7138m  
       2019-02-16 11:40:05 +08:00 via Android   ❤️ 1
    好评,这就回去给 640 充电(
    哎,话说 B 站 App 没有上架 play 的计划吗?
    我觉得 web 看漫画体验还可以,某些盗版漫画网站改版之后的前端水准相当高,比哔咔还要舒服不少(
    azh7138m
        13
    azh7138m  
       2019-02-16 11:41:43 +08:00 via Android
    > 而且整个项目中没有产品经理的介入我觉得是最爽快的一点

    切图狗表示赞同。
    verrickt
        14
    verrickt  
       2019-02-16 11:55:48 +08:00 via Android   ❤️ 1
    希望微软今年能在 build 上发力 XAML
    Myprincess
        15
    Myprincess  
       2019-02-16 12:23:50 +08:00   ❤️ 1
    用户路过
    dhssingle
        16
    dhssingle  
       2019-02-16 13:01:53 +08:00 via iPhone   ❤️ 1
    支持,目前在用 Surface 看漫画,不得不说大屏幕就是爽。
    lynskylate
        17
    lynskylate  
       2019-02-16 13:12:55 +08:00 via Android   ❤️ 1
    uwp 刚出来没多久的时候,写过一个大作业,xaml 体验很棒,当时还运行在已经在天国的 win10 的 lumia 950xl.
    tulongtou
        18
    tulongtou  
       2019-02-16 13:22:24 +08:00 via iPhone   ❤️ 1
    uwp 不是死掉了吗 还弄这个干啥
    LancerComet
        19
    LancerComet  
    OP
       2019-02-16 13:30:24 +08:00 via Android
    @azh7138m Play 其实是锁区了,酷安有很多搬运; Web 版正在开发,实际上我也认为先上 Web 比较合适,比较手机看起来很难受,但奈何大家觉得手机入口比较重要
    luojianxhlxt
        20
    luojianxhlxt  
       2019-02-16 13:39:00 +08:00
    其实我挺想知道
    B 站的两个官方 UWP,是怎么合作的呀
    B 站找的你们还是你们毛遂自荐的
    mmdsun
        21
    mmdsun  
       2019-02-16 13:47:16 +08:00 via Android
    @tulongtou Windows 10 mobile 死掉了。uwp 还没。Xbox,HoloLens 还都是 uwp
    LancerComet
        22
    LancerComet  
    OP
       2019-02-16 13:52:18 +08:00 via Android
    @tulongtou Mobile 版本 GG,不过不代表 UWP 完蛋
    azh7138m
        23
    azh7138m  
       2019-02-16 13:54:30 +08:00 via Android
    @LancerComet 漫画 app 能有啥入口。。。一个月打开个位数次,对 w10m 用户来说 app 才比较重要,有的时候浏览器适配是有点尴尬的
    lizhuoli
        24
    lizhuoli  
       2019-02-16 18:25:41 +08:00 via iPhone   ❤️ 1
    身为公司还能支持这种所谓的业余兴趣,真的爽啊。哪像我们,UWP 的今日头条和抖音都是完全第三方开发者自己搞的,API 全靠抓包,感觉和公司氛围有关
    deepred
        25
    deepred  
       2019-02-16 20:27:01 +08:00   ❤️ 1
    @lizhuoli 忙着双月计划,哪有时间搞这种没 OKR 的东西
    LancerComet
        26
    LancerComet  
    OP
       2019-02-16 23:07:52 +08:00 via Android
    @lizhuoli 所以个人还是很感激的,在国内感觉可遇不可求
    winoros
        27
    winoros  
       2019-02-17 14:09:05 +08:00 via Android   ❤️ 1
    支持
    ipad 是不是只能等网页版了
    LancerComet
        28
    LancerComet  
    OP
       2019-02-17 14:54:24 +08:00 via Android
    @winoros iPad 正在适配中
    inoki
        29
    inoki  
       2019-02-19 22:58:04 +08:00 via Android
    请教一下生成 upload 包之后本地 certificate 一直通不过,各项都显示 nullpointer,原因未知。但真机和模拟器运行都可以正常运行,审核那边大丈夫?😂
    LancerComet
        30
    LancerComet  
    OP
       2019-02-19 23:08:10 +08:00
    @inoki 没遇到过这种问题,感觉是不是那个测试工具的事情?不过微软那边的审核看起来只是装上去用一会而已,如果能运行估计也就放走了
    inoki
        31
    inoki  
       2019-02-20 02:26:37 +08:00 via Android
    嘛,我这边也是这样感觉的,看审核结果啦!
    Handle
        32
    Handle  
       2019-02-21 01:03:03 +08:00
    赞,正好平板上需要一些靠谱的 UWP 应用,库喜+1
    inoki
        33
    inoki  
       2019-02-22 12:31:35 +08:00 via Android   ❤️ 1
    @LancerComet 好了好了,看来是本地认证工具的问题了,谢啦老哥
    nsynet
        34
    nsynet  
       2019-09-24 20:22:49 +08:00
    如果是使用 Electron 开发,受众应该是至少多 10 倍吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1126 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:36 · PVG 07:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.