Apps with embedded frameworks are broken
Me, 6.30pm, last night:
Ooh! My new version of Barback passed App Store review! Let me download it and play around with it!
Me, 6.35pm, last night, after Barback crashed after launching on me and my friend’s phone:
ASIDQWOIE:WQ JPO<FWEFLQWLDFEQIHER 1
I tried resubmitting the app with a few build settings changed and this time it was rejected for ‘crashing on launch’, with the crash log looking something like this:
Dyld Error Message: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /private/var/mobile/Containers/Bundle/Application/ED6A7194-EAD0-4FB6-8E81-C4C987E60E08/<AppName>.app/<AppName> Reason: no suitable image found. Did find: /private/var/mobile/Containers/Bundle/Application/ED6A7194-EAD0-4FB6-8E81-C4C987E60E08/ <AppName>..app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x100168000, size=0x00194000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/ED6A7194-EAD0-4FB6-8E81-C4C987E60E08/<AppName>.app/Frameworks/libswiftCore.dylib Dyld Version: 353.5
Though I spent the first few hours drowning my perceived ineptitude in beer and looking for solutions to the problem, it appears the entire issue was out of my hands and instead an issue with the App Store. In fact, this issue doesn’t just affect plucky half-wit devs who like fancy cocktails, but the likes of Omni Group and Pragmatic Code:
Last update of Linky crashes on launch. It’s removed from sale. We’re sorry. It seems to be bug on the App Store and not an error from us. ~ @pragmaticcode
Looks like another busy weekend ahead: OmniFocus 2.0.2 for iPad is crashing on launch, not sure why yet. If you still have 2.0.1, keep it. ~ @kcase
Turns out it’s an issue with all apps with embedded frameworks, which naturally includes all Swift apps.
The best part about this? Apple already approved a bunch of apps that exhibit this behavior!
The review process and walled garden model, which was specifically designed to prevent bad customer experiences like upgrading to an app that breaks immediately, failed to keep out apps that literally cannot make it past the launch screen.
The second best part about this? The app store doesn’t grant developers any ability to revert back to a previous version of the app. So now all of my Manhattan-swilling customers have to go off memory until a fix is in place. 2
The third best part about this? It’s impossible to reproduce! Apple’s canonical way of testing a distribution build is creating it as an Ad Hoc build and running that – which, of course, doesn’t exhibit the somewhat troublesome behavior of crashing immediately.
So, yeah – if Barback or any other app you own now crashes on launch – sorry, I wish there was something else I could do. Some tribal wisdom has pointed me in the direction of regenerating my developer certificates, which I’ve tried – but again, because the problem is impossible to reproduce on my end, I can only hope that it works.
Another incident in favor of my longstanding argument: the gatekeeper model for mobile apps would be great if the gate wasn’t made half out of plywood and half out of titanium – and the gatekeeper stopped showing up drunk to the job.
(Writing this made me feel better. If there’s an obvious solution to this problem, or you have more details, or [very likely] I am wildly inaccurate about any of this, please let me know in the comments.)
Update: October 4 – looks like Apple fixed the issue, manually resubmitted all affected apps, and they are all available as updates in the App Store. So yay for only two days of outright downtime.