Developer Guide - TJohn2017/Laputa GitHub Wiki

Here to help us develop?

If you're hoping to help develop Laputa, this is a great place to get started! This page contains a list of our most essential technologies and how to get familiar with them if you are not already.

Take a look at our component overviews if you want to learn more about how each part of our app works.

Tools & Technologies

Laputa is built entirely in SwiftUI and UIKit, with two external third-party dependencies. Learn more about each of these below.

SwiftUI

A large portion of the app is written in SwiftUI, since it is the newest framework for Swift and our team wanted to stay up to date with the newest technologies. However, since SwiftUI is still young, there are places where we must integrate UIKit into SwiftUI.

The Apple landmarks tutorial is a great place to get started with learning SwiftUI.

UIKit

We try to use SwiftUI where we can, but some parts of the app require the use of UIKit, such as the terminal and drawing canvas. It is important for our developers to understand how to embed UIViews in SwiftUI to have them work in harmony.

PencilKit

We use PencilKit for the pencil drawing interactions.

CoreData

We use CoreData to save all of the host, canvas, and code card data so that it persists between uses of the app.

This tutorial is an excellent place to get started with CoreData, and this one offers more information on establishing CoreData relationships.

NMSSH

NMSSH is a third-party package that allows us to make and manage SSH connections. It is an Objective-C wrapper around libssh2.

SwiftTerm

SwiftTerm is a VT100/Xterm terminal emulator. It provides an engine to parse and represent terminal output provided by our NMSSH connection. This terminal data is then displayed to the user through SwiftTerm's extendable UIKit classes.

Getting Started

Our development workflow is very easy to follow. We largely developed Laputa by first opening an issue that we assigned to ourselves or assigning ourselves a current issue in the issues list. The actual "issue" opened could vary from a bug that was discovered during development or testing to a major feature that we want to push to a UI overhaul that we want to adopt. We then open a new branch and work on it (ideally, in relatively easy-to-merge and easy-to-comprehend magnitudes) until the feature is complete and the branch is ready to be merged (into the dev branch). We mainly merge into the dev branch and only update the main branch when we have a big update. We then open a PR and get another reviewer to look over your code, adding comments and fixes as they review it --- these comments get addressed and then the branch is finally ready to be merged! Once merged, we close out the issue and we're done!

To get started, make sure you have the latest Xcode IDE from Apple and clone the Laputa to get started. Additionally, make sure that any third-party libraries are property installed via a pod install before starting development and testing. From there, simply follow our workflow to contribute!