In 2015, while still in college, I bought an iPhone 5c — yes, the one with the beautiful polycarbonate shell. That same year, I began exploring various iOS apps, writing review after review.
Little did I know that a decade later, I’d be creating my own iOS app and launching it on the App Store.
This is my 187th app review article, and perhaps my most special one, as I share with you an iOS app I’ve independently developed.
A Spontaneous Creation
As a witness of a 7.8 magnitude earthquake, I’ve always been particularly sensitive to seismic activity. While not every earthquake affects me directly, I’ve made it a habit to stay informed about recent seismic events.
I had been using another “earthquake alert” app until I noticed its update package had ballooned to over 500 MB. Puzzled by such a large size for an app that simply displays earthquake information, I jokingly mentioned on social media that I might just create my own earthquake info app.
Despite having no background in iOS development — no experience with Objective-C or Swift, and only a basic understanding of Python — I decided to take on this challenge.
The advent of ChatGPT and the impressive capabilities of AI, particularly the recently released Claude 3.5 Sonnet model, gave me confidence. While AI couldn’t write a complete iOS app from scratch, I believed it could help me overcome many hurdles. And so, my project began.
Pre-Coding Preparations
Before diving into coding, I needed to address some fundamental questions:
- What programming language and framework should I use for iOS app development?
- What development tools would I need?
- How should I design the app’s architecture? Where would the data come from? How would I store, query, and display it? How could I implement earthquake notification pushes?
- What should the app’s interface look like? What pages would I need?
- How do I submit the app to the App Store?
- How long would this project take?
Through a combination of AI consultations and independent research, I reached the following conclusions:
- Use SwiftUI, Apple’s recommended framework, to develop a pure native iOS app, minimizing third-party dependencies.
- Follow Apple’s Human Interface Guidelines, utilizing native controls to streamline the design process.
- Leverage Cloudflare’s serverless products for backend architecture, data storage, API provision, and message queue push notifications, avoiding the need to set up and maintain cloud servers.
- Allocate several weekends to complete the project, while also learning basic Swift syntax and SwiftUI usage to collaborate effectively with AI.
- Budget for the annual $99 Apple Developer account fee to submit the app to the App Store.
One Month Later…
My app was finally complete. I named it QuakeSense. It’s a straightforward iOS app that helps you view global earthquake information from multiple data sources and supports earthquake notification pushes. The iOS app installation package is under 1 MB, making it extremely lightweight.
Earthquake Awareness
QuakeSense features a clean interface with four main pages: Home, Earthquake Details, Data Insights, and Settings.
Home Screen
The home screen uses a drawer style similar to Apple Maps, presenting a list of earthquake information. Here, you can see the latest earthquake data, including classification, location, magnitude, and time of occurrence.
You can toggle between sorting options to view earthquakes by most recent or nearest to your location.
The top section uses the native iOS map to display earthquake locations and the distribution of all earthquakes in the list.
In addition to showing the Richter scale magnitude, the more prominent title is given to the earthquake classification. This follows the earthquake classification standard used by geological units, categorizing earthquakes as:
- Weak: Magnitude less than 3. Generally not easily perceptible unless the source is very shallow.
- Felt: Magnitude between 3 and 4.5. People can feel these, but they usually don’t cause damage.
- Moderate: Magnitude between 4.5 and 6. Can cause damage, but the extent depends on factors like source depth and epicentral distance.
- Strong: Magnitude 6 or greater. Earthquakes of magnitude 8 or higher are classified as major earthquakes.
This classification system is more intuitive than the Richter scale numbers, making it easier for users to quickly grasp the severity of an earthquake.
Earthquake Details
You can access detailed earthquake information by tapping on map markers or list items.
The details page also uses a drawer style, displaying more comprehensive earthquake information, including depth, epicenter coordinates, magnitude, intensity, distance, and the reporting agency.
Data Insights
The Data Insights page presents statistical information about earthquake data, including the number of earthquakes globally in the last 24 hours and 7 days, maximum magnitude, average magnitude, and more.
It also shows charts of earthquake distance distribution and magnitude distribution relative to your location.
You can use the filter in the top right corner to switch between data from different reporting agencies and view insights for specific organizations.
Settings
My goal was to create an app that’s easy for the average person to use. Both the main interface and the settings page are designed to be simple, minimizing unnecessary operations and focusing on truly relevant information.
In the Settings page, you can choose your default sorting method, default data source, and the minimum magnitude of earthquakes you want to follow.
Currently, QuakeSense supports multiple data sources, including the United States Geological Survey (USGS), European-Mediterranean Seismological Centre (EMSC), China Earthquake Networks Center (CEIC), Japan Meteorological Agency (JMA), and Central Weather Bureau (CWB) of Taiwan. You can choose the most appropriate data source for your region.
In theory, the reporting agency in your area often provides more timely and accurate earthquake information due to their denser network of monitoring stations. If you know of a more accurate earthquake data source for your region, please let me know, and I’ll try to add support for it.
You can also enable earthquake notification pushes in the settings. You’ll receive push notifications from QuakeSense when a felt earthquake occurs within 500 km of your location, or when a major earthquake (magnitude 7 or higher) occurs anywhere in the world.
Push notifications are based on a server-side message queue, ensuring you receive earthquake information promptly, even without opening the app.
Earthquake Early Warning
During the testing phase, some users asked why I didn’t include an earthquake early warning feature, as many apps claim to offer this functionality. I’d like to share my understanding of earthquake early warning systems versus earthquake notifications.
First, it’s important to understand a basic fact: earthquakes cannot be effectively predicted. No one can accurately predict whether an earthquake will occur, let alone its time, location, and magnitude.
The most feasible earthquake early warning method currently relies on the principle that electromagnetic waves travel faster than seismic waves. When an earthquake occurs, because there’s a certain distance between the epicenter and the user, we can use the time difference between the faster electromagnetic waves and the slower seismic waves to notify users in advance.
This is why you might have seen news reports or broadcasts in your neighborhood counting down, saying “Seismic waves expected to arrive in XX seconds.”
So, why doesn’t QuakeSense have an earthquake early warning feature?
The short answer: I cannot achieve a low enough latency to provide effective, truly useful earthquake early warnings.
Accurate and effective earthquake early warnings require minimal delays at every stage to alert users before seismic waves arrive. However, many stages involve delays:
- Seismic monitoring stations are unlikely to be located directly above the epicenter, so there’s a delay in receiving seismic wave signals;
- After receiving the signal, the monitoring station needs to calculate the epicenter location and transmit data to the data center, causing further delay;
- There’s a delay in the data source publishing the information;
- The app needs time to fetch the data and calculate the distance to the epicenter based on the user’s location;
- Different geological structures in various regions affect seismic wave propagation speed, requiring individual calculations and introducing more delay;
- Processing message queues and pushing notifications to a large user base through APNs (Apple Push Notification service) also takes time.
All these delays combined often exceed the time it takes for seismic waves to propagate, making effective earthquake early warnings nearly impossible to implement at the app level. Television or specialized warning broadcasts can deliver information faster due to their dedicated transmission networks.
There’s a saying in the earthquake preparedness community: “Small quakes don’t require evacuation, and for big quakes, you can’t outrun them.” This somewhat humorous statement reflects the reality of earthquake early warning systems.
So, while QuakeSense can’t help you predict earthquakes or escape them, it can keep you informed about seismic activity, provide timely earthquake notifications, help you stay concerned about your loved ones, and maintain vigilance to be better prepared.
Privacy Protection
I’ve launched a website for QuakeSense, which includes FAQs and a privacy policy. As someone who highly values privacy, I strive to protect user privacy as much as possible in my application, despite the often harsh realities of the digital world.
QuakeSense only collects two pieces of information from you: your approximate location and your device ID.
- Approximate geographic location: The reported coordinates are only accurate to the city level, used to calculate your distance from earthquake epicenters for push notifications and in-app distance features.
- Anonymous device ID: Used for Apple’s push notification service to send earthquake alerts to your device.
This data is encrypted and stored in Cloudflare’s D1 database. When users disable notifications or delete the app, making notifications unreachable, this data is automatically deleted.
macOS and iPadOS Support
Thanks to SwiftUI’s cross-platform capabilities, QuakeSense also runs on macOS and iPadOS. I’ve redesigned the interface layout for large-screen devices to ensure a better user experience on these platforms.
Currently, QuakeSense supports English, Simplified Chinese, Traditional Chinese, and Japanese, providing a better experience for users of different data sources.
Pricing and Conclusion
As my first iOS app, deciding on the pricing for QuakeSense took considerable thought. Ultimately, I decided to make it a paid app without any in-app purchases or subscriptions.
QuakeSense is priced at $2.99/year. Here’s why I chose to make it a paid app:
- I invested significant time, often sacrificing weekends that could have been spent with family and friends.
- QuakeSense incurs ongoing server costs and Apple Developer account fees.
- While a free app would attract more users, it would increase message queue service latency, potentially causing delays in earthquake notifications for users further back in the queue.
To maintain the quality of the product and service, I decided to set QuakeSense as a paid application.
QuakeSense was born from a sudden inspiration. I never imagined I’d create an iOS app or share this article on a tech platform. I simply wanted to make an app that I could use myself, and perhaps others would find it useful too.
You can download QuakeSense from the App Store or visit the QuakeSense website for more information.