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

春节自学了 SwiftUI 7 天,今天终于上架了第一款 iOS APP,分享一下过程

  graetdk · 2022-02-16 11:32:46 +08:00 · 16386 次点击
这是一个创建于 793 天前的主题,其中的信息可能已经有所发展或是发生改变。
开发这个 APP 的起因是去年有一段时间我时不时会得口腔溃疡,我想记录一下,我口腔溃疡的发作频率和每次持续的时间,一开始是用备忘录,但记录起来很麻烦,所以我有了想做这样一个记录 APP 的想法

坦白说我 17 年就准备学一下 iOS 开发,但是拖延了,19 年再次想学,甚至都买了苹果开发者资格,但。。还是拖延了,今年是第三次,这次我选了春节,这样时间比较充裕,每天差不多 3-4 个小时,通过苹果官方的教程和斯坦福 cs193p 公开课(白胡子大爷讲的那个),基本了解了 swiftUI 和 MVVM 的思维,总的来说,对我来说是很大的挑战,因为我之前的经验偏后端,很多东西完全是新的

春节结束之后我每天继续花 2-3 个小时写这个 APP ,因为太菜,踩了很多坑,真正写 UI 和逻辑的时间其实不多,大量的时间花在踩坑和找解决方案上面了,但这个过程也很有乐趣,以至于我缩减了很多在大表哥 OL 里玩德州扑克的时间

最终的 APP 是这样:





你可以设置一些追踪项,例如口腔溃疡,喝咖啡,流鼻血,有心动的感觉等等等等,然后在其发生的时候很快记录一下,此后就可以通过一个 GitHub commit log 风格的图表看到其发生频率和趋势,也能看到你的历史记录

整个 APP 不向除了苹果官方之外的任何服务器发送数据,我没有后端服务器,也没有使用任何第三方统计,广告代码什么的,记录数据也只保留在你的本地和 iCloud 文稿,并且支持导出导入,总之安全隐私应该没得说。


作为我的第一个 iOS 作品,不得不承认,还有很多因为我技术不足而未完成的细节,但我之后会继续慢慢打磨,争取做成一个精致的小工具


APP 名字叫 Becord ,直接在 App Store 搜可能搜不到,可以搜 Becord 元记录,也可以直接通过链接获取: https://apps.apple.com/cn/app/becord/id1608773156


另外附上我学习的资源:
Apple 官方开发者教程: https://developer.apple.com/tutorials/app-dev-training/getting-started-with-scrumdinger
斯坦福公开课: https://cs193p.sites.stanford.edu/
122 条回复    2022-04-13 15:25:04 +08:00
1  2  
Leonard
    1
Leonard  
   2022-02-16 11:34:34 +08:00
新学的就做了 app 上架,挺牛逼的,不管怎样支持一下
crayygy
    2
crayygy  
   2022-02-16 11:34:48 +08:00
厉害啊,自学七天就能出成果,非常有执行力了
levon
    3
levon  
   2022-02-16 11:37:01 +08:00
orzz
    4
orzz  
   2022-02-16 11:37:06 +08:00
厉害了,看来是有基础啊 老铁
rimutuyuan
    5
rimutuyuan  
   2022-02-16 11:39:21 +08:00
界面设计很好看,前端开发吗
graetdk
    6
graetdk  
OP
   2022-02-16 11:40:16 +08:00
@orzz 之前主要有写后端的经验,但我代码水准其实比较菜,swiftUI 整体重塑了我很多基础的概念,我觉得这个还挺重要的
graetdk
    7
graetdk  
OP
   2022-02-16 11:40:55 +08:00   ❤️ 1
@rimutuyuan 说来你可能不信,完全是苹果原生的组件,这也是编译出来只有 2M 大小的原因
Pogbag
    8
Pogbag  
   2022-02-16 11:44:30 +08:00
下载支持了 UI 不错
qq316107934
    9
qq316107934  
   2022-02-16 11:46:25 +08:00
楼主可以分享下使用的 SwiftUI 的学习教程吗? 我使用官方教程学习发现学不到大部分控件和排版的用法,只能跟着官方代码一步一步走。
Leonard
    10
Leonard  
   2022-02-16 11:48:36 +08:00   ❤️ 1
@qq316107934 #9 楼主最后发的那个斯坦福公开课 CS193P 就挺好的,比官方教程好
graetdk
    11
graetdk  
OP
   2022-02-16 11:49:25 +08:00   ❤️ 1
@qq316107934 一步步走就能学到很多了,我不知道你看的官方教程是哪个,我知道是有两个,一个相册的,一个是我贴的 Scrum 的,后者能学到更多,按教程最终做出来的是完全够上架标准的一个 APP 了
Varsion13
    12
Varsion13  
   2022-02-16 11:51:59 +08:00
棒诶
uCharles
    13
uCharles  
   2022-02-16 11:53:24 +08:00
口腔溃疡就买意可贴 ,第二天就好了
graetdk
    14
graetdk  
OP
   2022-02-16 11:53:25 +08:00
@Leonard CS193P 没得说,但是对我这种没经验的人来说,有点点吃力,先刷一下官方的再看就会好不少,个人感觉
graetdk
    15
graetdk  
OP
   2022-02-16 11:54:12 +08:00
@sugz 那个靠激素,据说用多了会不管用,我只有比较严重的时候会用
qq316107934
    16
qq316107934  
   2022-02-16 11:54:32 +08:00
@Leonard @graetdk 抱歉,没看到 post 最后一行。感谢。
我就是按照 Scrumdinger 走的,学到一半发现各种排版方式都是只能按照官方走,自己排出来就很丑,也可能是我理解不到位哈哈,之前写过 Vue 一类的单页面前端,但是排版还是不太一样。
VoyagerOne
    17
VoyagerOne  
   2022-02-16 11:57:25 +08:00
刚好需要这种记录时间间隔的软件,试试看,好用就订阅一下
moohng
    18
moohng  
   2022-02-16 12:00:51 +08:00
你这个 UI 好漂亮,是自己设计的吗?我是前端开发,每次想做一个什么东西的时候,都卡在了 UI 上,然后就进行不下去了
graetdk
    19
graetdk  
OP
   2022-02-16 12:02:21 +08:00   ❤️ 1
@moohng 是的,但是用的都是 iOS 的原生组件,我也是慢慢调的,觉得好看就保留,不好看就换一个这样
youthfire
    20
youthfire  
   2022-02-16 12:14:01 +08:00
很棒的分享,一直也想尝试,然后又独守在 Python 上没有敢踏出一步
Hequndev
    21
Hequndev  
   2022-02-16 12:14:03 +08:00 via iPhone
UI 真挺好看的,看了一下版本要求 IOS15.晚点试用看看。
Pazakui1259
    22
Pazakui1259  
   2022-02-16 12:17:50 +08:00   ❤️ 10
花了点时间试了试您的 App ,发现了一些问题,希望能在细节上继续优化:
1. 免费版我能添加 3 个另外的 track ,加上默认的 3 个我就有 6 个了,超出了免费版我能用的 5 个。
2. 很多英语翻译不是很通顺,大小写没有正确使用,中间用了很多中文标点,结尾没有句号等。比如主界面的提示那里。
3. Set Track 那里的 section 的 header 希望能变成 footer ,明明是解释用的语句。
4. 主页的设置按钮可不可以改成 ToolbarItem(placement: .primaryAction)直接放在标题右边?
5. 内购的那个 Sheet 好像 ScrollView 前面还套了一层别的 view ,导致白色边框,而且没有关闭按钮,英文的文案也有打错,trail➡️trial 。
6. 希望所有的 picker 样式都能.pickerStyle(MenuPickerStyle()),默认的打开另一个页面的样式跳跃感很大不是很美观。
7. 添加 record 的加号和别的按钮都太靠近了。希望也能和上面那个主页设置按钮一样直接变成 ToobarItem ,编辑和分享可以放在屏幕下面。
8. 希望能支持 Application Shortcut ,就是能在桌面长按图标进行快捷操作,比如快速给某个 track 添加 record 。
9. 没有对无障碍进行优化,旁白情况下完全无法正常使用 App 。
Borden
    23
Borden  
   2022-02-16 12:20:19 +08:00
楼主你那个大方块和小点点是用的 LazyGrid 么?我找不到一个定行定列的非 Lazy 的 grid view ,好难受
chiaf
    24
chiaf  
   2022-02-16 12:21:39 +08:00   ❤️ 1
@qq316107934 教程也可以下载 raywenderlich 上面的书籍,有两种,一个学徒级的,还有一个 tutorial
《 SwiftUI Apprentice 》,《 SwiftUI by Tutorials 》
graetdk
    25
graetdk  
OP
   2022-02-16 12:21:41 +08:00
@Pazakui1259 感谢!你提到的一些是我已经知道并且准备下个版本改的,有些是我真没想到的,我之后会更新的~
MakHoCheung
    26
MakHoCheung  
   2022-02-16 12:33:33 +08:00
我 7 天 Swift 都没学完
xz410236056
    27
xz410236056  
   2022-02-16 13:28:52 +08:00
swiftUI 现在很多功能还不完善(也有方便的地方),比 UIKit 功能少很多,storyboard Xib 也很方便。当玩具学习还行,项目上不太好用。
codespots
    28
codespots  
   2022-02-16 13:36:53 +08:00
dk 的执行力好强啊
nl101531
    29
nl101531  
   2022-02-16 13:44:43 +08:00
666 ,这个软件很有用
graetdk
    30
graetdk  
OP
   2022-02-16 13:45:18 +08:00
@MakHoCheung 我也没学完,就能用的先学着
Immortal
    31
Immortal  
   2022-02-16 13:46:33 +08:00
问个题外话
如果想搜索类似斯坦福等大学的优秀课程,能在什么地方看到课程列表或者怎么个搜索姿势?
直接在斯坦福等的 youtube 帐号下搜索吗
wwnje
    32
wwnje  
   2022-02-16 13:46:55 +08:00
比我棒。。我用了一个月
UI 看起来很简洁
wwnje
    33
wwnje  
   2022-02-16 13:48:06 +08:00
graetdk
    34
graetdk  
OP
   2022-02-16 13:49:10 +08:00
@Immortal YouTube 有,B 站也有搬运的
Immortal
    35
Immortal  
   2022-02-16 13:49:57 +08:00
@wwnje #33
谢谢
不过我指的是类似的 比如我想学其他方面的东西 想优先搜索优秀大学的课程 不一定是 swift
caisanli
    36
caisanli  
   2022-02-16 13:51:35 +08:00
还是要有英文基础才能学
没有找到好的中文教程
要不就是太旧
Immortal
    37
Immortal  
   2022-02-16 13:51:55 +08:00   ❤️ 1
在知乎找到一个列表
https://zhuanlan.zhihu.com/p/391591909
qq73666
    38
qq73666  
   2022-02-16 13:53:36 +08:00
iOS15 以上?😓
crs0910
    39
crs0910  
   2022-02-16 14:00:57 +08:00
有 bug ,我添加了一项「跳绳」追踪,然后编辑默认追踪里面的 「 Emotions 」 新加了两个选项,保存之后发现「跳绳」被新的 「 Emotions 」覆盖了。原来的「 Emotions 」还在。
环境:m1 mac
FightPig
    40
FightPig  
   2022-02-16 14:03:16 +08:00
lz 执行能力很强啊
crs0910
    41
crs0910  
   2022-02-16 14:04:39 +08:00
复现了,当编辑一个选项类型的追踪时,在添加选项时,输入完名字不点加号而是直接点右上角的更新时可以触发
daQiuQiu
    42
daQiuQiu  
   2022-02-16 14:09:19 +08:00
执行力好高啊
graetdk
    43
graetdk  
OP
   2022-02-16 14:09:47 +08:00
@crs0910 我没有复现,能否麻烦发个录屏给我哇?微信 Z3JlYXRkaw==
crs0910
    44
crs0910  
   2022-02-16 14:17:46 +08:00
qiaobeier
    45
qiaobeier  
   2022-02-16 14:20:25 +08:00
我光研究怎么上架就花了至少一个礼拜😂
graetdk
    46
graetdk  
OP
   2022-02-16 14:21:50 +08:00
@crs0910 收到!我研究下,但目前真的还没对 Mac 或者 iPad 适配,看着有点辣眼睛,建议还是在手机上使用~
crs0910
    47
crs0910  
   2022-02-16 14:22:39 +08:00
触发了上面的问题之后,删掉所有追踪的时候会崩溃退出,重新打开被删掉的会回来。
andyforxxx
    48
andyforxxx  
   2022-02-16 14:25:10 +08:00
即刻上是不是也发过,我在即刻上也看到 lz 的动态😄
graetdk
    49
graetdk  
OP
   2022-02-16 14:27:39 +08:00
@andyforxxx 是的,正是在下
x86
    50
x86  
   2022-02-16 14:28:08 +08:00
原来是你,早些年在 V2EX 的一个微笑群见过楼主,印象很深
x86
    51
x86  
   2022-02-16 14:28:15 +08:00
微信群
crs0910
    52
crs0910  
   2022-02-16 14:29:00 +08:00
@graetdk 那可能就是同时显示双栏导致的状态更新问题。用了下手机版,很好,没问题。
ninevcat
    53
ninevcat  
   2022-02-16 14:37:18 +08:00
赞 执行力很高
xff1874
    54
xff1874  
   2022-02-16 14:51:42 +08:00
优秀,行动力也强。我也时不时有念头,一直没动手
ypzhou
    55
ypzhou  
   2022-02-16 14:53:56 +08:00
面包多站长吗 厉害
AlwaysBee
    56
AlwaysBee  
   2022-02-16 14:54:10 +08:00
@xz410236056 SwiftUI 3 我感觉还行,基本上我要做的功能都能实现了
eason1874
    57
eason1874  
   2022-02-16 14:56:52 +08:00
网页不太行了,我也想做点 APP 卖

想知道做一款收费 iOS APP 需要什么条件呢?个人可以吗?我只知道注册要开发者费用
graetdk
    58
graetdk  
OP
   2022-02-16 14:59:17 +08:00   ❤️ 1
@eason1874 个人就可以,699 一年的开发者会员费
xz410236056
    59
xz410236056  
   2022-02-16 15:08:33 +08:00
@AlwaysBee #56 button 设置不同 Event 这种常见需求都需要通过复杂自定义实现
angith
    60
angith  
   2022-02-16 15:17:50 +08:00
很棒,我以前也一直有做一个类似这样的小东西来记录生活😄
V9NN
    61
V9NN  
   2022-02-16 15:19:05 +08:00
手持安卓,但是电脑是 macOS 系统,想用这个工具,楼主可以开放桌面端适配吗?(貌似苹果新开发套件支持跨平台)
graetdk
    62
graetdk  
OP
   2022-02-16 15:27:36 +08:00
@V9NN 我研究一下
AmberJiang
    63
AmberJiang  
   2022-02-16 15:28:19 +08:00
厉害啊 楼主 向你学习绑👍🤝
hccsoul
    64
hccsoul  
   2022-02-16 15:31:49 +08:00
站长这是打算亲手写面包多的 ios 客户端?
jasonchen168
    65
jasonchen168  
   2022-02-16 15:34:25 +08:00
追踪项名称不支持输入中文吗?
graetdk
    66
graetdk  
OP
   2022-02-16 15:52:04 +08:00
@jasonchen168 支持啊,图是英文的 demo
graetdk
    67
graetdk  
OP
   2022-02-16 15:52:28 +08:00
@hccsoul 我们有 iOS 同学了,用 OC 在写
Tyuans
    68
Tyuans  
   2022-02-16 16:04:11 +08:00
溃疡吃维生素 c 真的管用,好的快些。
AlwaysBee
    69
AlwaysBee  
   2022-02-16 16:05:06 +08:00
@xz410236056 我理解的 button 常见的 event 通常就是点击、长按、悬浮这些都有原生的实现呀。不知道你指的是哪些场景呢?如果是想包含多种 event ,貌似和 event 的监听顺序是有关系的
glovebx
    70
glovebx  
   2022-02-16 16:11:41 +08:00
执行力很强了,我一直想学一直还没动手(今年一定学
lurui45
    71
lurui45  
   2022-02-16 16:39:40 +08:00
长按记录弹框后的确认记录按钮能否不要放在右上角,单手很难按到。
graetdk
    72
graetdk  
OP
   2022-02-16 16:44:07 +08:00
@lurui45 右上角是系统带的一个东西,用起来比较方便,我后面看能不能自己写一个好看点的放下面
xz410236056
    73
xz410236056  
   2022-02-16 16:44:14 +08:00
@AlwaysBee #69 你理解的那些不叫 event 。。。是 Gesture 才对

这些才是 event ,点击和点击也是不同的,按下就触发,和按下松手才触发是两个事件。这些东西在 swiftUI 中是需要你自己自定义的,而且还挺麻烦。
AlwaysBee
    74
AlwaysBee  
   2022-02-16 16:48:36 +08:00
@xz410236056 这些确实是没有,不过我还真没有遇到这类 event 的需求,可能业务还是太简单了
Chad0000
    75
Chad0000  
   2022-02-16 16:49:17 +08:00
楼主执行力好强啊,我的 APP 都两年了还没弄好。当然两年是业余时间。
sillydaddy
    76
sillydaddy  
   2022-02-16 16:51:18 +08:00
楼主厉害,执行力没得说。
SwiftUI 确实很易用,没有移动端开发经验的我,在仅看过那个 cs193p 教程后,就感觉非常有信心开发一个 App 了。
yunyuyuan
    77
yunyuyuan  
   2022-02-16 17:00:13 +08:00
ui 挺好看的
rbe
    78
rbe  
   2022-02-16 17:20:45 +08:00   ❤️ 1

app 大小好评
doitbull
    79
doitbull  
   2022-02-16 17:28:54 +08:00
哈哈,在即刻看到了
declandragon
    80
declandragon  
   2022-02-16 18:10:14 +08:00
牛逼了,支持一下
Chism
    81
Chism  
   2022-02-16 18:11:23 +08:00 via Android
用 SwiftUI 开发的 App 是不是要求 iOS 11 以上才能安装?
graetdk
    82
graetdk  
OP
   2022-02-16 18:12:57 +08:00
@Chism 我用了一些新特性,要求 iOS 15 。。。。
cssk
    83
cssk  
   2022-02-16 18:24:38 +08:00 via iPhone
整个 tintcolor 都红色了,navigation bar 返回按钮是默认的蓝色,不协调
wingkwanli888
    84
wingkwanli888  
   2022-02-16 18:56:28 +08:00
@graetdk last month, last quarter 那幾個控件叫什麼啊,第一次見這種 button
abc635073826
    85
abc635073826  
   2022-02-16 18:59:37 +08:00
光执行力就得 5 星
WhiteQian
    86
WhiteQian  
   2022-02-16 19:02:48 +08:00
@sillydaddy cs193p 都 50 个小时了,能看完也很强了
sillydaddy
    87
sillydaddy  
   2022-02-16 19:59:00 +08:00
@WhiteQian 难道我们看的不是一个吗?
- https://cs193p.sites.stanford.edu 或者 https://www.youtube.com/playlist?list=PLpGHT1n4-mAsxuRxVPv7kj4-dQYoC3VVu
- 16 个视频
- 每个视频大概 80~90 分钟,总共约 22~24 小时

有 2 个 App 的开发过程,不一定都看,而且虽然讲得很细致,有些地方还是可以倍速播放的。
edinina
    88
edinina  
   2022-02-16 20:06:16 +08:00 via iPhone
话说问问大伙儿零基础到这种程度的话,需要学点啥,大概多长周期。主要还是感兴趣
littlewing
    89
littlewing  
   2022-02-16 20:33:45 +08:00
厉害,学 7 天,2-3 小时就能做成这样
littlewing
    90
littlewing  
   2022-02-16 20:34:13 +08:00
我看了 7 天 rust ,还是一句都写不出来(手动狗头.jpg )
Mistwave
    91
Mistwave  
   2022-02-16 20:49:20 +08:00 via iPhone
nice 啊 实现力超高
su0818
    92
su0818  
   2022-02-16 21:01:46 +08:00 via iPhone
发现你这个 app 完全是之前一个帖子的需求啊

https://www.v2ex.com/t/832056?p=1

加油啊
Chism
    93
Chism  
   2022-02-16 21:18:16 +08:00 via Android
@graetdk 哈哈,确实是 7 天
AsianChampion
    94
AsianChampion  
   2022-02-16 21:20:00 +08:00 via iPhone
怎么不是中文,你的用户大部分也是中文用户啊
graetdk
    95
graetdk  
OP
   2022-02-16 21:52:12 +08:00
@AsianChampion 做了中文和英文两个版本的,图用的是英文的,用户我希望能做全球化,虽然比较困难
Procumbens
    96
Procumbens  
   2022-02-16 22:09:42 +08:00   ❤️ 2
@Immortal
我之前有整理过一些,主要是美国 Top 4 大学的公开课程: https://learncs.me/curriculum
以后有机会有时间我再加点
graetdk
    97
graetdk  
OP
   2022-02-17 00:11:36 +08:00
@wingkwanli888 Picker ,style 为 segmented
Maskeney
    98
Maskeney  
   2022-02-17 03:20:21 +08:00
之前用过一个类似的 叫 知我
wanacry
    99
wanacry  
   2022-02-17 08:38:04 +08:00 via iPhone
美区貌似搜不到
peterswan
    100
peterswan  
   2022-02-17 08:49:10 +08:00
App 做到这样很不错了,我也有学习 SwiftUI 的计划,希望能和楼主一样坚持下来
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1094 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 18:39 · PVG 02:39 · LAX 11:39 · JFK 14:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.