我用 SwiftUI 写了一个 V2ex 客户端

image.png

关于 SwiftUI

自 WWDC2019 苹果发布 SwiftUI 来已经三年了,直到最近我才体验了一把 SwiftUI 在苹果人机交互技术生态中带来的变革,从浅浅的使用体验下来感受最强的几个点:

  1. 迟到的 “命令式 -> 声明式” :做为老一批 iOSer 在没接触 React、没接触 Flutter 之前,各种 pushViewController()/addSubview() 的命令式操作或许体感并不强烈,了解和体验真正的虚拟 DOM + 声明 UI 后瞬间感觉世界的美好,设计和算法对研发体验、架构的影响之强烈。
  2. 这次或许是苹果认真做多端统一了:当然 UIKit 一直统一着 iOS, iPadOS, tvOS,但是 macOS 仍然是同等对应级别的 AppKit 却和 UIKit 截然不同,过去由于 iPhone 的畅销引起 iOS 生态(基于 UIKit)盛极一时,无论是开源社区还是人们的经验沉淀,但 macOS 上的 AppKit 由于低层的分裂生态应用明显弱于 iOS,对于企业来说维护一个 macOS 客户端带来的成本也相对较高。SwiftUI 的出现从渲染层、控件层摈弃历史包袱真正开始考虑多平台一致性。

灵感来源

V2exOS 的灵感源自我逛 GitHub 无意间看到的一个叫 RedditOS 的 Reddit 客户端,也是用 SwiftUI 编写,UI 非常有 macOS Native 风,加上平常经常逛 V 站,搜了一下 iOS 客户端社区有很多, macOS 客户端还没有人做过,基础 API 都还算齐全,于是想着做一个 V2ex 社区的 macOS 客户端来练练 SwiftUI 的手。

RedditOS

SPM (Swift Package Manager)

V2ex 相对来说有比较完善的 RESTful API 设计,其 API 2.0 Beta 也是增加了 Access Token 的认证机制,这也是我选择基于 V2ex 来做的原因之一。

既然站长有设计标准的 API 规范,那其实可以可以有一套某种语言实现的 API 包装,不用每个做客户端的小朋友都去写一个 Network Service 层,基于这一点我单独 po 了一个包叫 V2exAPI,一个 V2ex API 的 Swift 封装,支持 iOS/macOS,通过 SPM 引入并支持 Swift5.5 的 async/await 语法。

Xcode 将 SPM 集成的很丝滑(前提是你得有访问丝滑的网络环境),相比 CocoaPods 免去了 pod init/pod install 等步骤,只管加依赖、运行你的项目,只是如果遇到网络不给力,可能还是需要切换到终端走代理拉取。

xcodebuild -resolvePackageDependencies -scmProvider system
Xcode - Swift Package Manager

Xcode Cloud 体验

V2exOS 一直都通过 Xcode Cloud 进行 TestFlight/AppStore 分发,相比 Jenkins 的高运维成本,Bitrise 的配置成本,总体感觉 Xcode Cloud 的体验还是要领先一大截的,几个优势:

  1. 你不用再关心什么是 “证书”,只管构建!!!
  2. 构建完成等同于自动上传 AppStore 待发布,不需要再通过 Xcode Arichives/altool 等工具上传了(网络不好传半天)
  3. 构建速度还行(以 V2exOS 这样的小项目为例,Archive 时间 6 分钟)

当然也存在一些特有或共性问题:

  1. CocoaPods 不是一等支持公民,用它就慢!(V2exOS 只用了 SPM)
Xcode Cloud

广而告之

第一次尝试去宣传一个开源项目,在 V2ex 分享创造板块获得了 7000+ 次点击 + 70 人收藏,然后做为《科技爱好者周刊》的忠实读者,突发奇想要不也去自荐一下,没想到很快被阮一峰老师给收录进了第 225 期,那几天也带来不少的流量。

在发布一个半月的时间,GitHub 星星数量突破了 500 ✨

V2exOS GitHub star history

开源的魅力

更多人知道这个开源项目后,有不同的人以不同方式参与进来,通过 Issue 提报缺陷,通过 Pull Request 贡献 feature,“开放” 和 “兴趣” 把大家连接到一起,这就变成了一件更有趣的事情了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容