Finally tried out the iPhoneOS 1.0 qemu build, and it really is a treat. It really was so rudimentary https://devos50.github.io/blog/2022/ipod-touch-qemu-pt2/
Emulating an iPod Touch 1G and iPhoneOS 1.0 using QEMU (Part II) | Martijn de Vos

My personal website.

OK it took me a while, but I worked out I have to manually patch SpringBoard to enable third-party app icons. I figured I’d see if Lights Off runs, based on the code @chockenberry released — but that's all iPhoneOS 2.0 code, for the SDK, and needs a ton of work to backport it to iPhoneOS 1.0 😔

Luckily data-hoarder-me had a copy of my iPhoneOS 1.0 toolchain, so I installed it into a Mac OS X v10.5 VM and fixed up the port 😄

It's alive! /cc @chockenberry

Video of the original Lights Off for iPhone running mostly as intended on iPhoneOS 1.1 in qemu
And with a fixed-up icon to complete the experience

And if for some reason you ever need to install iPhoneOS 1.0 in an emulator and use third-party apps from the home screen, my SpringBoard patch was to SBIconModel _addItemsToIconList:fromPath:withTags: where I bypass a [[[SBPlatformController sharedInstance] allowedDisplayIdentifiers] containsObject:] and change the beq from an 0A to a 00.

If there's an easier way of doing this, I couldn't find it after 16 years of link rot 😅

Re-learning a lot today; the iPhoneOS 1.0 SDK is *very* different from iPhoneOS 2.0 and everything after it. Simple things like UIColor, UIScreen don't exist. Even UITableView was 'just’ UITable. UILabel was UITextLabel. QuartzCore was 'LayerKit’. There is no UIApplicationDelegate either, you subclassed UIApplication instead.

Really shows the longevity of a public API contract; almost everything in iPhoneOS 2.0 is very familiar to modern UIKit development

@stroughtonsmith There was also no UIViewController, which is why MPMoviePlayerController descended from NSObject directly. Haunted us for more than a decade afterwards.
@mariani1 @stroughtonsmith Not surprising, controllers have been distinct objects in Cocoa before, it was MVC not MVVC after all 🙂

@stroughtonsmith QuartzCore was LayerKit even in the class names (LKLayer instead of CALayer etc).

Also, back when iPhoneOS 2.0 came out, I asked if it would be possible to make a compatibility layer to let apps made for jailbroken iPhoneOS 1.x continue to work, and saurik told me the *Objective-C ABI* had changed. Abandon all hope.

@stroughtonsmith they also broadcasted the content of the text messages through a global notification center. Privacy was so simple back then.
@stroughtonsmith @farcaller I always wondered how they did things like sharing pictures or sending email from a third-party app before remote view controllers. Probably just by having more lax sandboxes where the app process could actually access your email?
@nicolas17 @stroughtonsmith @farcaller „lax“ sandbox as in no sandbox at all 🤷‍♂️
@nicolas17 @stroughtonsmith @farcaller It was possible to do some wild stuff before remote view controllers, such as sending stealthy e-mails/sms/tweets! See my https://github.com/0xced/Stealth-Messenger project. 😁
GitHub - 0xced/Stealth-Messenger: Send email, SMS or tweet without any user interaction on iOS

Send email, SMS or tweet without any user interaction on iOS - GitHub - 0xced/Stealth-Messenger: Send email, SMS or tweet without any user interaction on iOS

GitHub
@stroughtonsmith LayerKit? Oh, that was what the Intel-based AppleTV used at the time! I think that was basically CGLayer etc. that made it into Quartz later.
@uliwitness LayerKit is the original name for Core Animation! LKLayer -> CALayer

@stroughtonsmith Ah, could be that, too. I just remember it started on tvMacOS, then made it to MacOS a realease or two after, and then showed up on iOS too.

Whether it was CALayer or CGLayer, or both, I don't remember.

@uliwitness other way round! Started on iOS. tvOS started with BackRowKit? et al on OpenGL? on Tiger, LayerKit was an iOS/Leopard thing

@stroughtonsmith The original AppleTV released January 2007 (With Tiger and LayerKit).

The iPhone was announced, but didn't release until late June 2007.

Given it's much easier to downscale MacOS to Pentium M than it is to make it work within the 4GB/400MHz constraints of the iPhone, I’d say it's pretty certain the AppleTV came first, as a stepping stone?

@uliwitness iPhone project was in development for that time, so it's possible it went from iPhone to Mac AppleTV (and OS X in general)
@uliwitness LayerKit was the enabling technology for the iPhone UI; OS X Leopard, which reintegrated all that work, was famously delayed till late 2007 so that iPhone could be completed. I'm not sure if Apple TV was ever ported to Core Animation until it was rebuilt on top of iOS in 2010; it stayed on 10.4 for the duration of its life
@uliwitness (LayerKit was in the Leopard betas at the time, which might be where the confusion lies. It had been announced at WWDC by then, and it was basically everything I was developing at the time)

@stroughtonsmith “everything I was developing” = you based your projects on this unreleased API, or you were at Apple at the time, working on LayerKit?

If the latter, then ofc. you’d know better what it was originally developed for.

I can just go from my personal memory of making sure we can live without certain features every Mac had but AppleTV didn't and a colleague spotting this LayerKit thing.

@uliwitness doing some digging; definitely by AppleTVOS 2.0, it includes QuartzCore and CALayer, so perhaps you're correct that 1.0 included LayerKit.framework. I haven't been able to find a restore image for the original OS, but that makes sense
@stroughtonsmith Now let me add to the confusion by mentioning the fabled System 7 Layer Manager 🤪
@uliwitness well it's even more interesting, because the Apple TV UI doesn't use LayerKit or CA. It had its own layer system which doesn't connect to CA — so you wonder why it included it at all?
@uliwitness (…and to top it off, Tiger's own QuartzCore framework does *not* include any LayerKit components)

@stroughtonsmith That seems odd, yeah. I don’t think we bothered reverse-engineering anything beyond “there is this layer framework they're using” ... did Fig exist at this time already? Maybe they just needed it to host QuickTime movies in it?

AFAIR that LayerKit *was* CoreAnimation (or was a CoreFoundation-style thing that looked a lot like it, like CGLayer & co. do), but it would make more sense if they had a different LayerKit and it was just a double-use of an obvious name?

@uliwitness @stroughtonsmith LayerKit was on Mac first, and came to Apple TV as a natural effect of them having essentially the same OS. LayerKit was only ever what we now know as CoreAnimation AFAIK; CGLayer is a very different concept with an unfortunately similar name.
@foon @uliwitness @stroughtonsmith yes CGLayer is quite different and unfortunately similarly named, but it was there before CoreAnimation/LayerKit.

@foon @uliwitness @stroughtonsmith but that Apple TV booted Tiger, which didn’t have LK yet.

So it sounds like they back ported their early LK just for TV.

(And yes, LK = CA, not Quartz/CG. Not sure why the name change other than Steve wanting a purple CA orb at dub-dub. That’s probably the only reason.)

@stroughtonsmith When we made sure EyeTV would gracefully degrate when installed on an Apple TV, we saw LayerKit, that's why I think it was there first.
@stroughtonsmith no easier way! I think the old stuff patched SpringBoard up until 1.1.3, which had the initial starting points for third party app support (nikita_installer and such)
@stroughtonsmith do you use UTM at all, or all command line?
@collin most things I emulate don't correspond to a shipping qemu, so aren't really UTM-able
@stroughtonsmith @chockenberry where's that Cidya icon? 😜 more seriously, amazing work and threads. Thanks for sharing those explorations, nice trip down memory lane (esp reposting the old thread on Mac OS X 10.0 and theming 🤘)
@maccatalan @chockenberry this is a good half-year before Cydia existed!

@stroughtonsmith I still have the iPhoneOS 1.x source for MobileScrobbler, though not really useful anymore since the Last.fm radio service no longer exists.

I suppose it can still scrobble your iTunes music to Last.fm with a new API key, though.

Here's the source zips for every release, and the final deb file for Cydia too: https://www.c99.org/projects/source/MobileScrobbler/

The scrobbler runs as a daemon launched by LaunchServices, so you would have to put everything into the right folders yourself without the Cydia install scripts.

Index of /projects/source/MobileScrobbler

@sam @stroughtonsmith Oh, I remember running it. Thankfully QuietScrob works well enough now.

@stroughtonsmith @chockenberry

Who’ll be the first to release iPhone 1 on the vision pro?

@stroughtonsmith I remember when I got my iPod touch and it didn’t even have a way to add calendar items (screenshot 4).

That came in a later update and was a revelation! 🎉

@stroughtonsmith that 1.1 build also showed Apple had not yet realized people might use a multitouch iPod for more things than a click wheel iPod. You couldn’t even add a calendar event on device. You still had to go do it on your Mac and sync via a cable.

@stroughtonsmith I would love this emulation to evolve for the next iOS versions (probably with some emulated server components? 🤔)

Emulating it under iPhone at one point would be a nice touch as well 😎🤓

Konrad, running iOS on Android, lol. Should be reasonably fast too because Android allows apps to JIT.
sam henri gold (@[email protected])

Attached: 1 image Figured you'd all enjoy this fun lil bit of trivia. In 2007, when Steve Jobs introduced the iPod touch, there was a dramatic reveal in the keynote half way through that it had wi-fi and Safari. He went back to the demo and made a previously-hidden Safari icon pop onto the home screen (https://youtu.be/t_cNLpUXPdQ?t=2464). I thought this was just for the keynote, but it's a real mode you can force enable. I managed to do it on this emulated iPod touch:

Hachyderm.io
@samhenrigold I was trying app reveal earlier to see if it affected third party icons, but it did not
@stroughtonsmith I don’t think it even affects some first party icons, right? It had to be that specific set of internet-based apps?
@samhenrigold you can tag an app as revealable in its Info plist
@stroughtonsmith Ive been trying to do do the same but I am getting the error ERROR: "cc" cannot build an executable (is your linker broken?), do you know a way to fix this?