Collection of Swift/iOS-related conference videos. A demo project for SuperArc framework - building modular iOS apps with a µComponent architecture.

Related tags

Video SwiftCommunity
Overview

SwiftCommunity

License License License License codecov.io

Beta version is available at TestFlight

Collection of Swift/iOS-related conference videos.

This project serves as a showcase for the SuperArc project (TSP).

TSP aims to standardize many common building blocks which can help developers to kickstart new iOS projects quickly.

The goal is to have a set of modules (µComponent) to create a component-based MVVM-C (Model-View-ViewModel-Coordinator) architecture for iOS apps. The modules are intended to use together but each module should be able to be integrated into any other iOS projects. This setup is incredibly useful when you create multiple apps which share some same features/functionalities. For more information about the SuperArc project, please take a look at this presentation.

Content

All content are curated from external sources such as Vimeo, Youtube or WWDC live streams. This is inspired heavily from SwiftTube and talk & coffee app

App Features

  • Data is stored in raw json files for easy integration with other tools.
  • View a list of iOS/Swift related conferences.
  • View a list of videos of conferences.
  • View a list of speakers of conferences.
  • Use git to manage the json database (Content is hosted at SwiftCommunityContent).

Technologies

Tech-Stack

  • Swift 5.1
  • Xcode 11+
  • 3rd Party Dependencies:
    • SuperArc: PromiseKit, RxSwift, Action, RxCocoa, NotificationBanner, Kingfisher.
    • SwiftCommunity: RxDataSources, XCoordinator, objective-git, YoutubeKit, LXVimeoKit, MarkdownView.

Tests

  • Unit Tests
  • UI Tests
  • Snapshot Tests

Package manager

  • Carthage
  • Swift Package Manager
  • Pods

Tools

Architecture

When building an iOS app, developers normally starts with a single workspace/project which contains all source codes of the app. This setup is useful for smaller apps, but when the app grows, there are some problem comming with this setup:

  • Implicit dependencies between classes: because all classes living in the same module, they can access each other easily.
  • Slow compilation time since all source codes will be complied everytime.
  • Hard to reuse code because strong coupling between classes.
  • Hard to scale and maintain because of complex dependencies between classes.

TSP proposes a different approach to modularise the app architecture into foundation and feature modules

  • foundation µComponent: used by other feature µComponent, providing tools and utilities to develop feature µComponent.
  • feature µComponent: built using foundation µComponent, responsible for user-facing features.
  • Clean architecture (at µComponent level): separation of UI, domain logics and platform logics.

Registration

Registration

ViewModel

  • Responsible for calling services classes to do business logics and prepare data model for presentations.

ViewController

  • Responsible for interaction with users, displaying results from its corresponding ViewModel.

Component

  • Responsible for managing dependencies required by its ViewController & ViewModel.
  • Instantiate ViewController, ViewModel.
  • Containing ComponentRouter used for navigating to outside components.
  • Manage Interface to control interactions from outside.

Coordinator (optional)

  • Responsible for navigation.
  • Instantiate Component.

Documentation

Please take 5 minutes to read the presentation to understand the motivation behind the SuperArc framework.

Presentation

Example App

The example app demonstrates how you can use SuperArc to modularize an simple app by features and layers.

The sample app has the following specs:

  • consists of FeatureA, FeatureB, FeatureC and FeatureD.
  • FeatureA can navigate to FeatureB, FeatureC and FeatureD
  • FeatureB can navigate to FeatureA, FeatureC and FeatureD

Building and Running

After cloning the repository. Run the following command from the root folder of the cloned project to install all carthage dependencies in all subprojects:

swift run --package-path Tools/Bootstrap/ Bootstrap .

After this, you can open SwiftCommunity.xcworkspace and run the SwiftCommunity target to start the app.

Contributors

Contributing

Information

For convenience, all subprojects are kept in the same workspace & this reporistory so that we can iterate quickly without messing with versioning & package manager issues.

The goal for a stable version in the future is to have separated repositories for all components so that they can live independently from each others.

Getting started

  • Please make sure that you have Carthage installed.
  • Fork the repository.
  • From the root workspace folder, run carthage update --no-use-binaries --platform iOS --cache-builds to install all dependencies.
  • Open the workspace in Xcode and you are good to go.
  • Change code in any components you think it should be implemented differently.
  • Commit the code changes to a separated branch in your cloned repository.
  • Make a pull request to the upstream repository.

Open an issue if you want to discuss about the architecture, need help or request a new feature.

Open a PR if you want to make changes to any part of the frameworks.

Inspiration

This project is very opinionated and probably not suitable for all kinds of iOS apps projects. I encourage you to take a look at other projects where you might find better architectures, approaches that are more suitable for your ideas:

License

MIT License. However, please do not ship this app under your own account, paid or free. See LICENSE Swift and the Swift logo are trademarks of Apple Inc.

You might also like...
SuperPlayer is a library to wrap AVPlayer with Composable Architecture.
SuperPlayer is a library to wrap AVPlayer with Composable Architecture.

SuperPlayer is a library to wrap AVPlayer with Composable Architecture. It can be used in SwiftUI and UIKit.

The main goal of this mini project is to inspire you on what we can accomplish with the SwiftUI framework.
The main goal of this mini project is to inspire you on what we can accomplish with the SwiftUI framework.

COMPLEX SWIFTUI GESTURES We will create such a custom button with complex gestures that we can not find in Apple’s stock user interface library. PARALLAX EFFECT By using multiple movements in the opposite direction (parallax effect) we can add depth to this amazing onboarding screen.

A fan-made passion project. iOS app designed to keep track of data mined from Animal Crossing: New Horizons

DataCrossing A fan-made passion project. iOS app designed to keep track of data

A fully functional short video app project.Record a six secends video while playing prank sounds.

prankPro A fully functional short video app project How to Install 1. use coconapod to init your xcode environment. 2. change the app-keys in `applica

This project is a clone of YouTube. But the main intention is to show how to write clean code, using proper MVC patterns and re-usable coding methodologies!

YouTubeClone This project is a clone of YouTube. But the main intention is to show how to write clean code, using proper MVC patterns and re-usable co

Swift Package used for video where I demonstrate how to extract a package to a local framework and modify it.
Swift Package used for video where I demonstrate how to extract a package to a local framework and modify it.

SegmentedPicker NOTE: This sample code is taken from the article by Frank Jia in his article titled Build a Custom iOS Segmented Control With SwiftUI

A video composition framework build on top of AVFoundation. It's simple to use and easy to extend.
A video composition framework build on top of AVFoundation. It's simple to use and easy to extend.

A high-level video composition framework build on top of AVFoundation. It's simple to use and easy to extend. Use it and make life easier if you are implementing video composition feature.

📹 Framework to Play a Video in the Background of any UIView
📹 Framework to Play a Video in the Background of any UIView

SwiftVideoBackground is an easy to use Swift framework that provides the ability to play a video on any UIView. This provides a beautiful UI for login

High-performance and flexible video editing and effects framework, based on AVFoundation and Metal.
High-performance and flexible video editing and effects framework, based on AVFoundation and Metal.

High-performance and flexible video editing and effects framework, based on AVFoundation and Metal.

Comments
  • Remove PromiseKit

    Remove PromiseKit

    I briefly look through the list of dependencies and see both PromiseKit and RxSwift. Why does the app need PromiseKit? Isn't Rx Single basically the same thing?

    opened by khoi 4
Swift library for embedding and controlling YouTube videos in your iOS applications via WKWebView!

YouTubePlayer Embed and control YouTube videos in your iOS applications! Neato, right? Let's see how it works. 0.7.0 Update: WKWebView breaking change

Giles Van Gruisen 825 Jan 3, 2023
YouTubePlayerKit A Swift Package to easily play YouTube videos 📺

A Swift Package to easily play YouTube videos ??

Sven Tiigi 304 Jan 7, 2023
Loop videos on iOS and Android (assuming only one video like on YouTube)

Mobile Video Loop By: Andrew-Chen-Wang iOS Safari Extension (soon Android) that lets you loop a video on your current website. This only works for the

Andrew Chen Wang 0 Dec 19, 2021
reward the user for watching videos to get coins then use them to get rid of annoying admob ads

reward the users for watching youtube videos to the end to earn coins, then use them to get rid of annoying admob ads like banners, interstitial & reward videos

Belal Samy 4 Nov 19, 2021
A lightweight app to play videos from the Files app in a better (dark) interface which avoids losing your playback position.

Playerly Playerly is a very lightweight Swift app that allows you to select a file (video or movie) from the built in Document Browser, and play it in

Julian Schiavo 28 Dec 3, 2022
ABMediaView can display images, videos, as well as now GIFs and Audio!

Media view which subclasses UIImageView, and can display & load images, videos, GIFs, and audio and from the web, and has functionality to minimize from fullscreen, as well as show GIF previews for videos.

Andrew Boryk 80 Dec 20, 2022
Catalyst example of a grid-based video app that opens videos in secondary windows

Simple Catalyst example (Mac idiom) of a grid-based app populated with videos. On macOS, double-clicking a video opens it in a new playback window. Keyboard navigation is fully supported via the UIKit Focus Engine.

Steven Troughton-Smith 19 Dec 8, 2022
Audio player demo based on Swift and SwiftUI, which can play local or network audio.

SwiftAudioDemo Audio player demo based on Swift and SwiftUI, which can play local or network audio. In this demo, I have made a radio player to play n

Jensen Zhang 6 Mar 13, 2022
Valorem-demo - Demonstration code and video of Valorem, a bespoke portfolio recommendation platform to be created as an iOS mobile app.

valorem-demo Demonstration code of Valorem, a bespoke portfolio recommendation platform to be created as an iOS mobile app. The included code demonstr

Marcus Deans 1 Mar 4, 2022
Contains a demo version of the official Roll player.

RollDemo This package is a demo version of Roll player which is a native iOS audiovisual player that builds on AVFoundation. Contact Information: Raji

Rajiv 8 Jul 29, 2022