Welcome to your project repository! To pass the intro course, you will build a unique iOS app using SwiftUI. There are no limitations on the app’s functionality—be as creative as you like. Your app must, however, satisfy the quality attributes & external constraints specified in the course materials.
Hi! My name is Valentin and I'm from Munich. Apart from my studies at TUM I'm a freelancer and doing everything related to tech: sometimes I help on festivals but most often I'm programming small plugins for Minecraft and websites for my clients. I've also been developing mobile apps in React Native for quite some time, but never natively in Swift - thats why I'm quite exited about this course :) My past work includes the app and website for https://creatorcard.network and some other clients.
For your Intro Course App, you will use XcodeGen to manage your Xcode Project.
What is XcodeGen? XcodeGen is a tool that automatically generates Xcode project files from a simple configuration file. Instead of manually managing complex Xcode project settings, you define your project structure in the provided project.yml file, and XcodeGen creates the .xcodeproj file for you. This makes it easier to manage your Xcode project under version control (git), and resolve any merge conflicts that arise.
Why do we need this? When you clone this repository, you won't find a ready-to-use .xcodeproj file, which you can directly open with Xcode. Instead, you'll find a project.yml configuration file that describes how the Xcode project should be set up. You need to generate the actual Xcode project file before you can open and work on the app in Xcode.
-
Install xcodegen
brew install xcodegen
-
Generate .xcodeproj
xcodegen generate
After running this command, you'll see a new
.xcodeprojfile appear in your project folder. You can then double-click this file to open your project in Xcode.
Since the xcodegen generate command must be run when the project is cloned and whenever changes affect the project structure, you can enable Git hooks to run the command automatically after merges and pulls.
Run the following command to point git to the hooks:
git config core.hooksPath .githooks-
Personal Repository You have been given a personal repository on GitLab to work on your app.
-
Issue-Based Development
- Follow the issue-based development process from the Git Basics and Software Engineering sessions.
- For every task, open or update the matching GitLab issue (or checklist item) before writing code.
- Inside the issue or task, press Create branch. Confirm that Source branch =
mainand let GitLab generate the feature-branch name so the branch stays linked to the issue. - After GitLab creates the branch, sync your local repo and check out that branch (GitLab already created it on the server, so you only need to fetch it locally):
git checkout main git pull origin main git fetch origin git checkout <branch-name>
-
Merge Requests (MRs)
- For each completed issue / task, open an MR targeting
main(source: your feature branch → target:main). - Add your tutor as a reviewer and collaborate on requested changes.
- Keep MRs focused and small where possible; ensure CI/build checks are green.
- Do not commit directly to
main. Use MRs only. - It is your responsibility to press "Merge" once the MR is approved.
- For each completed issue / task, open an MR targeting
Deadline: 2025-10-14 20:00
All MRs must be merged into main by the deadline. The version on main at the deadline is considered your final submission. Your app must satisfy all required quality attributes & external constraints. During the first four days there are intermediate deadlines for software engineering artifacts to help you stay on track.
This README serves as your primary documentation. Update it as your project evolves.
The app targets live streamers who want to control their stream without touching the PC running it. Mainly this includes people doing IRL streams (IRL stands for „In Real Life“, i.e. walking around with a camera in their hand) who often use their home PC to run the stream and broadcast the signal to Twitch or YouTube. This means they have no physical access to the computer during the stream and need a way to control it remotely. The app should facilitate remote control of OBS Studio, a widely adopted recording and live streaming software. Users of OBS Studio should be able to connect to their PC running OBS and do everything they need to do during a live stream. This includes switching scenes, seeing preview images and start and stop the livestream.
As a streamer using OBS I want to…
- be able to connect to OBS running on my PC and authenticate with an optional password so that I can control it afterwards
- be able to save my credentials so I dont have to remember my connection details
- be able to see the current stream status and stats so I can see whether I'm live
- be able to start and stop the stream
- have a list of all my scenes
- switch the preview scene so I can change what my viewers are seeing next
- be able to use the transitions in OBS to cut between the preview and the program scene so I can change the content my viewers are seeing
- be able to see the preview and program output so I can check whether the viewers are seeing the right things
| Terms | Definition |
|---|---|
| Credentials | Stores connection details (url, password, Twitch username) |
| StreamStatus | Represents the current info about the stream (uptime, frames per second (FPS), viewcount) |
| Stream | Represents the stream itself, can be started and stopped |
| Scene | Holds information about a scene (name, identifier) and can be switched into preview |
| Transition | Represents a transition in OBS (e.g. cut or fade) and can be used to switch preview with program |
| Output | Holds a current screenshot of either the preview or the program feed |
- OBS - external software that this app connects to and controls
- Stream - manages the connection to OBS and provides methods to start and stop the stream
- Scene Display - shows the scenes and allows switching between them
- Scene - represents a scene in OBS
- Output - holds a screenshot of either the preview or program output
- Credentials - manages saving and loading connection details
: When entering the Port field, the numeric keyboard is shown.
: The Twitch username field in the Settings view has a clear button.
: The app supports both light and dark mode.
While developing the app, apart from the automated AI review in Merge Requests, AI (ChatGPT 5) was used for research about SwiftUI best practises and information about how the poorly documented OBS WebSocket API works. All responses were manually reviewed and checked with other sources to ensure correctness. No code was directly copied from AI outputs.

