C4 is an open-source creative coding framework that harnesses the power of native iOS programming with a simplified API that gets you working with media right away. Build artworks, design interfaces and explore new possibilities working with media and interaction.

Overview

C4

Code, Creatively.

C4 is an open-source creative coding framework that harnesses the power of native iOS programming with a simplified API that gets you working with media right away. Build artworks, design interfaces and explore new possibilities working with media and interaction.

Built on top of Swift, C4 puts the power of UIKit and Core Animation at your disposal, allowing you to create inventive digital interactions with far less time and effort. Plus, you get all the interactivity, fun and expressiveness of Swift. Your apps will run lightning-fast.

The API of C4 is simple and streamlined allowing beginners to get into programming very easily. For seasoned developers, C4 can be dropped into any existing project with as little effort as linking any other native framework. With C4, you’ll save a ton of time when working with interactions, animation and media.

Expressive

C4 brings your ideas to life by allowing you to focus on experimenting, designing, visualizing and building rather than on learning low-level technologies. Objects are consistent and intuitive—they all essentially work the same way. C4's language has been designed to be as simple and expressive as possible.

For example, C4 compresses the access of properties:

let m = movie.width

Instead of this:

let m = movie.frame.size.width

Animating both view and property changes in C4 is much cleaner, and looks like this:

ViewAnimation(duration: 0.5) {
  shape.center = self.canvas.center
  shape.lineWidth = 5
}.animate()

Whereas using UIKit + Core Animation you'd have to do something like this:

UIView.animate(withDuration: 0.5) {
    v.center = self.view.center
}

CATransaction.begin()
CATransaction.setValue(0.5, forKey: kCATransactionAnimationDuration)
if let shapeLayer = v.layer as? CAShapeLayer {
    shapeLayer.lineWidth = 5
}
CATransaction.commit()

C4 takes advantage of all of Swift’s modernity: closures, tuples, generics, interaction, structs, error handling. And, YES, you can even do this:

let bananaName = "Jimmy".banana

Check the Swift Overview for more.

Easy To Learn

Through both its simplified API and consistent objects, C4 is incredibly easy to learn compared to the frameworks it’s built upon: UIKit, Core Animation, etc. C4’s language has been designed to make it easy for both novice and experienced programmers to pick up and use right away.

Well Supported

The C4 team has always been highly committed to publishing excellent documentation, examples and tutorials for learning how to program with C4.

The current release of C4 also includes a full end-to-end tutorial that will walk you through the design, creation and publication of a full-blown app: COSMOS

Get COSMOS from the App Store

Build COSMOS from start to finish

We’re currently converting over 200 code examples and 30 tutorials to C4's new modern syntax. These examples and tutorials (coming soon) guide new users through core concepts and provide seasoned developers with the reference they need to keep up the pace.

Powerful

Originally based on Objective-C, C4 now takes entire advantage of the Swift programming language — which itself was built to be fast and powerful. Where Swift has been tuned to make intuitive, natural coding perform best, the guts of each component in C4 — every class, every method and every structure –  make that performance sing.

Through C4 you are able to work with media, animations and interactions in a way that dissolves the differences between the many frameworks you need to create beautiful user experiences. It seamlessly combines many important components of UIKit, Core Animation, Core Graphics, AVFoundation and QuartzCore.

Multipurpose

C4 is built for anyone who wants to build beautiful user experiences for iOS and has been designed to reach an incredibly broad set of possible uses. This flexibility is one of the most important aspects of C4, demonstrating its strength across a variety of different use cases and disciplines.

C4 has been used for:

  • Prototyping
  • Mobile Applications
  • Data Visualization
  • Interactive Artworks
  • Computational Design Education
  • Communication Design
  • Print Design

Simplicity

Simplicity is a major accomplishment for C4. Across the board, C4 is simple to learn, to use, to read and to adopt. C4 reduces the amount of code you need to the most powerful essentials.

Take movies, for example. Instead of needing to AVQueuePlayer, AVPlayerItem, navigating asset tracks and learning how to load files through NSBundle, you only have to create a movie from its file name and add it to the canvas:

func setup() {
  let movie = Movie("halo.mp4")
  canvas.add(movie)
  movie?.play()
}

Using UIKit + AVFoundation, you'd have to construct the movie object from scratch like this:

func viewDidLoad() {
  guard let url = Bundle.main.url(forResource: "halo.mp4", withExtension: nil) else {
      fatalError("File not found")
  }

  let asset = AVAsset(url: url)
  let player = AVQueuePlayer(playerItem: AVPlayerItem(asset: asset))
  player.actionAtItemEnd = .pause

  let movieLayer = AVPlayerLayer(player: player)
  movieLayer.videoGravity = .resize

  let tracks = asset.tracks(withMediaType: .video)

  let movieTrack = tracks[0]
  let size = movieTrack.naturalSize

  movieLayer.frame = CGRect(x: 0,y: 0,width: size.width,height: size.height)
  self.view.layer.addSublayer(movieLayer)
  player.play()
}

… And a whole lot more.

Open Source

C4 is an open-source project licensed under the MIT License. It can be used freely in educational, artistic and even professional settings. The project is open to anyone who wants to contribute, and the project’s code, documentation, and process are completely available for you to read through, learn from and take advantage of. Ongoing commitment by our core team and other developers guarantees that C4 will be constantly updated and focused on user’s interests.

Contributing

There are many ways to contribute to C4 and we really appreciate any contributions. It can be anything from better documentation to a brand new feature. To get started take a look at our Contribution Guidelines.

Community

Join our Slack channel to ask for help, show off your app, suggest change, or just chat.

Comments
  • Workspace does not react to touch events (View Hierarchy Issue)

    Workspace does not react to touch events (View Hierarchy Issue)

    The C4WorkSpace class used to respond to touch events coming from its main view. It seems like these aren't being passed properly through the responder chain anymore.

    The in C4WorkSpace.m following doesn't run (i.e. print to the console) when I touch the canvas.

    -(void)touchesBegan {
        C4Log(@"workspace responding");
    }
    

    In C4UIControl.m the following works:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        C4Log(@"C4UIControl responding");
    }
    

    The original pattern in C4Control.m was:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [super touchesBegan:touches withEvent:event];
        [self postNotification:@"touchesBegan"];
        [self touchesBegan];
    }
    
    -(void)touchesBegan {
    }
    

    I think a link between the C4WorkSpace.m and its main view has been disconnected.

    Bug 
    opened by traviskirton 13
  • Importing compiled framework results in errors.

    Importing compiled framework results in errors.

    I took the compiled frameworks from the C4iOS project, added them the Library > Frameworks and then linked them into a new project. (NOTE: I'm setting up a project that links libs so that I can recreate it as a template that we can load from an installer).

    My main ViewController looks like:

    import UIKit
    import C4Core
    import C4UI
    import C4Animation
    
    class ViewController: C4CanvasController {
        override func setup() {
    
        }
    }
    

    I get the following two errors:

    'C4CanvasController' is unavailable: cannot find Swift declaration for this class

    Method does not override any method from its superclass

    screen shot 2015-06-29 at 12 12 49 pm

    Also, I receive the following warning when only linking the projects (i.e. not calling any classes or methods from them):

    (null): Ld: warning: ld: warning: ignoring file /Library/Frameworks/C4Core.framework/C4Core, missing required architecture x86_64 in file /Library/Frameworks/C4Core.framework/C4Core (2 slices)ignoring file /Library/Frameworks/C4UI.framework/C4UI, missing required architecture x86_64 in file /Library/Frameworks/C4UI.framework/C4UI (2 slices)ignoring file /Library/Frameworks/C4Animation.framework/C4Animation, missing required architecture x86_64 in file /Library/Frameworks/C4Animation.framework/C4Animation (2 slices)

    opened by traviskirton 11
  • Gradient Fill could work with pattern images

    Gradient Fill could work with pattern images

    Instead of setting the background of a specific shape, it might be better to use pattern images to fill the shape, instead of the current approach.

    However, I see a problem with using pattern images: They default to rendering from {0,0}, and depending on the shape's current location (ie. in cases like C4Star, the layer origin of the shape often isn't at {0,0}. This results in the following:

    override func setup() {
        let star = C4Star(center: canvas.center, pointCount: 10, innerRadius: 50, outerRadius: 80)
        let g = C4Gradient(frame: star.frame, colors: [C4Blue, C4Pink])
        let i = g.render()!
        star.fillColor = C4Color(UIColor(patternImage: i.uiimage))
        canvas.add(star)
    }
    

    4s simulator screen shot jan 20 2016 10 37 58 pm

    5 simulator screen shot jan 20 2016 10 38 44 pm

    6 simulator screen shot jan 20 2016 10 39 19 pm

    The same code produces varying effects on different screen sizes.

    Bug 
    opened by traviskirton 7
  • Add C4iOS to Xcode project

    Add C4iOS to Xcode project

    I cannot get C4 running in my new Xcode project. Since the installer isn't working for (the current version of) Xcode anymore, how can I set up a project? I don't find any instructions for that. Can you give me some instructions how I accomplish adding the dependencies?

    Thanks!

    opened by christophz 7
  • Adding gesture to C4View

    Adding gesture to C4View

    When adding a gesture to a view, and setting the target as self (i.e. C4View)

    internal var tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
    

    I get the following error:

    Type 'C4View -> () -> C4View!' does not conform to protocol 'AnyObject'
    

    I tried the following:

    internal var tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer()
    
    public var interactionEnabled: Bool = true
    
    public func onTap(run: TapAction) {
        self.tapAction = run
        tapRecognizer = UITapGestureRecognizer(target: self, action:Selector("handleTap:"))
        tapRecognizer.delegate = self
        self.view.addGestureRecognizer(tapRecognizer)
    }
    
    internal func handleTap(gesture: UITapGestureRecognizer) {
        C4Log("handle")
    }
    

    The view loads onto the canvas, but when I tap it I get a general crash that looks like:

    screen shot 2014-11-09 at 3 56 06 pm

    screen shot 2014-11-09 at 3 55 57 pm

    I also tried:

        internal lazy var tapAction: TapAction = { (location: C4Point) -> Void in }
        internal lazy var tapRecognizer: UITapGestureRecognizer = {
            let recognizer = UITapGestureRecognizer(target: self, action:Selector("handleTap:"))
            recognizer.delegate = self
            return recognizer
        }()
    
        public func onTap(run: TapAction) {
            self.tapAction = run
            self.view.addGestureRecognizer(tapRecognizer)
        }
    
        internal func handleTap(gesture: UITapGestureRecognizer) {
            C4Log("handle")
        }
    
    Bug 
    opened by traviskirton 7
  • Shit hot app concepts

    Shit hot app concepts

    We should have a list of new simple apps that we can upload to the store.

    They NEED TO BE shit-hot.

    • let's make a list of ideas
    • let's evaluate that list and identify the best concepts, easiest to make
    • let's come up with a potential schedule for working on simple things and releasing them
    opened by traviskirton 7
  • UIElements cancelling touches

    UIElements cancelling touches

    I have tested the following with C4Button, C4Slider, UIButton and UISlider.

    Problem: When I touch and hold on a UI element, the object automatically cancels the touch after approximately 0.25s. This happens with all the objects above.

    Here is some code that replicates this:

    #import "C4WorkSpace.h"
    
    @implementation C4WorkSpace {
        UIButton *button;
        UISlider *slider;
    }
    
    -(void)setup {
        [self addButton];
    //    [self addSlider];
    }
    
    -(void)down {
        C4Log(NSStringFromSelector(_cmd));
    }
    
    -(void)upInside {
        C4Log(NSStringFromSelector(_cmd));
    }
    
    -(void)cancel {
        C4Log(NSStringFromSelector(_cmd));
    }
    
    -(void)upOutside {
        C4Log(NSStringFromSelector(_cmd));
    }
    
    -(void)addButton {
        button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(0, 0, 100, 44);
        [button setTitle:@"button" forState:UIControlStateNormal];
        button.center = self.canvas.center;
    
        [button addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchDown];
        [button addTarget:self action:@selector(upInside) forControlEvents:UIControlEventTouchUpInside];
        [button addTarget:self action:@selector(upOutside) forControlEvents:UIControlEventTouchUpOutside];
        [button addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchCancel];
        button.exclusiveTouch = YES;
    
        [self.canvas addSubview:button];
    }
    
    -(void)addSlider {
        slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        slider.center = self.canvas.center;
    
        [slider addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchDown];
        [slider addTarget:self action:@selector(upInside) forControlEvents:UIControlEventTouchUpInside];
        [slider addTarget:self action:@selector(upOutside) forControlEvents:UIControlEventTouchUpOutside];
        [slider addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchCancel];
    
        [self.canvas addSubview:slider];
    }
    
    @end
    

    I have tried adding a UIButton to a raw iOS Single-View project and the bug didn't happen.

    I believe what's happening is that the Canvas (or some other object) is triggering cancel events for the buttons / sliders.

    Bug 
    opened by traviskirton 7
  • Styling / Branding

    Styling / Branding

    There is a logo and there are some colours. There is also a "tone" to the documentation (examples / tutorials). Are they all sufficient for reuse? Should we revisit these things, and if so:

    • what does a modernized colour scheme look like?
    • what does a modernized logo concept look like?
    • what does a modernized tone for the project look like?
    • let's describe a roadmap for evaluating the current state of the "look" of C4
    • let's define a roadmap for re-inventing the look of C4
    opened by traviskirton 6
  • Alpha-version Architecture Plan

    Alpha-version Architecture Plan

    We should have a new plan for rebuilding an alpha-version of the Swift branch.

    Questions:

    • what does an architecture plan for this look like?
    • can we use this plan to build out other components?
    • can we include options for "plug-ins"?
    • what does the current architecture plan look like? (i.e. i know there isn't one, but if there were one for the current version...)
    • what holes are there in the current plan?
    • what strengths are there in the current plan? and, can we reuse those?
    opened by traviskirton 6
  • crashed on iOS 8 + C4 1.1.0 with CocoaPods

    crashed on iOS 8 + C4 1.1.0 with CocoaPods

    I'm not sure how to submit a issue to Spec repo of CocoaPods.

    I'm using:

    • Xcode 7.3.1
    • C4 1.1.0 (Pods)
    • CocoaPods 1.0.1

    My app is workng on iOS 9. But, on iOS 8, my app is crashed with logs:

    dyld: Library not loaded: /System/Library/Frameworks/ReplayKit.framework/ReplayKit
      Referenced from: /path/to/myapp.app/Frameworks/C4.framework/C4
      Reason: image not found
    

    Should C4.podspec.json file link a ReplayKit as optional framework?

      "weak_frameworks": [
        "ReplayKit"
      ],
    
    opened by lufia 5
  • loadView override resizes main application window at launch

    loadView override resizes main application window at launch

    This commit: https://github.com/C4Framework/C4iOS/commit/e41c71f560898b9a9454c9c802ec3a55ddba0857

    Fixed #573, however it also added a new bug.

    This is a 2-part problem.

    First, I'm working with this in my main application setup():

    override func setup() {
        let c = C4Circle(center: canvas.center, radius: 20)
        canvas.add(c)
    }
    

    I expect this to be placed in the center of my canvas.

    However, I was getting this window:

    screen shot 2015-10-29 at 8 36 27 pm

    In setup, I ran:

    print(NSApplication.sharedApplication().windows[0].frame)
    

    Which produced:

    (235.0, 289.0, 480.0, 292.0)
    

    Which is NOT where the window appears:

    screen shot 2015-10-29 at 8 38 15 pm

    Turns out that my application's main window has a Restorable option in Interface Builder:

    screen shot 2015-10-29 at 8 39 33 pm

    So I unchecked that and I get:

    screen shot 2015-10-29 at 8 30 31 pm

    Which is ALSO not what the window should look like...

    So, to HACK this I had to do the following:

    In C4CanvasController, modify the import to include a variable for AppKit

    #if os(iOS)
    import UIKit
    #elseif os(OSX)
    import AppKit
    var applicationDidLoad = false
    #endif
    

    Then, modify loadView() to the following:

    public override func loadView() {
        #if os(OSX)
            if applicationDidLoad == false {
                let window = NSApplication.sharedApplication().windows[0]
                var bounds = window.frame
                bounds.origin = CGPointZero
                view = LayerView(frame: bounds)
                applicationDidLoad = true
            } else {
                view = LayerView(frame: CGRect(x: 0,y: 0,width: 50,height: 50))
            }
        #endif
    }
    

    Now I get:

    screen shot 2015-10-29 at 8 42 07 pm

    Which is expected.

    HOWEVER, the window alway reappears in the original spot determined by IB. Not, quite, what, I expect.

    POSSIBLE SOLUTION

    Implement a restorationClass per the NSWindow Reference

    opened by traviskirton 5
  • Using TNT package

    Using TNT package

    Yo my hard working amigos. Just a holler and notifying about this branch, with classic C4 and some all around goodies for creative fun. Packaged and fived.

    If needing a set of hands to help, or up for noble price dynamite, don't be shy. This is for personal convenience and use. 🧨

    Dynamite if together?

    opened by dotmain 0
  • Unable to build a project with Swift4

    Unable to build a project with Swift4

    There is a lot of warning and errors when trying to build with xCode 9.2. Do you plan to release a new version ?

    I'm a bit disappointed as I was really interested by the library...

    opened by benoitvb 6
  • Website tutorial issues: access modifiers, completion observers, swift 4

    Website tutorial issues: access modifiers, completion observers, swift 4

    addCompletionObserver warning: probably something it doesn't like about C4's implementation screen shot 2017-09-15 at 4 24 58 pm

    Hack a UI switch errors: When importing the "hack a UI switch" tutorial files, there are a number of errors. Access modifier error that SwitchThumb cannot inherit from Circle because Circle is public, not open. Can be fixed by changing Circle class to open, but I suspect there are many such issues in the framework (ellipse is also a public class, but shape is open) addTarget method needs to be changed to the following: self.addTarget(self, action:#selector(toggle), for: UIControlEvents.valueChanged) toggle function needs to be exposed to objective-C -> @objc func toggle() { ... }

    Swift 4 is out, and Xcode wants to upgrade it. There are ~8 warnings from not upgrading, but once it is upgraded, there will likely be more warnings/errors.

    opened by andrewDworschak 0
  • React-native import

    React-native import

    I'm pretty new to Swift, so please bare with!

    Is it possible with c4 to 'export' as a project (I think with a .framework...?), to be imported into other xcode projects?

    I've been referencing Swift -> React Native via this tutorial http://browniefed.com/blog/react-native-how-to-bridge-a-swift-view/

    However am unsure whether C4 can be used like this, or whether it was intended for standalone use only.

    opened by boyswan 2
Releases(3.0.0)
  • 3.0.0(Oct 14, 2017)

    • Updated to Swift 4.0 and Xcode 9
    • Add tvOS support
    • Use lowercase switch cases to adhere to Swift API guidelines
    • Improve math utility functions, you can now use them with CGFloat, Float, and Double
    • Use new NSNotification.Name type for events
    • Fix colon spacing to conform to new SwiftLint rule
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Sep 17, 2017)

  • 2.1.1(Jan 3, 2017)

  • 2.1.0(Dec 24, 2016)

    • Made some classes open so that they can be subclassed
    • New function to get the color of a pixel in an image
    • Fix style problems (using SwiftLint 0.14)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Oct 15, 2016)

  • 1.1.0(Mar 7, 2016)

    This is a huge release! The major difference is that we opted for a Swift-er style for the api and dropped the C4 prefix from almost all objects! Only our custom colors now have a prefix, like C4Blue, C4Grey, C4Pink, and C4Purple

    Content Along with this release we have also updated our website to a new version. Now, all content refers to the non-C4-prefix style (yes, we edited COSMOS tutorial).

    We added an examples tutorial highlighting differences between Processing and C4.

    We updated the installer to this version of the api.

    Contributors Adds muted property to Movie by @jbloit (#635) Repeat functionality added to ViewAnimationSequence by @Rabursky (#591) The * operator on Vector now works with scalar on the left hand side by @schwarrrtz (#584) Add language marks to code blocks by @3lvis (#583)

    Other Updates Adds init(copy) method to all visible and non-visible objects (#589, #633, #637) Updates initializers, allowing for subclassing outside of framework (#630, #631) Updates lerp function signatures, in Math and Point classes Adds default image sets to C4App Adds AVAudioSession playback setup Adds proper hit testing for shapes Changes Foundation's delay to wait (#624) Adds ScreenRecorder that captures the screen using ReplayKit. (#612) Adds shadow to animatable properties Adds rotation property to Shape, Movie, Image (#611, #613) Adds app icon set to C4App Removes C4 prefix from all classes (#605) Adds swiftlint and refactor code to proper styling constraints Adds spring animations Adds cumulative rotation to View, using actionForKey Adds spring animationd (#600) Adds gradientFill to Shape (#599, #620, #623) Adds rendering to View and Shape (#598) Adds colorWithAlpha function to Color, you can now do the following: let faded = black.colorWithAlpha(0.5) (#597) Adds locations and center variables to gesture actions (#594, #640) Adds ability to easily move one view above / below another view (#589) Adds ability to animate contents of Image (#588) Adds ability to easily move one view above / below another view Adds masksToBounds property to View Adds build status image link (https://travis-ci.org/C4Framework/C4iOS.svg?branch=master) Adds TravisCI Add ability to nest animations

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Jul 13, 2015)

Swift For Any Measure: Simplified

AnyMeasure Swift For Any Measure: Simplified A clean, Swift interface for Foundation.Measurement Read my post about it here. Requirements: Swift 4.0+

Jason Jobe 3 Sep 25, 2022
An open source Instapaper clone that features apps and extensions that use native UI Components for Mac and iOS.

TODO: Screenshot outdated Hipstapaper - iOS and Mac Reading List App A macOS, iOS, and iPadOS app written 100% in SwiftUI. Hipstapaper is an app that

Jeffrey Bergier 51 Nov 15, 2022
LifetimeTracker can surface retain cycle / memory issues right as you develop your application

LifetimeTracker Bar style Circular style LifetimeTracker can surface retain cycle / memory issues right as you develop your application, and it will s

Krzysztof Zabłocki 2.8k Jan 4, 2023
Hammer is a touch, stylus and keyboard synthesis library for emulating user interaction events

Hammer is a touch, stylus and keyboard synthesis library for emulating user interaction events. It enables better ways of triggering UI actions in unit tests, replicating a real world environment as much as possible.

Lyft 626 Dec 23, 2022
Customize and resize sheets in SwiftUI with SheeKit. Utilise the power of `UISheetPresentationController` and other UIKit features.

SheeKit Customize and resize sheets in SwiftUI with SheeKit. Utilise the power of UISheetPresentationController and other UIKit features. Overview She

Eugene Dudnyk 67 Dec 31, 2022
Measure the power output from a car or any moving vehicle from GPS data and weight

GPSDyno Measure the power output from a car or any moving vehicle from weight and GPS data of your iOS device. This is just a example project and shou

Marcelo Ferreira Barreto 0 Jan 7, 2022
A lightweight extension to Swift's CollectionDifference, supporting moves in addition to removals and insertions, critical when updating interfaces and managing reference types.

DifferenceTracker is a lightweight extension to Swift's CollectionDifference. It defines moves in addition to removals and insertions, critical when updating interfaces and managing reference types.

Giles Hammond 2 Nov 25, 2022
A Collection of useful Swift property wrappers to make coding easier

Swift Property Wrappers A Collection of useful Swift property wrappers to make c

Gordan Glavaš 2 Jan 28, 2022
Ello's open source iOS app

Ello iOS App Open source, but not open API Our API requires an application key and secret, which are currently being kept private. You can browse the

Ello 742 Dec 14, 2022
SuggestionsBox helps you build better a product trough your user suggestions. Written in Swift. 🗳

SuggestionsBox An iOS library to aggregate users feedback about suggestions, features or comments in order to help you build a better product. Swift V

Manuel Escrig 100 Feb 6, 2022
Open Source project for watching YouTube channel playlists.

YouTube Channel Watcher An open source project build using SwiftUI and Combine that lets you monitor a variety of different YouTube channels and their

Stewart Lynch 32 Jul 29, 2022
WhatsNewKit enables you to easily showcase your awesome new app features.

WhatsNewKit enables you to easily showcase your awesome new app features. It's designed from the ground up to be fully customized to your needs. Featu

Sven Tiigi 2.8k Jan 3, 2023
MediaType is a library that can be used to create Media Types in a type-safe manner.

This is a general purpose Swift library for a concept of typed treatment for Media Types. We use this library on clients and servers to speak the same dialect and to enjoy all the comfort strong types provide over raw strings.

21Gram Consulting 79 Jul 19, 2022
A repository for showcasing my knowledge of the Swift programming language, and continuing to learn the language.

Learning Swift (programming language) I know very little about programming in the Swift programming language. This document will go over all my knowle

Sean P. Myrick V19.1.7.2 2 Nov 8, 2022
Pure Declarative Programming in Swift, Among Other Things

Basis The Basis is an exploration of pure declarative programming and reasoning in Swift. It by no means contains idiomatic code, but is instead inten

TypeLift 314 Dec 22, 2022
🏹 Bow is a cross-platform library for Typed Functional Programming in Swift

Bow is a cross-platform library for Typed Functional Programming in Swift. Documentation All documentation and API reference is published in our websi

Bow 613 Dec 20, 2022
Functional programming in Swift

Swiftz Swiftz is a Swift library for functional programming. It defines functional data structures, functions, idioms, and extensions that augment the

TypeLift 3.3k Dec 25, 2022
Numerals is a package containing additional numeric types for the Swift programming language.

swift-numerals Numerals is a package containing additional numeric types for the Swift programming language. Contents The package currently provides t

Alexandre H. Saad 0 Jul 28, 2022
A parser combinator library written in the Swift programming language.

SwiftParsec SwiftParsec is a Swift port of the Parsec parser combinator library. It allows the creation of sophisticated parsers from a set of simple

David Dufresne 219 Nov 6, 2022