Skip to content

Instantly share code, notes, and snippets.

View zwaldowski's full-sized avatar

Zachary Waldowski zwaldowski

View GitHub Profile
@zwaldowski
zwaldowski / A-Swift-UTI.swift
Last active May 9, 2019 01:30
MobileCoreServices Swift audit
let swift = UTType.swiftSource
print(swift) // => Swift Source Code
print(swift.rawValue) // public.swift-source
print(swift.conforms(to: .sourceCode)) // => true
print(swift.declaration?[.conformsTo] as Any) // [ "public.source-code" ]
print(swift.declaringBundleURL as Any) // => /System/Library/CoreServices/MobileCoreTypes.bundle
print(swift.isDeclared) // => true
print(swift.isDynamic) // => false
print(swift.preferredTag(for: .filenameExtension) as Any) // => "swift"
print(UTType(preferredTag: "swift", for: .filenameExtension, conformingTo: nil) == swift) // => "true"
@zwaldowski
zwaldowski / CustomFontMetrics.swift
Created June 7, 2017 00:05
[WIP] UIFontMetrics Backport from iOS 11
//
// CustomFontMetrics.swift
//
// Created by Zachary Waldowski on 6/6/17.
// Licensed under MIT.
//
import UIKit
private extension UITraitCollection {
import Foundation
#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
extension Data {
init(referencing data: DispatchData) {
self = (data as AnyObject) as! Data
}
class MyViewController: UIViewController {
var d1: String?
var d2: String? = "foo"
}
let vc = MyViewController()
Array(Mirror(reflecting: vc).children) /* => [
(label: "d1" as String?, value: Optional.none as Any),
@zwaldowski
zwaldowski / safari-inline-video.sh
Last active December 10, 2020 07:31
Safari Inline Video
defaults write com.apple.Safari WebKitMediaPlaybackAllowsInline -bool false
defaults write com.apple.SafariTechnologyPreview WebKitMediaPlaybackAllowsInline -bool false
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false
defaults write com.apple.SafariTechnologyPreview com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false
import Foundation
/// A type representing an concrete part of an application, such that it can be
/// identified in logs.
///
/// A typical use is as a nested type:
///
/// extension MyViewController {
/// enum Log: Error {
/// case user
import UIKit
extension UIViewController {
func afterCurrentTransition(_ handler: @escaping(Void) -> Void) {
guard let coordinator = transitionCoordinator else {
return completion()
}
coordinator.animate(alongsideTransition: nil, completion: { _ in
import UIKit
extension UINavigationController {
func pushViewController(_ viewController: UIViewController, animated: Bool = true, completion: @escaping(Void) -> Void) {
pushViewController(viewController, animated: animated)
guard animated, let coordinator = transitionCoordinator else {
completion()
return
// This incantation works well for a fullscreen, paging collection view.
// Non-fullscreen works too, with a little finesse.
extension MyCollectionViewController {
private func updateCollectionViewLayout(forBoundingSize size: CGSize) { ... }
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
updateCollectionViewLayout(forBoundingSize: self.view.bounds.size)
private extension NSManagedObjectContext {
func executeAsync<T: NSFetchRequestResult>(request: NSFetchRequest, resultsOf _: T.Type = T.self) -> Future<[T]> {
let d = Deferred<[T]>()
let afr = NSAsynchronousFetchRequest(fetchRequest: request) { results in
d.fill(results.finalResult.map({ $0 as! [T] }) ?? [])
}
do {