Skip to content

Instantly share code, notes, and snippets.

import UIKit
let containingRect = CGRect(x: 0, y: 0, width: 100, height: 100)
let path1 = UIBezierPath(rect: containingRect)
let circleRect = CGRect(x: 50, y: 10, width: 80, height: 80)
let circleCenter = CGPoint(x: circleRect.midX, y: circleRect.midY)
let radius = circleRect.height / 2
/*
@ole
ole / Mojave-dynamic-wallpaper-notes.md
Last active June 7, 2025 11:55
Reverse-engineering the dynamic wallpaper file format in macOS Mojave.

The dynamic wallpaper in MacOS Mojave is a single 114 MB .heic file that seems to contain 16 embedded images.

It also contains the following binary plist data in its metadata under the key "Solar". It's an array of 16 items, each with four keys:

  • i (integer). This seems to be the image index.
  • o (integer). This is always 1 or 0. Stephen Radford thinks it indicates dark mode (0) vs. light mode (1).
  • a (decimal). I’m pretty sure this is the angle of the sun over the horizon. 0º = sunset/sunrise. 90º = sun directly overhead. Negative values = sun below horizon.
  • z (decimal). This seems to be the cardinal position of the sun relative to the camera. 0º = sun is directly in front of the camera. 90º = sun is directly to the right of the camera. 180º = sun is directly behind the camera.
@ole
ole / adjustInfoPlist.sh
Last active April 23, 2018 14:53
A script for setting `UIFileSharingEnabled` and `LSSupportsOpeningDocumentsInPlace` in Xcode debug builds.
#!/bin/sh
if ( [ "$CONFIGURATION" == "Debug" ] ) then
echo "Enabling filesharing flags for '$CONFIGURATION' configuration in "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}""
/usr/libexec/PlistBuddy -c "Set :UIFileSharingEnabled true" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :LSSupportsOpeningDocumentsInPlace true" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
@ole
ole / core-data-backup.swift
Last active January 1, 2024 16:52
How to make a copy of a Core Data SQLite database. See https://oleb.net/blog/2018/03/core-data-sqlite-backup/ for more.
import CoreData
import Foundation
/// Safely copies the specified `NSPersistentStore` to a temporary file.
/// Useful for backups.
///
/// - Parameter index: The index of the persistent store in the coordinator's
/// `persistentStores` array. Passing an index that doesn't exist will trap.
///
/// - Returns: The URL of the backup file, wrapped in a TemporaryFile instance
@ole
ole / units-and-locales.swift
Last active March 12, 2020 04:01
Paste into a playground.
import Foundation
// Playing around with MeasurementFormatter.string(from: Unit)
let f = MeasurementFormatter()
f.locale = Locale(identifier: "de_DE")
f.unitOptions = .naturalScale
f.unitStyle = .long
f.string(from: UnitSpeed.milesPerHour)
f.string(from: UnitTemperature.celsius)
@ole
ole / XCTExpectation.swift
Last active December 6, 2021 13:10
A variant of XCTKVOExpectation that works with native Swift key paths. To try it out, paste the code into an Xcode playground and observe the unit test output in the console. See my blog post at https://oleb.net/blog/2018/02/xctkvoexpectation-swift-keypaths/
import XCTest
/// An expectation that is fulfilled when a Key Value Observing (KVO) condition
/// is met. It's variant of `XCTKVOExpectation` with support for native Swift
/// key paths.
final class KVOExpectation: XCTestExpectation {
private var kvoToken: NSKeyValueObservation?
/// Creates an expectation that is fulfilled when a KVO change causes the
/// specified key path of the observed object to have an expected value.
@ole
ole / URLSession.swift
Created February 22, 2018 00:08
Paste this into a playground and let it run for 5 seconds. You’ll get a non-nil response *and* error.
import Foundation
import PlaygroundSupport
let bigFile = URL(string: "https://speed.hetzner.de/1GB.bin")!
let task = URLSession.shared.dataTask(with: bigFile) { (data, response, error) in
print("data: \(data)")
print("response: \(response)")
print("error: \(error)")
}
task.resume()
let s = "Hello World"
let evenIndices = s.indices.enumerated()
.filter { $0.offset % 2 == 0 }
.map { $0.element }
for idx in evenIndices {
print(s[idx])
}
Process: Notes [17745]
Path: /Applications/Notes.app/Contents/MacOS/Notes
Identifier: com.apple.Notes
Version: 4.5 (863)
Build Info: Notes-863000000000000~1
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: Notes [17745]
User ID: 501
@ole
ole / type-pattern-matching.swift
Last active October 12, 2017 16:51
Pattern matching for types. See https://twitter.com/Gernot/status/918490645118976000 for context.
func ~= <T, U> (pattern: T.Type, value: U.Type) -> Bool {
return pattern == value
}
func f<T>(_ type: T.Type) {
switch T.self {
case Int.self:
print("Int")
default:
print("Something else")