Skip to content

valentinlehmann/obs-remote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

108 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Valentin Lehmann's Intro Course App

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.

Self introduction

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.

Local development

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.

  1. Install xcodegen

    brew install xcodegen
  2. Generate .xcodeproj

    xcodegen generate

    After running this command, you'll see a new .xcodeproj file 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

Submission Procedure

  1. Personal Repository You have been given a personal repository on GitLab to work on your app.

  2. 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 = main and 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>
  3. 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.

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.


Project Documentation

This README serves as your primary documentation. Update it as your project evolves.

Problem Statement (max. 500 words)

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.

Requirements

Functional Requirements (User Stories)

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

Quality Attributes & External Constraints

Glossary (Abbott’s Technique)

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

Analysis Object Model

AOM

Architecture

Subsystem Decomposition

SSD

  • 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

Human Interface Guideline (HIG) Compliance

  • Show the appropriate keyboard type: When entering the Port field, the numeric keyboard is shown.
  • Display a Clear button in the trailing end of a text field to help people erase their input: The Twitch username field in the Settings view has a clear button.
  • Ensure that your app looks good in both appearance modes: The app supports both light and dark mode.

Responsible AI Usage

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.

About

This is a iOS app developed during the intro course of the iPraktikum 2025. It is used to control OBS remotely using the WebSocket interface.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors