Skip to content

Instantly share code, notes, and snippets.

@hishma
hishma / WWDC.md
Last active April 10, 2024 07:03
WWDC 2015-2018 Session Videos

WWDC 2015-2018 Session Videos

For some reason some older WWDC session videos have been disappearing from Fruit Co's the developer site. Luckily Harish posted this this gist of URL's and titles. So I converted that JSON to this markdown doc.

Enjoy!

2018

  • 102 – Platforms State of the Union – 2018 Platforms State of the Union
  • 103 – Apple Design Awards – Join us for an unforgettable award ceremony celebrating developers and their outstanding work. The 2018 Apple Design Awards recognize state of the art iOS, macOS, watchOS, and tvOS apps that reflect excellence in design and innovation.
@hishma
hishma / gist:1a7e94063d37e6fec1c80ccd7f960216
Created February 15, 2021 22:35
LocationDegreesFormatter.swift
import CoreLocation
class LocationDegreesFormatter: Formatter {
enum Direction {
case none
case latitude
case longitude
}
import UIKit
extension UIFont {
/// Returns an instance of the font associated with the text style, specified design, and scaled appropriately for the user's selected content size category.
/// - Parameters:
/// - style: The text style for which to return a font. See UIFont.TextStyle for recognized values.
/// - weight: The weight of the font, specified as a font weight constant. For a list of possible values, see "Font Weights” in UIFontDescriptor. Avoid passing an arbitrary floating-point number for weight, because a font might not include a variant for every weight.
/// - fontDesign: The new system font design.
/// - Returns: A font object of the specified style, weight, and design.
@hishma
hishma / Button.swift
Created April 1, 2020 21:32
Hand rolled button, Heasley style.
import UIKit
class Button: UIControl {
var labelText: String? {
set {
label.text = newValue
}
get {
label.text
}
import UIKit
extension UIButton {
/// Sets the background color to use for the specified button state.
/// - Parameters:
/// - color: The background color to use for the specified state.
/// - forState: The state that uses the specified background color. The values are described in `UIControl.State`.
public func setBackgroundColor(_ color: UIColor, forState: UIControl.State) {
if let colorImage = self.imageWithColor(color) {
@hishma
hishma / String+RFC3986.swift
Created October 23, 2019 16:02
Percent encode a URL String
import Foundation
extension String {
public func addingPercentEncodingForRFC3986() -> String? {
let unreserved = "-._~/?"
let allowed = NSMutableCharacterSet.alphanumeric()
allowed.addCharacters(in: unreserved)
return self.addingPercentEncoding(withAllowedCharacters: allowed as CharacterSet)
}
@hishma
hishma / VariantHandlingErrorMiddleware.swift
Last active September 15, 2019 00:16
Vapor 3 middleware to respond with errors based on the requested media type
import Vapor
import LeafErrorMiddleware
import APIErrorMiddleware
/// Respond with errors based on the requested media type
public final class VariantHandlingErrorMiddleware: Middleware, ServiceType {
public static func makeService(for container: Container) throws -> Self {
return self.init(environment: container.environment)
}
@hishma
hishma / measure.swift
Created September 3, 2019 17:17
Prints the time taken to execute a closure.
/// Prints the time taken to execute a closure.
///
/// Note: Only for debugging purposes.
public func measure<T>(_ label: String = "", _ f: () throws -> (T)) rethrows -> T {
let startTime = Date()
let result = try f()
let endTime = Date().timeIntervalSince(startTime)
print("\(label): Time taken", endTime)
return result
}
@hishma
hishma / open-hidden-files-on-macos.md
Last active August 30, 2019 15:17
Open hidden files on Mac OS

When the open panel is showing, press Command-Shift-. and the hidden files will appear.

TL;DR

If you are using the iso8601 strategy, you may not want to rely on the default Equatable implementation for Date (==) when comparing dates. You can use a good old fashion calendar comparison instead.

Strategies

JSONEncoder and JSONDecoder can both be configured with a strategy (dateEncodingStrategy and dateDecodingStrategy) for encoding and decoding dates. There are four named types in addition to allowing you to provide custom options.

| Strategy | Comment |