Africa Africa

Using AVKit and MapKit to create a media-centric app, bringing information on Africa's fauna to users in fun and interactive ways.

  • iOS 15+

  • SwiftUI 2.0


The Africa app is designed to be a full featured platform, harnessing SwiftUI, AVKit, and MapKit to create a digital compendium of popular African fauna. This app utilizes Apple's Mac Catalyst framework, alongside the dynamic resizing of elements built into SwiftUI, to create not only an iPad friendly application, but also easily configure a native Mac version of the application as well.

In order to properly accomodate both the iPad and Mac Catalyst versions of this app, alternative displays also needed to be designed to accomodate for the larger screen sizes and alternative form factors. These alternative views are built using Swifts GridItem instance to create user-configurable views while maintaining the ordered data structure, and without the need for hard-coding each alternative view.


The basis of the Africa app is built upon SwiftUI's NavigationView component, which allows easy switching between displayed views while maintaining a single, consistent toolbar navigation throughout the app. This design ensures that the user has access to all views of the application at any time while navigating through the app. The initially presented view is user-configurable, allowing users to select their desired layout, and also interact with the underlying data models to view detailed information on each of the featured animals.

Subsequent views utilize Swift's AVKit and MapKit platforms, respectively. The Videos page, utilizes AVKit's integrated AVPlayer class to retrieve specified videos from the apps internal storage, and display not only the requested video file, but automatically generate media playback controls and a progress bar within the UI automatically. In a similar fashion, the MapKit platform allowed the specification of an originating map view, by specifying a central latitude and longitude coordinate using MKCoordinateRegion, and the corresponding ranges using MKCoordinateSpan. This provided the initial underlying map view, allowing for annotation using the integrated map annotation functionality.



AVKit and MapKit provide flexible and intuitive ways to implement media and geolocation interfaces into a Swift application, while maintain rich interactivity and customization. While the depth of the AVKit platform was not fully explored in the building of this project, the easily configuration of the MapKit annotations allows for future applications to include natively accessible location information, and deliver it in an easily consumable method for the end user.

The experience delivered by the MapKit annotations functionality could be further enhanced by adding interactivity to the provided annotations, potentially serving up additional content or information about each location when triggered by user interaction.