Skip to content

Instantly share code, notes, and snippets.

View drewmccormack's full-sized avatar

Drew McCormack drewmccormack

View GitHub Profile
@drewmccormack
drewmccormack / UpdateLocalizations.swift
Last active September 26, 2023 08:36
Using the AppStoreConnect_Swift_SDK package to update localizations on App Store Connect.
import AppStoreConnect_Swift_SDK
func updateMetadata(forBundleID bundleID: String) async throws {
let configuration = try! APIConfiguration(issuerID: "...", privateKeyID: "...", privateKey: "...")
let provider = APIProvider(configuration: configuration)
// Get app
let appRequest = APIEndpoint.v1
.apps
.get(parameters: .init(filterBundleID: [bundleID], include: [.appInfos, .appStoreVersions]))
@drewmccormack
drewmccormack / Queue.swift
Created September 29, 2022 07:02
A Queue (FIFO) built from an actor.
actor Queue {
private var tasks: [() async -> Void] = []
func enqueue(_ task: @escaping () async -> Void) {
tasks.append(task)
Task { await runNext() }
}
private func runNext() async {
guard !tasks.isEmpty else { return }
@drewmccormack
drewmccormack / LabelUniqueSet.swift
Created August 10, 2021 09:33
Introduces a Set type that stores enums, including those with associated types, and uniques on the label rather than the value.
struct Label: Hashable {
var label: String
}
protocol LabelUniquing {
var label: Label { get }
}
extension LabelUniquing {
//
// Lightweight but powerful state machine.
//
// Usage:
// enum TrafficLight: State {
// case red, orange, green
// }
//
// var trafficLights = StateMachine<TrafficLight>(initialState: .red)
// trafficLights.addRoute(from: .red, to: .green)
@drewmccormack
drewmccormack / MVVMSwiftUI.swift
Created February 25, 2020 18:39
Simple example of MMVM with SwiftUI.
import Foundation
import SwiftUI
import Combine
let dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
return dateFormatter
}()
@drewmccormack
drewmccormack / extract-glossaries.py
Created February 19, 2020 14:21
Extracts terms from Apple lg glossary files, combining into a JSON file
#!/usr/bin/env python
import sys, os.path
import os
import json
from xml.dom.minidom import parse
rootdir = os.getcwd()
lgPaths = ["iOS/AuthKitUI.lg", "iOS/CalendarUIKit.lg", "iOS/iCloudDriveSettings.lg", "iOS/MobileNotes.lg", "macOS/CalendarUI.lg", "macOS/Finder_FE.lg", "macOS/Finder_FinderKit.lg", "macOS/iCloudPrefPane.lg", "macOS/Notes.lg", "macOS/Reminders.lg", "macOS/TextEdit.lg"]
languageDirs = ["Dutch", "French"]
Here is some SwiftUI code I have.
------
NavigationView {
List(translations) { translation in
Button(action: {
self.dataSource.selectedTranslationId = translation.id
}) {
TranslationCell(translation: translation)
}
}
@drewmccormack
drewmccormack / SimpleStruct.swift
Created February 2, 2019 16:39
Simple example of multi-threading with mutable struct.
import Foundation
struct Small {
var i: Int
var j: Int
}
var s = Small(i: 1, j: 2)
DispatchQueue.global(qos: .background).async {
@drewmccormack
drewmccormack / LetTheCoWGo.swift
Created February 2, 2019 10:25
Demonstrates how a Swift value constant can mutate when using Copy-on-Write (CoW) and multi-threading.
import Foundation
struct NuclearPowerStationOperator {
class Storage {
var turnOffCores: Bool = false
func copy() -> Storage {
let new = Storage()
new.turnOffCores = turnOffCores
return new
@drewmccormack
drewmccormack / symbolicate-sample-dump.py
Last active August 15, 2023 09:32
Symbolicates a sample dump from Activity Monitor
#!/usr/bin/env python
#
# To use this, just put the DSYMS in the same directory as the sample dump file,
# and run the script from that directory, passing the sample dump file name as only argument
#
import re, sys, os, subprocess
sampleFile = sys.argv[1]