This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
| // | |
| // UIView+Threading.m | |
| // | |
| // Created by Seth Raphael on 4/12/11. | |
| // Copyright 2011 BumpTechnologies. All rights reserved. | |
| // | |
| #ifdef DEBUG |
Generate the list yourself:
$ cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk/System/Library/Frameworks/UIKit.framework/Headers
$ grep UI_APPEARANCE_SELECTOR ./* | \
sed 's/NS_AVAILABLE_IOS(.*)//g' | \
sed 's/NS_DEPRECATED_IOS(.*)//g' | \
sed 's/API_AVAILABLE(.*)//g' | \
sed 's/API_UNAVAILABLE(.*)//g' | \
sed 's/UI_APPEARANCE_SELECTOR//g' | \
| import Foundation | |
| // A bunch of convenience things | |
| func const <A, B> (b: B) -> A -> B { | |
| return { _ in b } | |
| } | |
| func repeat <A> (n: Int) -> A -> [A] { | |
| return { a in | |
| return map(Array(1...n), const(a)) | |
| } |
| import Foundation | |
| @dynamicMemberLookup | |
| enum JSON: Codable, CustomStringConvertible { | |
| var description: String { | |
| switch self { | |
| case .string(let string): return "\"\(string)\"" | |
| case .number(let double): | |
| if let int = Int(exactly: double) { | |
| return "\(int)" |
| // Copyright (c) 2019–20 Adam Sharp and thoughtbot, inc. | |
| // | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy | |
| // of this software and associated documentation files (the "Software"), to deal | |
| // in the Software without restriction, including without limitation the rights | |
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| // copies of the Software, and to permit persons to whom the Software is | |
| // furnished to do so, subject to the following conditions: | |
| // | |
| // The above copyright notice and this permission notice shall be included in |
| // Run any SwiftUI view as a Mac app. | |
| import Cocoa | |
| import SwiftUI | |
| NSApplication.shared.run { | |
| VStack { | |
| Text("Hello, World") | |
| .padding() | |
| .background(Capsule().fill(Color.blue)) |
| @main | |
| struct MyApp: App { | |
| enum Sheet { case first, second } | |
| @State var sheet: Sheet? = nil | |
| var body: some Scene { | |
| WindowGroup { | |
| VStack { | |
| Button("First") { sheet = .first } |
| // A view that can flip between its "front" and "back" side. | |
| // | |
| // Animation implementation based on: | |
| // Chris Eidhof, Keyframe animations <https://gist.github.com/chriseidhof/ea0e435197f550b195bb749f4777bbf7> | |
| import SwiftUI | |
| // MARK: - Chris's keyframe animation design | |
| struct Keyframe<Data: Animatable> { |