A Beginner’s Guide to iOS Provisioning Profiles
theodo.fr
theodo.fr
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.
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.
Some things that I am thankful for:
- TestFlight. It's a pain that I have to have the app approved before I can send the beta out to my internal users. Seems like internal should let internal users update to a beta version without review (while external would still require a review). At least it lets us test with our production certificates eventually. It's still a pain if something is discovered and it requires a rebuild and a new review.
- Emergency Review Requests. I've had to submit 3 of these over the past several years, and Apple has always initiated my within 2 hours. I really appreciate this, and I'm glad that people haven't abused it so much that they've scrapped it.
A UDID is the result of a SHA-1 calculation: there is no such thing as a 40-character hexadecimal string which is "isn't a valid UDID" by syntax, so this is interesting to me: if the author ever sees this, did you get an error saying that from Apple (in which case we know they have a massive database of every device in existence)?
(Note that UDIDs beginning with 32-bits of F are returned by the APIs that provide app-specific advertising identifiers on the device, so if you saw one of those and decided it was "invalid", that was returned because they used a tool which tried to return a UDID but was using the older public APIs to do that from a sandboxed application.)
(edit: Oh, I just noticed there are comments on the website. I'm stupid, and will copy this there.)
Some sort of data is bundled up in that string: when you add a device's UDID to the Apple dev portal, the confirmation page will tell you what type of device it is (iPad 2, iPhone 7, etc).
I can't recall entering a bad UDID, so I'm unsure what that looks like.
https://www.theiphonewiki.com/wiki/UDID
For Apple to be telling you what kind of device it is, they either have to have a database of all the devices as they are built or a database of devices which have been checking in to their servers. (I'm betting the latter is what is happening here, but the former would be fundamentally more interesting to me.)
> Note that UDIDs beginning with 32-bits of F are returned by the APIs that provide app-specific advertising identifiers on the device, so if you saw one of those and decided it was "invalid", that was returned because they used a tool which tried to return a UDID but was using the older public APIs to do that from a sandboxed application
It did have a bunch of Fs at the beginning, so that is probably the explanation! Thanks :)
I dread everytime I'm forced to open XCode to compile or deploy something.
* Unity 3D applications are deployed to an iOS device through XCode.
Everything else is harder/worse though. Documentation, SDK/APIs, device ecosystem (so, testing and QA). So pick which part(s) of the experience you'd rather have not-suck and go with the platform that matches it best, if ease of development is your main concern.
[EDIT] if you do decide to go with Android, look at Square's libraries and their documentation of how they develop for Android. They've done a lot to de-shitify the platform, but it means doing things very differently from how you would if you followed the official docs. If you're doing anything non-trivial you could do a lot worse than deferring to Square's judgement on how to structure your application.