FlyLines

View GitHub Repository

FlyLines is my second iOS app released to the App Store. As a continuation of my previous work, Vocab, I decided to dive deeper into different frameworks and more detailed views

This page will mostly be talking about development and descriptions of the app

The app's original name was "InitialPlace", which then got changed to "SoaringSkyPath", and eventually "FlyLines"

Specifics of the development

Setup

Development started on December 22nd, with the app being sent for review on January 2nd, 2025

The app was initially denied over a naming convetion problem, being sent for review again on January 6th, being approved and released two days later, on January 8th, 2025

Features

The app's main focus is being a flight logger with a connected flight route map. It is composed of 6 main pages/views. We will explain these views in this section. Helper views will be discussed last

Profile Page

The profile page shows the user's logged flights and statistics about those flights. Both the flights list and the statistics list are presented via a dropdown menu, and can be collapsed or expanded as the user's desire

Each flight will be displayed with a Fligh Summary View, which shows the following information the following information:

  1. The flight's airline symbol/logo in the left side
  2. The airline's name
  3. The origin airport and destination airport's ICAO Code, with an arrow pointing the direction of the flight
  4. The aircraft type
  5. The date the flight was done

The statistics section will display the following information, in this order

  1. Number of flights logged
  2. The number of airlines the user has flown with and a list of the airlines with the amount of flights in each one (ranked by amount of flights)
  3. The number of airlines the user has flown to or from and a list of the aiport with the amount of flights in each one (ranked by amount of flights)
  4. The number of states the user has flown to or from and a list of the states with the amount of flights in each one (ranked by amount of flights)
  5. The number of routes (combination two airports, regardless of direction) the user has done and a list of the routes with the amount of flights in each one (ranked by amount of flights),followed by two side by side lists of which airports the user has departed from and which airports the user has arrived at, both ranked by amount of flights
  6. The amount of miles travelled and list of route's mileages (ranked by longest to shorted)
  7. The number of aircraft types the user has flown in and a list of those ranked by amount of flights in each one
  8. Three side by side lists ranking the user's location, row and type of flight seats

Add Flight Page

This page serves as the actual "flight logging" section of the app. For a flight to be logged, the user has to present the following information

  1. Origin and destination airports, which can be searched via full name or ICAO code (some airports may have their IATA code also added to facilitate searching). This area is mandatory, and the "Save" button will not be active if the fields are empty or if the specified airport is not recognized
  2. The airline the user flew with. This list ordered alphabetically and will default to the first airline. Favorite airlines will appear at the top of the list, and will contain a star next to their name
  3. The aircraft type the user flew in. This list is also sorted alphabetically and will default to the first value. The options shown are only types that are currently part of the selected airline's fleet, therefore, this list is bounded by the airline the user has selected
  4. The seat type: economy, first or business
  5. The row number: from 1 to 88 (88 was chosen as the maximum value as, from some sources I read, is the maximum row number is any commercial airlines, coming from Emirates Airbus A380)
  6. The seat location: window, middle or isle
  7. The flight's date, which defaults to the current date bu can be modified with a calendar picker

Once this information is filled, the "Save" button can be pressed to log the flight. An animation with the airline's logo and "Flight Saved" will appear, and the origin-destination airport text fields will be emptied. The background of this animation is a gradient between the airline's color and the user's app color of choice

Map Page

The map page is the most visually appealing section of the app. It utilizes the MapKit framework to display an Apple Maps instance.

Initially, the map will be completely empty, and will focus on the continental United States.

A "Choose Airline" is visible at the bottom. Clicking on it will pull up a rotating list of all airlines available, alongside their symbol/logo. Choosing an airline by rotating to it's position will add markers to the map with the airline hubs. The markers will have the airline's color, not the user specified app color.

Once any of the options in the list are chosen, the map's camera will change to focus and display all options, following the default MapKit behavior. The user is able to move the map following the same controls of the Apple Maps app, and modifying the camera will make the panning stop

Clicking on a marker will pull up theAirport Info Card, which will be explained later

Airlines Page

The Airlines Page contains a list of all airlines in alphabetical order, with the airline's symbol, name and a star showing it's favorite status in rows.

Clicking on an airline will open it's Airline Info Card (which will be explained later as well), and clicking on the star will switch the airline from favorited or not. The star will be filled if the airline is favorited and empty if not

Badges Page

The Badges Page contains a list of badges that serve as achievements for flying, adding a gamefication element to the app.

Badges can be either locked or unlocked

  1. Locked Badges will have a gradient background from white to black, it's image will have a greyscale and a lock will be placed on top of it
  2. Unlocked Badges will have a gradient background from indigo to the user's app color, and it's image will be in it's original colors

Badges can have several types, which are defined by it's unlock parameters, and can identified by it's name. The following list contain all current badges (as of version 1.0.0), with it's unlock parameter and an example that is present in the app currently (more specifically, the first badge from that type alphabetically)

  1. Bank Angle: An unusual event happened to your flight
  2. Example -> Bank Angle: Diversion - Have a flight divert back to it's departure airport

  3. Flighpath: The user completed a specific list of routes (regardless of the order)
  4. Example -> Flightpath: Island Hopper - Complete all legs of United Airlines Flight 155, the Island Hopper

  5. Frequent Flyer: The user has visited all hubs/operating bases from a certain airline using that specific airline
  6. Example -> Frequent Flyer: Alaska Airlines - Fly Alaska Airlines to all hubs/operating bases from Alaska Airlines

  7. Skyline: The user has flown with aircraft types from a specific aircraft manufacturer a specific amount of times
  8. Example -> Skyline: Airbus - Fly an Airbus jet ten times

  9. Soaring: Fly an specific aircraft an arbitrary number of times
  10. Example -> Soaring: The Best Seller - Fly five times in a Boeing B737

  11. Voyage: Fly an arbitrary amount of times with all specified airlines
  12. Example -> Voyage: Low Cost Carriers - Fly one time with each of the Low Cost Carries in the U.S.

Settings Page

This page allows the user to modify some aspects of the app to make the app experience better

The following are the possible settings the use is allowed to change

  1. "Show airport ICAO": Switches between airports' full name and it's ICAO Code in map views
  2. "Show satellite imagery": Switches between the default Apple maps style and a satellite image of the maps
  3. "Unit of Measurement: Used to calculate flight mileage. The user is allowed to switch between: feet, meters, kilometers, miles and nautical miles
  4. "Charts on profile page": Enables or disables the charts on the stats section of the profile page as some users may prever a simplified view with no images/charts
  5. "Change app color": Pull a wheel picker where users can choose the color of most UI elements
  6. "Delete all flights": Removes all flights from the user's data. This is not a reversible action, as data is only saved locally, and the user will see a warning message before confirming this choice

Other Pages: Airport Info Card

The airport info card shows up if an airport pin is clicked in any map view

It will display:

- Information about the airport, such as name, ICAO and/or IATA codes and coordinates

- A map of the airport satellite imagery slowly rotation around it

- A list of flights taken from or to this airport

- Followed by a list of which airlines use this aiport as a hub

Other Pages: Airline Info Card

Clicking on an airline in the Airlines Page will bring up that airline's info card

This page consists of:

- The airline's symbol/logo, followed by it's name and ICAO code

- A map view with the airline's hubs pinned

- Flights taken with this airline or a message saying that no flights with this airline have been taken

- A list of badges this airline is a part of

- A list containing this airline's fleet

Other Pages: The Sidebar

The sidebar can be accessed in any page by clicking the three lines on the top left of the screen (the color of this icon is dependent on the user's app color selection)

The sidebar contain links for all main pages as well as a link to the "About page", which is the page you are currently in

Privacy Notice

FlyLines does not gather or store any info from it's users

All information on the app is saved locally and is not sent to any servers or third-parties

Deleting or removing flights is a permanent move, as FlyLines does not create any backup or external storage of user's information

The entirety of the FlyLines App code is available in the Github link at the top of this page or through the following link:


FlyLines Github Repo

Feedback

if you have any feedback, concern, question or critique, feel free to send an email to panoramic56@proton.me

I will gladly accept any valid suggestion and incorporate it into my next projects or future versions of this one

Updates

Whenever this page is published, no updates will be done yet, however, version 1.0.1 is being developed and it's changes will be noted here

Version 1.0.1

New Profiles View style, with a switch style button for flights and stats lists

Airline fleets list added to the Airlines View

Airline search bar now starts with the IATA code to simplify searching. Full name can still be used and this change should not affect that

Resources

Here are some resources I utilized in order to make this app, in no specific order. All of these will hace links to them

  1. The SwiftUI Org Website
  2. MapKit Framework Website
  3. The Swift Charts Framework Website
  4. iOS Academy Youtube Channel
  5. Sean Allen Youtube Channel
  6. AppStuff Youtube Channel
  7. The Apple Developer Youtube Channel

Screenshots