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:
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' | \
// XPath CheatSheet | |
// To test XPath in your Chrome Debugger: $x('/html/body') | |
// http://www.jittuu.com/2012/2/14/Testing-XPath-In-Chrome/ | |
// 0. XPath Examples. | |
// More: http://xpath.alephzarro.com/content/cheatsheet.html | |
'//hr[@class="edge" and position()=1]' // every first hr of 'edge' class |
osascript -e 'tell application "iOS Simulator" to quit' | |
osascript -e 'tell application "Simulator" to quit' | |
xcrun simctl erase all |
import Foundation | |
// MARK: - Comparable | |
extension NSDecimalNumber: Comparable {} | |
public func ==(lhs: NSDecimalNumber, rhs: NSDecimalNumber) -> Bool { | |
return lhs.compare(rhs) == .OrderedSame | |
} |
#!/usr/bin/env ruby | |
# What is this for? | |
# This script fixes an issue appeared for some Xcode users where it would show long identifiers | |
# in the list of simulators instead of usual short names. This is caused by duplicate simulators | |
# being sometimes created after switching between Xcode versions, with the same | |
# device type + runtime pair occurring more than once in your list of available simulators. | |
# Instead of showing the same simulator name twice, Xcode defaults to simulator identifiers. | |
# | |
# What it does? |
#!/bin/sh | |
git diff-index -z --cached HEAD --name-only --diff-filter=ACMRTUXB | | |
xargs -0 -t -L1 /usr/local/bin/jsonlint -c; | |
if [ "$?" != "0" ]; then | |
echo "\nOne or more JSON file didn't pass jsonlint'ing."; | |
echo "Fix them before committing. If it is not possible to fix them all commit with the option --no-verify."; | |
exit 1; |
Modern Cocoa development involves a lot of asynchronous programming using closures and completion handlers, but these APIs are hard to use. This gets particularly problematic when many asynchronous operations are used, error handling is required, or control flow between asynchronous calls gets complicated. This proposal describes a language extension to make this a lot more natural and less error prone.
This paper introduces a first class Coroutine model to Swift. Functions can opt into to being async, allowing the programmer to compose complex logic involving asynchronous operations, leaving the compiler in charge of producing the necessary closures and state machines to implement that logic.
// https://stackoverflow.com/a/45777692/5536516 | |
import Foundation | |
struct MemoryAddress<T>: CustomStringConvertible { | |
let intValue: Int | |
var description: String { | |
let length = 2 + 2 * MemoryLayout<UnsafeRawPointer>.size |
import SwiftUI | |
func IfLet<T, ThenOut: View>( | |
_ value: T?, | |
then: (T) -> ThenOut | |
) -> some View { | |
ViewBuilder.buildIf(value.map { then($0) }) | |
} | |
func IfLet<T, ThenOut: View, ElseOut: View>( |