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

2019 年初的 UWP 开发体验分享

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

    首先为程序打个广告:如果您喜欢看漫画,欢迎尝试使用「哔哩哔哩漫画 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.
    DonaidTrump
        18
    DonaidTrump  
       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     Solana     1648 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:17 PVG 00:17 LAX 08:17 JFK 11:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86