Download the app on the App Store!
Source code for the Eurofurence app for iOS.
The application uses several service and code level dependencies to function.
This app uses the Eurofurence API for its backing model. We also use Firebase for crash reporting and push notifications.
All our dependencies are installed using the Swift Package Manager.
- Down - Markdown parsing and formatting
- Firebase - Crash reporting, push messaging and remote configuration
To build the app, you'll need the latest version of Xcode 13. Once you clone the repository, open the workspace (not the project!). Give Xcode a few minutes to resolve the dependencies.
To build and run the app, select the Eurofurence project file, activate the Eurofurence scheme, and hit Product > Run
(or ⌘ + R
). Other schemes of interest include:
- EurofurenceKit - the model used by the application.
- EurofurenceIntentDefinitions - all
INIntent
definitions live here for sharing betweeen targets - EventsWidgetExtension - Springboard extension for events
To run all tests in one go, select the Eurofurence scheme. Then in the test navigator, make sure the "All Tests" test plan is active and hit Product > Test
(or ⌘ + U
). Note this may take a minute or two. Alternatively, to run specific test targets, activate the appropriate scheme or change test plan.
We aim for as high coverage as possible to minimize the change of regressions slipping through the cracks. Each package comes with its own flavour of testing to consider, as documented below. New tests do not need to be added for refactoring (assuming the strict definition of refactoring is adhered to!).
The model package is the backbone for the app's data storage and logic, and is therefore heavily unit tested. Adapters to other frameworks have their own tests within the EurofurenceModelAdapterTests bundle.
As much of the application logic should be covered by unit tests as possible, diminishing in value the closer to the view tier you get. As it's particularly difficult to write maintainable tests at the UIViewController
(and friends) tier, these behaviours can be covered in wider XCUITests in the EurofurenceTests bundle (but remain optional, assuming the behaviour is appropriatley structured in the higher tiers).
As unit test bundles cannot be injected into extension processes, the code for the extension should be lifted into its own package and tested there. Inverting extension specific dependencies should enable full test coverage for the extension.
Any bugs or prospective chunks of work should be raised as issues.