RSSAmplifier

Blog

High Caffeine Content

The High Caffeine Content blog.

highcaffeinecontent.comRSS feed ↗40 posts

Latest posts

A Month With OpenAI's Codex

A Month With OpenAI's Codex March 01 2026 I'm no stranger to using ChatGPT for development — a good chunk of the migration of all my apps from Objective-C to Swift, over a hundred thousand lines of code, was done with LLM assistance — but I've been sleeping on the shift that is already well underway in our industry. A year ago ChatGPT added an 'agents' feature that I handed some programming tasks,…

The iPad Pro Manifesto (2024 Edition)

The iPad Pro Manifesto (2024 Edition) May 14 2024 Another year, another series of incredibly-overpowered new iPads Pro, another round of '…shame the software sucks, though' reviews. But 'sucks' means different things to different people, and it's been a while since I put together an iPad manifesto so I thought I'd delineate where I think iPadOS is dropping the ball or needs improvement…

Intel Virtualization and Apple Silicon

Intel Virtualization and Apple Silicon March 25 2022 The transition to Apple Silicon brought about many exciting things, but one of the capabilities left behind was access to the world of Intel-based virtual machines. X86_64 just isn't a trivial architecture to emulate, and it may never be feasible to do so on Apple Silicon at a useful speed as the operating systems you wish to run gain more and…

Where Mac Catalyst Falls Short

Where Mac Catalyst Falls Short February 16 2022 When the first UIKit-based apps appeared on macOS Mojave, it was abundantly clear that there was a long way to go before this technology was appropriate for developers making new Mac apps. With macOS Catalina, this initial half-step was put in developers' hands, and it took quite an effort to wrangle it into something that looked and felt like it fit…

Catalyst Sample Code Roundup

Catalyst Sample Code Roundup June 05 2021 I thought it would be a good idea to round up the various pieces of sample code I've created for Mac Catalyst just to get everything in one place. These are by no means step-by-step guides, merely illustrated examples that have come about over the course of developing my own apps and responding to questions from developers. No license or attribution is…

Supporting Catalyst's Optimize for Mac with Manual Layout

Supporting Catalyst's Optimize for Mac with Manual Layout May 16 2021 A key part of supporting Catalyst's new Mac Idiom (Optimize Interface for Mac) is having a way to ensure that every hardcoded number you use for layout has a value both for iOS, and for macOS, which no longer uses an automatic 0.77 scale and now lets you address every pixel on the display. There are plenty of strategies to come…

Manual UIKit Layout

Manual UIKit Layout May 13 2021 Whenever I mention that I don't use Interface Builder, Storyboards or Auto Layout, developers, especially newer developers, ask me how it's even possible to write UIKit apps like that. So many iOS tutorials dump you straight into Interface Builder and constraint-building, and while that does have benefits at the mid-to-high-end, like with localization and…

Broadcasts 2 + Swift

Broadcasts 2 + Swift May 10 2021 It's been a whole year since the release of Broadcasts on iOS & macOS, with a couple dozen significant updates in the in-between adding major new features, including: A RadioBrowser-powered directory of thousands of stations Recently Played Handoff CarPlay CloudKit syncing watchOS app tvOS app Localization to nearly 30 languages Early UI redesign for macOS 11 In…

Pastel

Pastel June 10 2020 All of us have a list of projects we'd like to do someday, when the stars align. One of the things I've had in the back of my mind for a while now was 'something to do with colors'. There's a missing part of iOS that's always bugged me, and that's comprehensive support for colors at a system level. One of my favorite bits of UI since the early days of Mac OS X was the system…

Broadcasts: Streaming Radio

Broadcasts: Streaming Radio April 01 2020 Way back in 2016 I built myself a mini streaming radio player app to use at home and give to family. It included all our local Irish radio stations, and had the most simplistic vanilla UI — a true minimum viable product. It worked! Barely! But it was enough to satisfy what I wanted, so I put 'MobileRadio' on the shelf at the time, forgotten with the piles…

Shortcuts for Mac

Shortcuts for Mac June 10 2019 One of the most interesting rumors before WWDC was that Shortcuts might be coming to the Mac, which of course raises all kinds of questions re the future of automation on macOS. WWDC came and went, and while Shortcuts got some huuge upgrades in iOS 13 (like a new conversational editor, and third-party actions with inputs and outputs), Shortcuts did not come to the…

Beyond the Checkbox with Catalyst and AppKit

Beyond the Checkbox with Catalyst and AppKit June 07 2019 WWDC 2019 is here, and with it, a new way to write apps on the Mac: Catalyst . Catalyst is the developer-facing name for the technologies — formerly known as Marzipan — bringing iPad apps to the Mac by introducing UIKit and dozens more frameworks from iOS to the platform and unifying the substrate layer between iOS and macOS. Catalyst apps…

Why Apple needs iPad apps on the Mac

Why Apple needs iPad apps on the Mac June 01 2019 https://www.youtube.com/watch?v=cYoGTl1vy1g Dieter Bohn makes his case for why Apple should go all-in on Marzipan. I want Apple to force itself to be like, okay, the iPad version of Mail is the only version of Mail that Mac users inside Apple get to use, and if they don't like it, they have to fix it. I think they should do the same for as many…

WWDC, A Wish List (2019 Edition)

WWDC, A Wish List (2019 Edition) June 01 2019 This piece first appeared on MacStories on May 27th, 2019. Way back in 2016, in the era of iOS 9, I laid out the tentpole features I wanted to see come to iOS and the Mac. Now, three years later, so many things from that wishlist have become a reality that it's probably a good time to revisit the topics that haven't yet come to pass, and plan a new…

(Don't Fear) The Reaper

(Don't Fear) The Reaper May 22 2019 With the rapidly-upcoming introduction of UIKit apps to the Mac, I've been reminiscing on Twitter quite a bit about Apple's transition to Mac OS X, and just how NEXTSTEP and Mac OS found common ground despite being two very different OSes both architecturally and from a design standpoint. There are a couple of different vectors I will follow here, if you permit…

Translating an ARM iOS App to Intel macOS Using Bitcode

Translating an ARM iOS App to Intel macOS Using Bitcode May 18 2019 When Apple introduced Bitcode and made it mandatory on watchOS and tvOS, they kinda hand-waved away questions about why it existed, with nebulous claims about it being useful to tune-up binaries by utilizing the latest compiler improvements. Since then, Bitcode has proven instrumental in the seamless overnight transition of…

Turntable

Turntable March 29 2019 I picked up a simple motorized turntable and photography light tent, and it's amazing how much of a difference it makes to photographing miniatures & paint jobs. I should have done this way sooner. If you're curious, I'm recording on iPhone, using Halide for the still shots, and FiLMiC Pro for the video — manual focus and exposure controls are a must. I am no great painter,…

Casting Scenery Pieces with Hirst Arts Molds

Casting Scenery Pieces with Hirst Arts Molds March 24 2019 Taking a break from code for a bit, I thought it would be fun to document another project; this Christmas I found myself finally biting the bullet and picking up some of the amazing terrain molds from Hirst Arts . I've enjoyed the hobby of collecting & painting miniatures like those from Games Workshop 's games, but scenery building was…

Deeper Integration with Marzipan

Deeper Integration with Marzipan March 07 2019 Despite appearances, this is a UIKit app running on macOS Mojave via Marzipan using all the techniques referenced in prior posts. Additionally, it has a Mac-like icon and About window, provides Services, and supports AppleScript. In this post I'm going to just superficially touch on some of the elements that make this possible, and some of the things…

Making Marzipan Apps Sing

Making Marzipan Apps Sing March 02 2019 Preamble Fair warning: this post is going to be code-heavy, and it's more a series of examples rather than a tutorial — not everything you need will be listed here. Use this as your springboard (😏) to new research topics. All examples will be Objective-C — that's the language I work with, and the easiest language to work with private and undocumented APIs…

Bringing iOS Apps to macOS Using Marzipanify

Bringing iOS Apps to macOS Using Marzipanify March 01 2019 At WWDC 2018 Apple gave us a ‘sneak peek’ at perhaps one of the most impactful developments on macOS since the transition to Mac OS X: UIKit apps running on the desktop. Today, I'm going to detail a special tool I built, called marzipanify, to get started with UIKit on the Mac early, and start the initial bringup of your iOS app on macOS.…

WWDC Wish List

WWDC Wish List February 28 2016 I don’t often do this, but this year I think it’s important; Apple is more open & receptive to feedback today than it ever has been. With iOS 9 and iPad Pro, iOS has made a tremendous leap in the past year on iPad. With that in mind, I wanted to note down all the things in my head that I really want to see the iOS computing platform grow to cover. What follows is an…

TV Channel App on tvOS

TV Channel App on tvOS November 07 2015 https://www.youtube.com/watch?v=mRvhU8U3oew As an internal demo, I put together a set of RTÉ channels for tvOS - quickly thrown together using official public HD streams. It’s nice having one ‘app’/icon per channel - though switching between them is slower than channel switching on a television. I prefer the generic chromeless approach to each network having…

Native UIKit apps on Apple Watch

Native UIKit apps on Apple Watch September 12 2015 Security This is not a jailbreak. This will not make a jailbreak possible. This is no less secure than regular, sandboxed iOS apps. It’s not a way to bypass the security systems in place on your device. It does, however, let you build/prototype the kinds of apps you can do on iOS, but can’t on watchOS right now. Thought it important to say this up…

Redux: When is a Smartphone OS not a Smartphone OS?

Redux: When is a Smartphone OS not a Smartphone OS? April 30 2015 On the eve of Windows 10 and the reveal of Continuum for Phones , I thought it was worth revisiting something I posted three years ago . With Windows Phone, many posit that Microsoft is moving everything to the Windows RT kernel (aka Windows 8); the phone could be as much Windows 8 as the tablet or desktop. Microsoft have been…

MPW, Carbon and building Classic Mac OS apps in OS X

MPW, Carbon and building Classic Mac OS apps in OS X January 24 2015 MPW In 2014 I came across a project on Github described as “Macintosh Programmer’s Workshop (mpw) compatibility layer” . There has never been a good way to compile Classic Mac OS apps on modern OS X — for the most part, you were stuck using ancient tools, either Apple’s MPW or CodeWarrior, running in a VM of some sort.…

Lisa Pascal Development in Lisa Workshop

Lisa Pascal Development in Lisa Workshop May 27 2014 Tonight’s project: learn how to write code that runs on Apple’s LisaOS. In this piece, I am using Lisa Office System 3.1, with Workshop 3.0. As you can imagine, there hasn’t been any kind of documentation on this in decades, so it was all learned through painful trial and error, and scouring old manuals for information. Fun! Getting Started…

NetBoot PowerPC & Intel Macs from Mavericks Server

NetBoot PowerPC & Intel Macs from Mavericks Server April 25 2014 As part of some maintenance here, I did a little research as to how to set up NetBoot for various different Macs. For this piece, interchange ‘NetBoot’ with 'NetInstall’ if you’re being pedantic - I’m NetBooting the install disc for a particular OS. NetBooting a full install should also be possible using the same techniques.…

The Quest for A Perfect Lotto Machine Simulation

The Quest for A Perfect Lotto Machine Simulation January 14 2014 Today, Lotto Machine went live on Google Play for the first time, 23 months after the launch of the original on iOS. Why did it take so long? Actually, it didn’t! This new version is the result of a project I’ve been working on for [just] a week that is a complete rewrite of the app - in 3D, with 3D physics. How did we get here? I’ve…

2007's pre-M3 version of Android: the Google Sooner

2007's pre-M3 version of Android: the Google Sooner May 05 2012 When Google first showed off Android, they showed it running on a device very similar to Blackberries or Nokia E-class devices of the time. This device was the Google Sooner - an OMAP850 device built by HTC, with no touchscreen or WiFi. This was the Android reference device, the device they originally built the OS on. Recently, I got…

When is a Smartphone OS not a Smartphone OS?

When is a Smartphone OS not a Smartphone OS? April 19 2012 If you’re thinking purely in terms of ‘smartphones’ whenever you think of iOS, Android and Windows Phone, you’ve blown it. It’s so incredibly short sighted to think of these OSes as a smartphone play - they are all so much more than that. These are the three OSes going to power consumer devices (phones, tablets, laptops, desktops, TVs,…

Return AirPrint Sharing to Mac OS X v10.6.5

Return AirPrint Sharing to Mac OS X v10.6.5 November 10 2010 Today, Apple released Mac OS X v10.6.5 which was supposed to bring AirPrint to any printer connected to your Mac. Only problem is, a last minute issue (due to patent trolling?) has caused them to pull support for AirPrint in OS X. Don’t panic! You can return it, but you’re going to have to pull some files from a prerelease version of…

Apple's iBooks Dynamic Page Curl

Apple's iBooks Dynamic Page Curl February 15 2010 A week ago at NSConference I decided to try and figure out how Apple performed the page curl animation shown in the iPad announcement keynote. It ended up being pretty easy to implement, and the page curl code has been in the OS since the beginning (although it’s currently a private class - I’ve filed a radar asking to open the API that you can…

Nook v1.0 on Android Emulator

Nook v1.0 on Android Emulator December 22 2009 I decided to check out the Nook earlier today; naturally it’s not available in Ireland so I downloaded the firmware update from Barnes and Noble and set to work on getting it to run on something. I didn’t expect to get very far, but after a little hacking it was actually working. To get it to run I had to: grab the firmware update using the tools at…

Speech Synthesis on iPhone 3GS

Speech Synthesis on iPhone 3GS July 06 2009 Posted this on Twitter a week back , but maybe it’s of some interest to blog readers; here’s how to do simple voice synthesis on the iPhone 3GS (3GS-only, I’m afraid). It’s a private API, but hopefully if we file enough Radars they’ll make it a public one. To enable the following code to work you’ll need to link the VoiceServices.framework (from the…

Using Dynamic Library Injection with the iPhone Simulator [REDUX]

Using Dynamic Library Injection with the iPhone Simulator [REDUX] January 14 2009 Previously I had blogged about developing dynamic libraries / SpringBoard plugins using the iPhone Simulator included with the SDK. Unfortunately, starting with iPhone OS 2.2, the old method of using a shell script to bootstrap SpringBoard no longer works. While the long-way-round gdb method is still usable, I…

How to enable Emoji systemwide

How to enable Emoji systemwide November 23 2008 As an addendum to my last post, I decided to figure out how to enable Emoji systemwide. My findings were first posted on Twitter , but I’m putting them here for persistence. You need to edit the file /User/Library/Preferences/com.apple.Preferences.plist on the device; whether you use a jailbreak to achieve this or merely some iTunes backup editor is…

Using Dynamic Library Injection with the iPhone Simulator

Using Dynamic Library Injection with the iPhone Simulator October 25 2008 UPDATE: This method no longer works for iPhone OS SDK 2.2 - please see my new article for an updated method. Many developers who are not targeting the App Store are developing extensions or plugins to SpringBoard, the iPhone’s shell, using a piece of software called MobileSubstrate which simplifies the loading of your own…

Flare Kit: Learning Interface Builder’s Plugin Model

Flare Kit: Learning Interface Builder’s Plugin Model July 09 2008 Well I’ve been spending the past few days furiously trying to learn something new. Took me a long time to decide on ‘what’, but I’ve settled on the following idea: Moving my custom controls to Interface Builder, so I can drag and drop them into new apps, set all their properties, and use them like never before - all without having…

Using Core Image Filters On or Under an NSWindow

Using Core Image Filters On or Under an NSWindow March 23 2008 So just to kick off I thought I’d drop a little Cocoa code to apply a Core Image filter to, or underneath, a window. This is similar to what Apple themselves use in Mac OS X v10.5 “Leopard” to create a blur under menus, etc. Firstly, you’ll need to define some things: typedef void * CGSConnection; extern OSStatus CGSNewConnection(const…