Skip to content

Instantly share code, notes, and snippets.

View macshome's full-sized avatar

Josh Wisenbaker macshome

View GitHub Profile
@macshome
macshome / EnvironmentVariables.swift
Created May 2, 2024 12:48
A playground to see different ways to get environment variables in Swift
import Foundation
// A playground to see different ways to get environment variables in Swift
// Foundation is the easiest way using the awesome ProcessInfo class.
// Get all of the environment variables for your running process in a Dictionary.
let foundationEnv = ProcessInfo().environment
print("********** ProcessInfo Environment **********")
@macshome
macshome / MobileGestalt.swift
Created April 24, 2024 17:44
Get crazy and hook MobileGestalt in a Swift Playground!
// Get crazy and hook MobileGestalt in a Swift Playground!
//
// If you are a LONG time Mac developer you know that the Gestalt system
// used to be a way to get info about your Mac. These days it's a private
// thing that Apple locks away and you shouldn't really touch. Most of the info
// that you need can probaby be found in IOKit, but some values, like
// the provisioningUDID are not avaliable any other way.
//
// That said, it's a fun exersize to see how to do some various things in Swift.
// Things like loading a dylib or calling private C functions.
@macshome
macshome / IOKit.swift
Last active April 29, 2024 14:42
This playground shows you a few different ways to get device info via IOKit.
// This playground shows you a few different ways to get device info via IOKit.
// If you want to explore IOKit and look for interesting data I would download
// the Additional Developer Tools from Apple and use the IORegistryExplorer app.
// It makes it super easy to poke around in the IOKit planes.
import IOKit
import Foundation
// For convient access we can make a computed getter for the PlatformExpert.
// Traditionally this has been where you go to find all sorts of data about the
@macshome
macshome / TimeInterval+Calendar.swift
Last active February 29, 2024 17:06
A simple extension to TimeInterval that allows you to just use the standard units of time rather than all that 60 * 60 jazz with APIs that use TimeInterval.
import Foundation
extension TimeInterval {
var seconds: TimeInterval { self }
var minutes: TimeInterval { self * 60 }
var hours: TimeInterval { self * 3_600 }
var days: TimeInterval { self * 86_400 }
var weeks: TimeInterval { self * 604_800 }
var months: TimeInterval { self * 2_628_000 }
@macshome
macshome / Activity.swift
Created February 15, 2024 18:49 — forked from zwaldowski/Activity.swift
os_activity_t for Swift 3
//
// Activity.swift
//
// Created by Zachary Waldowski on 8/21/16.
// Copyright © 2016 Zachary Waldowski. Licensed under MIT.
//
import os.activity
private final class LegacyActivityContext {
@macshome
macshome / IsScreenLocked.swift
Created October 30, 2023 19:05
Paste into a Swift playground on macOS to see if your screen is locked
import Cocoa
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
var isScreenLocked: Bool {
guard let wssProperties = CGSessionCopyCurrentDictionary() as? [String : Any], (wssProperties["CGSSessionScreenIsLocked"] != nil) else {
return false
}
return true
@macshome
macshome / Sessions.swift
Created October 30, 2023 18:55
Paste into a macOS Swift Playground to explore SecuritySession and CGSession attributes.
import Cocoa
// Security Session
//
// You can access bits about the security session to get some basic info. You can only get info about your own session.
// Other than the session id, the values are all Bools.
var sessionID = SecuritySessionId()
var sessionAttrs = SessionAttributeBits()
let result = SessionGetInfo(callerSecuritySession,
@macshome
macshome / MetadataSearching.swift
Last active October 30, 2023 18:43
Paste into a Swift playground to find all the executable binaries and shell scripts on your system with blinding speed.
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
// Simple class to search for things with `NSMetadataQuery`.
class Searcher {
// This is just for timing things
let startTime = Date()
@macshome
macshome / DiskSpace.swift
Created October 30, 2023 17:47
Paste into a Playground to see the different ways to calculate free disk space on macOS.
import Cocoa
import CoreServices
// Different ways of finding out about disk space on macOS.
// This method from CoreServices lets you find the space the OS considers "purgable"
// You can trigger a purge as well with `CSDiskSpaceStartRecovery`
let path = URL(fileURLWithPath: "/")
let possibleBytes = CSDiskSpaceGetRecoveryEstimate(path as NSURL)
@macshome
macshome / MemoryLayout.swift
Created April 3, 2023 19:20
Swift playground for exploring memory layout
import Foundation
// Playground for exploring memory layout in Swift.
// A simple struct
struct Foo {
let a: Int?
let b: Int?
var isTrue = true
}