惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Engineering at Meta
Engineering at Meta
B
Blog
博客园_首页
量子位
博客园 - 叶小钗
L
LangChain Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
D
DataBreaches.Net
雷峰网
雷峰网
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
I
Intezer
H
Help Net Security
The Hacker News
The Hacker News
The Register - Security
The Register - Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AWS News Blog
AWS News Blog
V
V2EX
Microsoft Security Blog
Microsoft Security Blog
T
Tenable Blog
Spread Privacy
Spread Privacy
A
Arctic Wolf
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Schneier on Security
Schneier on Security
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Last Watchdog
The Last Watchdog
Latest news
Latest news
T
Troy Hunt's Blog
L
LINUX DO - 热门话题

HANG ♥ WRITING

ChatGPT 问世两年,我在 AI 的辅助下成为了一名 iOS 业余开发者 如何使用 Netcat 构建简单的安全聊天系统 App Store 中国大陆 ICP 备案最佳实践 几款有意思的 Google Chrome 侧边栏扩展应用 GetVM 让编程学习更快一步 WildCard (野卡) - 国内用户零门槛订阅 ChatGPT、Claude、App Store 万里汇开发者收款使用全指南 | 注册、开户与账户绑定教程 中国大陆居民开通华侨银行(OCBC)海外账户完全指南 实用的 macOS 内置命令,省下买第三方应用的钱 《认知觉醒》之触动学习法 不是程序员也可以搞开发,一小时入门 Retool 低代码 疫情来袭,手把手教你在家制作美味炒鸡 企业微信机器人 Webhook 推送语雀更新消息 基于 Cloudflare Workers 部署的 JSON Database 数据库 印象时间:印象笔记出品的时间管理应用 Pixelmator Photo 2.0: 桌面级功能并适配 iPhone Shortery:Mac 快捷指令自动化 Pixelmator Pro 2.3:AI 背景去除 Quit All:一键退出应用程序 Raycast:推出官方扩展商店和开发者平台 简悦 API 2.0:收藏助手和快照功能 HomePod mini 使用体验 Prizmo 5.5:扫描效果增强并新增批注功能 Notion:近期值得关注的新特性 Google Analytics 替代品,零成本和零门槛搭建 umami.is Infuse 7:一款近乎完美的视频播放器 Gyroscope 4.14:新的产品名称和多项改进 V day:在手机上创作短视频 Things 3.14:备注支持 Markdown,同步速度加快 MoneyWiz 2021:新的通知选项和视觉改善 Doppler:管理和分享你的本地音乐 CARROT Weather:5.3 带了多项新特性 Obsidian:知名知识管理工具推出移动应用 NOMO RAW:专业 ProRAW 相机 Tape:全能且好用的录屏软件 Apple Design Award 2021 Craft 1.6:每日笔记重磅更新 Trakt:官方 iOS 应用全新上线 Notion:支持 API 和自动化集成 Varlens:iOS 专业相机应用 Infuse 7:不只是 M1,支持所有 Mac 简悦:支持 API 和自动化流程 奇妙组件:小而美的自定义 iOS 小组件 Farbox 2:支持自部署和多站点的开源博客系统 图图记账:高颜值记账应用 Coppice:帮助整理你的想法 DarkModeBuddy:基于光线切换深色模式 走进微软成都 Office,聊一聊 Microsoft 365 HapiGo:符合国情的效率启动器 Eagle 2.0:数十项功能更新 + 数倍的性能提升 无需记账,通过更新余额了解自己有「多少资产」 Dato:支持日历和时区的菜单栏时钟 极具潜力的效率启动器 App,Raycast 脚本功能详解 Pixelmator Pro 2.0.2:增加新效果,支持 ProRAW Raycast:面向开发人员的效率启动器 Sorted:全新的 Mac 版本,原生支持 Apple Silicon App Store 和 Google Play 的 2020 年度 App 榜单 VSCO:全新的视频效果和拍摄模式 Pixelmator Pro 2.0:全新设计并支持 M1 芯片 Maipo 4:全功能新浪微博 macOS 客户端 Bartender 4:Mac 菜单栏定制工具 JSBox:适配并支持 iOS 14 小组件 Little Snitch 5:macOS 上出色的流量监控与防火墙应用 Photoshop:更多的 AI 创意工具 Capslox:文本操作快捷键增强效率工具 Airport:TestFlight 测试应用商店 Disk Drill 4:全新设计,支持 macOS 11 Big Sur OneWidget:小组件中的瑞士军刀 Todoist:新增看板视图 IFTTT Pro:合理的定价、全新的特性 PooPoo Privacy Policy QuakeSense Privacy Policy | 震感 App 隐私政策 ThenNow Privacy Policy | 今昔 App 隐私政策 LaunchBar 6.13:支持 macOS Big Sur 24 Hour Wallpaper:近百张 Mac 动态壁纸 简悦 2.0 阅读模式 + 标注系统 + 稍后读 绕过 App Store 付费,Setapp 采用新的 iOS 付费应用解锁策略 Noto 笔记:2.3 版本带来 10 余项功能更新 PliimPRO:让 Mac 一键进入演示模式 Pixelmator Pro 1.7:文字输入、画布旋转和 ML 超分辨率更新 Ulysses 20:新增导航面板和中文拼写检查 Mailbrew:新增 Inbox 集中订阅 Newletter Fluent Reader:免费跨平台 RSS 阅读器 Moment:高颜值 Mac 状态栏倒数日应用 Meeter:集中管理你的远程会议 Adobe Lightroom:新版带来了众多实用特性 WWDC:在 Mac 上观看 WWDC 直播和视频 LongWe:Mac 上的文本长图生成工具 Photoshop Camera:风格独特的艺术效果 Empoche:任务管理和时间追踪二合一 Camera+ 2:Magic ML 带来照片处理新魔法 Tuck:将窗口停靠在屏幕边缘 Wormhole:在电脑上操作 iOS 和 Android 设备 Coherence X:一键将网页转换为桌面应用 Charty:让快捷指令支持图表可视化 Edison Mail:又一款免费邮件客户端 Service Station:定制 Mac 右键菜单 WatchSmith:前所未有地个性化 Apple Watch Data Jar:为捷径设计的数据库 Zappy:Zapier 出品的截图录屏应用
QuakeSense 震感,一款简洁原生的 iOS 地震通知 App
huhuhang · 2024-08-28 · via HANG ♥ WRITING

2015 年,还在上大学的我买了一部 iPhone 5c。对,就是那款非常漂亮的聚碳酸酯外壳手机。

同年,我在网上看到了少数派,并向其投递了一篇关于 VSCO App 的 体验文章。正是那篇如今看来非常青涩的短文,让我开始不断地体验各式各样的 iOS 应用,并且写下了一篇又一篇的 App 体验文章。

我不曾想过,十年后的今天,我会自己编写一款 iOS App,并且发布到 App Store 上。

这是我的第 187 篇 App 体验文章,也可能是我最特别的一篇文章,将这款由我自己业余时间开发的 App 分享给你。

即兴之作

我日常会关注地震消息,作为 2008 年大地震的亲历者,我对地震有着特殊的敏感度。虽然不是每一次地震都会影响到我,但我还是会习惯性看看最近哪里发生了地震。

我之前一直在用某款「地震预警」App,直到有一天我发现它的更新包已经超过 500 MB。我实在无法理解一款查看地震信息的 App 为什么会有如此庞大的体积,于是就开玩笑地在社交媒体上说,我打算自己写一个地震信息 App。

但是我完全不懂 iOS 开发,没有学过 Objective-C,也没有学过 Swift。我只是学过一点点 Python,了解一些基本的开发概念。

然而,自从 ChatGPT 问世之后,AI 的能力让大家印象深刻。尤其是前段时间推出的 Claude 3.5 Sonnet 模型,得到了很多人的好评。

虽然 AI 没办法从零写出一个完整的 iOS App,但我认为它能帮我解决很多问题。于是,我真的开始了这个项目。

编码之前

开始行动,不意味着我就可以开始编写代码。我需要先解决一些基本问题:

  1. iOS 应用的技术选型,选择什么编程语言,用什么框架?
  2. iOS 应用的开发工具,我需要什么软件?
  3. 地震 App 的架构设计,数据从哪里来,如何储存,查询,展示?如何实现地震通知推送?
  4. App 的界面设计,我需要哪些页面,如何设计?
  5. App 的发布,如何提交到 App Store?
  6. 预计的时间成本,我需要多久才能完成?

当然,除了这些问题,我还需要解决很多其他问题。但是,这些关键问题是我真正开始开发之前必须要了解或想清楚的。

于是,我通过询问 AI + 查询资料的方式,大致得出了一些结论:

  1. 使用 Apple 推荐的 SwiftUI 来开发一款纯原生的 iOS App,不使用第三方框架,尽量减少依赖。
  2. 参考 Apple 提供的 人机界面指南,尽量使用原生控件,省去界面设计。
  3. 使用 Cloudflare 提供的各种无服务器产品来搭建后端架构,存储数据,提供后端接口,消息队列推送等。避免需要自己搭建和维护云服务器。
  4. 我可能需要数个周末来完成这个项目,同时我需要学习一些基本的 Swift 语法和 SwiftUI 的使用方法,以便我能很好地和 AI 合作。
  5. 我需要每年交 688 元来开通 Apple Developer 账号,以便我能提交 App 到 App Store。

One Month Later...

我的 App 终于完成了,我将它命名为 QuakeSense(震感)。这是一款简单的 iOS App,它可以帮助你查看全球的地震信息,包括多个数据源,同时支持地震通知推送。

地震感知

QuakeSense 的界面非常简洁,它包含 4 个页面:主界面,地震详情页面,数据洞察页面和设置页面。iOS 端的安装包体积也做到了 1 MB 以下,非常轻量。

主界面

主页面使用了类似 Apple Maps 的抽屉样式,呈现地震信息列表。你可以在这里看到最新的地震信息,包括地震的分级,位置,震级,时间等关键信息。

主界面

你可以通过切换选项进行排序,按时间最近或者距离你位置最近来查看。

同时,上方使用了 iOS 原生地图来展示地震的位置,以及列表中所有地震的分布。

除了直接展示里氏震级之外,更醒目的标题留给了地震分级。这里采用了中国地质科学院地质研究所的 地震分级标准,将地震分为:

  1. 弱震:震级小于 3 级。如果震源不是很浅,这种地震人们一般不易觉察。
  2. 有感地震:震级等于或大于 3 级、小于或等于 4.5 级。这种地震人们能够感觉到,但一般不会造成破坏。
  3. 中强震:震级大于 4.5 级、小于 6 级。属于可造成破坏的地震,但破坏轻重还与震源深度、震中距等多种因素有关。
  4. 强震:震级等于或大于 6 级。其中震级大于等于 8 级的又称为巨大地震。

相比于里氏地震的数字,这种分级更加直观,更容易让用户理解和第一时间了解地震的危险程度。

地震详情

你可以通过点击地图上的标记,列表中的地震条目来打开地震详情页面。

地震详情页面

详情页面同样采用了抽屉样式,这里会展示更加详细的地震信息,包括地震的深度,震中经纬度坐标,震级,烈度,距离,测定机构等详细信息。

数据洞察

数据洞察页面展示了地震数据的统计信息,包括全球最近 24 小时和 7 天的地震数量,最大震级,平均震级等信息。

数据洞察页面

同时,这里还会展示距离你所在位置的震距分布图,震级分布图等。

你可以通过右上角的筛选项,来切换不同测定机构的数据,单独查看某个机构的数据洞察结果。

设置

我希望做一款普通人易用的 App,无论是主界面还是设置页面,我都尽量保持简洁,减少用户不必要的操作,关注真正值得关注的信息。

在设置页面,你可以选择默认的排序方式,默认的数据源,以及默认关注的最小震级。

设置页面

目前,QuakeSense 支持美国地质调查局(USGS)、欧洲地中海地震中心(EMSC)、中国地震台网中心(CEIC)、日本气象厅(JMA)、台湾中央气象局(CWB)等多个数据源,你可以根据自己所在地区,选择合适的数据源。

理论上,你所在地区的测定机构往往可以更加及时和准确地提供地震信息,因为他们安装的测定站密度更大且距离更近。如果你所在地区有更准确的地震数据源,欢迎反馈给我,我会尽量支持添加。

同时,你可以在设置里面开启地震通知推送。当你所在位置,500 Km 以内发生有感地震,或者全球发生 7 级以上的大地震时,你会收到来自 QuakeSense 的推送通知。

推送通知基于服务端消息队列,确保你可以在不打开 App 的情况下,第一时间了解到地震信息。

地震预警

在测试期间,有用户问我为什么不做地震预警功能,因为很多 App 都有所谓「预警」的功能。我愿意分享一下我自己对地震预警和地震通知的理解。

首先,这里提到一个基本常识:地震是无法被有效预测的。 也就是说,没有人能够准确预测地震是否会发生,更不要说地震发生的时间、地点和震级。

目前最为可行的地震预警方案,是利用电波比地震波快的原理。即当地震发生后,因为震中距离用户有一定距离,地震波传播速度比电波(光速)慢,可以利用这个时间差,提前到通知用户。

所以,你可能在之前看过一些新闻,电视或者小区广播会进行倒计时播报,说「地震波预计 XX 秒后到达」。

那么,QuakeSense 为什么没有地震预警功能呢?

先说结论:我无法做到足够低的延迟,提供有效的、能够真正起到预警作用的地震预警通知。

准确有效的地震预警,需要各环节的延迟都足够低,才能在地震波到达用户之前,提供有效的预警通知。但是很多环节都存在延迟:

  1. 地震测定基站不太可能刚好位于震源上方,所以收到地震波信号,存在延迟;
  2. 测定基站收到信号后,需要计算震源位置,传输到数据中心,存在延迟;
  3. 测定数据源发布数据,存在延迟;
  4. App 获取数据,根据用户位置信息,计算与震源的距离,存在延迟;
  5. 不同地区的地质构造,导致地震波在地层中的传播速度不同,需要独立计算,存在延迟;
  6. 处理消息队列,通过 APNs 推送服务向大规模用户推送消息,存在延迟。

所有这些延迟加起来,可能已经远超地震波传播的时间,导致有效的地震预警几乎不可能在 app 端实现。而电视或者专门的预警广播,由于其专用的传输网络,可以更快地传递信息。

小震不用跑,大震跑不了。这是四川人民经常调侃的一句话,但也是地震预警面对的现实。

所以,QuakeSense 不能帮助你提前预知地震,或者逃离地震。但它可以帮助你了解地震信息,及时获取最新的地震通知,关心你的家人和朋友,保持警惕,做好应对准备。

隐私保护

我为 QuakeSense 上线了一个 网站,包含常见问题和 隐私政策。我个人非常重视隐私保护,虽然现实往往非常残酷,但我仍然希望自己的应用能够尽可能保护用户的隐私。

QuakeSense 官网

QuakeSense 只会收集你的两项信息:你的大致位置信息和设备 ID。

  1. 大致地理位置,上报坐标只会到所在城市区域,用于计算你和震中的距离,以便于推送地震通知和实现 App 中的距离功能;
  2. 匿名设备 ID,用于 Apple 推送服务,以便于向你的设备推送地震通知。

这些数据被加密存放在 Cloudflare 的 D1 数据库中,当用户关闭通知功能或者删除 App 导致通知不可达时,这些数据会被自动触发删除。

macOS 和 iPadOS

得益于 SwiftUI 的跨平台特性,QuakeSense 也可以在 macOS 和 iPadOS 上运行。我为大屏设备重新设计了界面布局,使得用户在大屏设备上也能够更好地使用 QuakeSense。

适配大屏幕设备

目前,QuakeSense 以及适配了中文简体、中文繁体、英文和日文,为不同数据源的主要用户提供了更好的体验。

定价和结语

QuakeSense 是我开发的第一款 iOS App,是否收费的确思考了很久。最终,我决定将它设置为一次性收费应用,不包含任何内购和订阅。

QuakeSense 的中国区定价为免费下载 + 2.99 美元/年 Pro。

Pro 版本拥有消息通知、更完整的历史数据和数据洞察功能。

以下是我设为付费应用的原因:

  1. 我付出了时间,特别是牺牲了陪伴我的家人和朋友周末时间,长期维护和更新 App 需要付出更多的时间和精力;
  2. QuakeSense 需要支付一定的服务器费用,以及 Apple Developer 账号费用;
  3. 免费会带来更多用户,但是消息队列服务的延迟会增加,排在队列后面的用户可能会更晚收到地震通知;

QuakeSense 诞生于一念之间,我没有想到我会写一款 iOS App,也没有想到我会在少数派上分享这篇文章。我只是想做一款自己用得上的 App,也许你也会用得上。

你可以前往 App Store 免费下载 QuakeSense,或者访问 QuakeSense 网页 了解更多信息。