James Hager
iOS & macOS App Developer
I have been programming since the 1980s. I taught myself BASIC in middle school and learned Fortran in college. I worked with Fortran and Unix extensively in graduate school where I earned a Ph.D. in aerospace engineering with a concentration in computational fluid dynamics. I worked at McDonnell Douglas, and then Boeing, in research and development, where my proudest contribution was solving a stability problem with the DARPA Affordable Rapid Response Missile Demonstrator vehicle that later flew successfully as the Boeing X-51A.
After leaving the corporate world, I started a nature photography business. I photographed landscapes and wildlife, mainly in the US and Africa, and also led photo safaris to Africa.
In 2006, I learned PHP, MySQL, HTML, CSS, and JavaScript in order to develop database-driven websites.
Since 2015, I've been using Swift to develop iOS and macOS apps driven by CoreData.
I have been living full-time in my RV since 2008, and spend the majority of my time off the grid thanks to the solar-electric system I designed and installed.
Technology:Swift, SwiftUI, UIKit, AppKit, CoreData, CoreLocation, HealthKit, MapKit, XCTest
More Info:GitHub Repo | AvantiApplications.com/ATracks Website
This app records location, elevation, and step data for your outdoor activities. Data is stored locally using CoreData so that you'll always have it. It's also stored in your iCloud account so it can synch with all of your Apple devices. Step data is obtained from the Apple Health app using HealthKit.
It was developed using SwiftUI to facilitate cross-platform development. Several features required bridging to native UIKit and AppKit implementations:
XCTest is used for unit tests.
The iOS app has been available through the Apple App Store since May 2022.
iOS App Screenshots
Demo Video
Technology (iOS App):Swift, UIKit, CoreData, CoreLocation, MapKit, CryptoKit, XCTest
Technology (RESTful API):PHP, MySQL
More Info:AvantiApplications.com/AWeather Website
This is a weather app for iDevices (iPhones, iPads, and iPods) that lets you manage weather forecasts from NOAA (the National Oceanic and Atmospheric Administration) and the National Weather Service (NWS) while you're on the go and away from the internet. Weather data can be downloaded for multiple locations when you have a net connection and can be viewed later whether you have a net connection or not.
It obtains data from the NWS API (JSON), websites (HTML, XML), and image repositories (JPEG, TIFF).
CoreLocation is used to allow locations to be created from the user’s current location. MapKit is used to: 1) allow locations to be created from tapping on a map, and 2) present radar data.
It uses a RESTful API created using PHP and MySQL to: 1) report errors with the data feed, and 2) obtain weather icon composition data for automatic over-the-air app updates. CryptoKit is used to ensure data integrity.
XCTest is used for data-parsing functions and data-calculation functions unit tests, and API integration tests.
The app has been available through the Apple App Store since April 2016.
iOS App Screenshots
API Admin Website Screenshots
Technology:Swift, UIKit, Cocoa, CoreData, MultipeerConnectivity
I created this notes app so I could sync data between my devices w/o having an internet connection. It supports simple formatting, images, and PDF files. It can import and export notes in Evernote format and a native ANotes format.
It uses a common framework to: 1) store data using CoreData, and 2) sync using MultipeerConnectivity. UIKit is used for the iOS UI and Cocoa is used for the macOS UI.
The sync function uses a vector clock and never loses data — if there's a sync conflict, both sets of data are combined and formatted to indicate that there was a sync conflict.
This a personal app that I use every day.
iOS App Screenshots
macOS App Screenshot
Technology:Swift, UIKit, CoreData
More Info:Bitbucket Repo
I created this contacts app as a code test for a job interview.
It works on iPhones in a single-view mode and on iPads in a master-detail mode, all using the same code.
The app is available through TestFlight, and requires iOS 13 or earlier.
iOS App Screenshots
Technology:Swift, UIKit, AVFoundation, CoreMotion, ImageIO, Photos, Speech
More Info:Bitbucket Repo
I created this camera and photo-viewer app to play with the camera system. It can take still images and videos, and you can specify the aspect ratio of the image or video so that the framing during capture matches the desired output. The photos viewer always shows the full image in the thumbnail view instead of being cropped like in the Apple Photos app.
Voice commands can be used to operate the camera.
This a personal app that I stopped using after iPhones had multi-lens cameras.
iOS App Screenshots
Technology:JavaScript, NodeJS, Axios, ExpressJS, Sequelize, BcryptJS, PostgreSQL
More Info:GitHub Repo | Website
I created this contacts web app for my Devmountain Foundations capstone project. Each contact can have an arbitrary number of phone numbers, email addresses, and physical addresses. Clicking on the phone data will launch a phone call, clicking on the email data will launch your email app, and clicking on the address data will launch Google maps. Each contact can also have a free-form note area which supports basic HTML for simple formatting. Contacts can be assigned to user-defined groups. It has a responsive design.
Demo Video
Technology:PHP, HTML, CSS, JavaScript
More Info:AvantiWebHouse.com Website
This is my web-development website. It was my first responsive design. The Free Quote page sends an email with the content of the form.
Web Screenshots
Technology:PHP, HTML, CSS, JavaScript, MySQL
More Info:MHWPC.org Website
The public area provides information about the club and galleries of winning competition images.
There is a secure area for: 1) members to upload images for the monthly competitions, and 2) admin control.
The website automatically sends meeting and competition email notices to members.
Web Screenshots
Technology:PHP, HTML, CSS, JavaScript, MySQL
More Info:RVRamblings.com Website
The blog system was set up so that I could create new blog entries on my laptop while away from the internet, export the necessary data to an XML file, and import that data into the live site when I had a net connection.
Web Screenshots
Technology:PHP, HTML, CSS, JavaScript, MySQL
More Info:JamesHagerPhoto.com Website
I created this website to feature my nature-photography work.
The blog system was set up so that I could create new blog entries on my laptop while away from the internet, export the necessary data to an XML file, and import that data into the live site when I had a net connection.
I created the custom slideshow on the home page using JavaScript.
Web Screenshots
Swift, JavaScript, PHP, SQL, Objective-C, C#, Python
SwiftUI, UIKit, AppKit, Cocoa, CoreData, XCTest, MessageUI, StoreKit, CoreLocation, MapKit, CryptoKit, HealthKit, MultipeerConnectivity, AVFoundation, CoreMotion, ImageIO, Photos, Speech
NodeJS, Axios, ExpressJS, Sequelize, BcryptJS
MySQL, PostgreSQL
JSON, XML
macOS, Unix
Git, GitHub, Bitbucket, Sourcetree
Xcode, VSCode, Terminal, vi, phpMyAdmin, Apache, Heroku, Rollbar, Postman, SQL Tabs