3 ms·
The tooling around iOS is a mess. Provisioning profiles, entitlements, plists, signing identities, APN certificates, keychains, targets, frameworks, service ext
by loevborg 10y ago
The tooling around iOS is a mess. Provisioning profiles, entitlements, plists, signing identities, APN certificates, keychains, targets, frameworks, service extensions are pretty much impenetrable. None of it makes sense conceptually and everything is vastly overcomplicated, so you're essentially following a wizard in XCode (the infamous "Fix problems" dialog), copy and pasting answers to desperate Stack Overflow questions or simply randomly trying things until it works.
XCode is the worst. Many pieces of functionality are only exposed through XCode rather than via a command line API. This means that you're essentially tied to a UI, Visual Basic style; building artifacts on a headless CI server requires you to jump through all kinds of hoops like unlocking a keychain. Worst of all, XCode itself is buggy more often than it is not, leading to the common advice to "close XCode and delete your Derived Data directory".
You're stuck between manually modifying the (eminently non-human-readable) project files in an editor, in which case you can see what you're changing, or going through a ever-changing UI, risking accidental breakage. From the perspective of a Unix developer, it's a wonder anyone gets anything done on iOS.
- shortstuffsushi 10y agoTo be honest, I'm of the opinion that they're "automagical" fixes have made things worse. Back in my day we understood what was going on behind the scenes and subsequently knew how to fix the problems, and now that these tools exist, I frequently find them to be in the way of fixing things that I would otherwise know how to do myself.
- saurik 10y agoI am pretty certain you can accomplish anything Xcode can do using a combination of the openssl command line tool, Apple's codesign command line tool, and manually flipping switches on Apple's website (which is only needed to set things up, not build stuff later); but, to be honest, I am normally (but I don't think usually...) using some of my custom tooling, which means I am not 100% sure (I am the developer of Cydia Impactor, which reimplements and automates all of this stuff to accomplish "here is an IPA that may or may not be signed; I want to install this on my iOS device as if it were signed by me" on any platform, such as Windows or Linux). Do you have an example of something that you believe can only be done by Xcode? I get the impression that a lot of iOS developers just kind of assume they are locked into Xcode, but in fact I want to argue no one should be using Xcode (as it really does suck, and it is totally unneeded). FWIW, I don't know how to use the codesign utility without unlocking the keychain, but that UI has nothing to do with Xcode, and I bet someone who is an expert with the keychain might have a non-crazy workaround for you given that I think the codesign application lets you specify a custom keychain: like, I would be surprised it you can't make a keychain that doesn't require being unlocked. To me, the most annoying thing about the official tooling is that the codesign tool uses Apple's "timestamp server" (AFAIK, in order to help make things not do devastating if you have to revoke a private key: you can use the embedded signed timestamp to trust that a binary was signed before it was revoked) and so does not work unless you have a connection to the Internet.