I'm sure it hasn't been perfect either, but "I write better developer documentation than the large software corporation Apple" wasn't the focus of his complaint.
Specifically, he claims: that large portions of the Swift user interface API are entirely undocumented; that he was unable understand the full capabilities and limitations of the package manager through reference to its documentation; that he finds himself frequently searching video transcripts to find information unavailable in the documentation.
I think that, if these claims are true, it does not reflect a good state of affairs, and that the extra work imposed on the individual developer is worth complaining about.
I don't think that he is calling out the work of the technical writers in any unsociable or shameful fashion in the text of his blog post. I agree that 'garbage' is not a good metaphor for "woefully inadequate," as it implies that the existing documentation would be better disposed of than referred to. However, I think that when dealing with a large software corporation that has teams dedicated to writing and maintaining technical documentation, it is not especially cruel or unfair to use hyperbolic language in calling extraordinary lapses to public attention.
I am sure all the documentation this guy has ever written has been 100% perfect.
I’m a fucking awful violin player, but I know unskilled/professional playing when I hear it. Is the implication that I have no room to complain when I buy a ticket and the performance is bad?
I agree wholeheartedly that it’s garbage. I don’t want to watch videos, I want comprehensive, detailed API documentation.
Here’s one obvious example that comes to mind: how do I turn on the GPS on iOS? This is documented nowhere. The answer is that location requested with an accuracy above 100 meters will use cell towers, below 100 will use WiFi geolocation, and below some other threshold (10 meters? I forget) will use GPS. But that’s nowhere in the docs. They just tell you “use what you need”.
Here’s another one, what is the maximum size of a process’s address space on an iPhone? This one is not documented anywhere, you actually have to read the kernel source code to figure it out!
These are just two examples that popped into my head from ~3 years of iOS work. But they’re the rule, not the exception. Apple documentation tells you how to do basic and standard things the way Apple expects. It doesn’t give actual details of how things work.
If these are the 'best worst examples' you can come up with after ~3 years of iOS work, they are not really convincing. I just scanned the CoreLocation docs, and while it is true they do not explicitly state what sources are used for getting a certain accuracy, the documentation makes it very clear and unambiguous what you should use. You use kCLLocationAccuracyBest if you need to be absolutely sure you have the highest accuracy, otherwise you use one of the distance-based accuracy settings. How these get the location should be irrelevant to any application that doesn't need to force 'best available', and it's pretty clear from how the API is structured that iOS will combine whatever data is available to give you the accuracy you asked for (ie: if there is no cell tower or WIFI geolocation available, it will fall back to GPS even for the lower-accuracy setting). It took me only 5 minutes of reading the documentation to figure this out, I would say its an example of good documentation, not bad documentation.
As for 'how large is the maximum iPhone process address space', I don't really know how bad it is that you cannot easily find this documented. It doesn't really seem like something many apps need to know about, and highly specific to the iOS version and maybe even hardware it is running on. Not saying your app or whatever you are making doesn't need it, but I estimate this kind of information is irrelevant for close to 99% of apps. I don't think the iOS programming model is such that you can derive any kind of guarantees how much you can allocate from that number. What do you want to use it for?
Your assertion in the first paragraph is not actually true. Go to Central Park or somewhere else with no nearby WiFi beacons and try it out. Your test app will not fall back to GPS accuracy. I have done this. So actually the documentation you’re quoting is wrong.
As for what you might want to know the maximum address space size for: evaluating whether unattributable production crashes might be due to running out of address space.
>> Your assertion in the first paragraph is not actually true. Go to Central Park or somewhere else with no nearby WiFi beacons and try it out. Your test app will not fall back to GPS accuracy. I have done this
That's not what I said, nor what the documentation said. From the documentation:
The system always tries to give you the best location data that is available, but these properties give the system the flexibility to turn off hardware elements when they are not needed. For example, if you set the desired accuracy to kCLLocationAccuracyKilometer, the system might disable GPS and use only the Wi-Fi hardware, which would save power and still give you a greater accuracy than you requested.
In other words: the system will not promote the returned accuracy if the data it has is already within the accuracy you asked for, but it will still fall back to whatever source of location data available, possibly higher accuracy, if no lower-accuracy source is available.
This makes a lot of sense, because it is much more common to only have a GPS signal, and no cell tower or WiFi geolocation (e.g. when doing outdoor activities) than the other way around. In that case your '1 km accuracy' app might in fact get you GPS accuracy. But if you are in Central Park, you will most definitely get location data from cell towers, so in that case your app will not promote the accuracy since you didn't ask for it. Ergo, if you need the highest accuracy, you have to ask for it. The documentation makes it very clear the accuracy parameter is not a tool to force a specific accuracy, but to allow the system to relax accuracy in favor of lower power consumption, if your app doesn't need it.
Not trying to be snarky here, but in this particular case it seems the problem is not in the documentation, but in your reading comprehension of it. Unless of course there is a bug in CoreLocation, or you got so unlucky when you tested in Central Park, that there was somehow not even a GPS signal available.
Huh? How is that not exactly the right answer? You tell the API how accurate you need it to be, iOS will get you that accuracy with the minimum energy consumption necessary.
It makes sense to not document the thresholds because they probably aren’t constants. (Or even if they are, they might not be in iOS 14.) It’s entirely possible that the accuracy of non-GPS methods may improve over time.
And they would certainly vary greatly depending on the environment. Who knows, if you’re in a concrete jungle with very dense wifi coverage, it could even be more accurate than GPS.
Conversely if you’re in a tiny rural town with one cell tower and no wifi, it might have to turn on GPS even if you only need 50 meter accuracy.
Sure, and actual real people (even smart, nice, capable, well-meaning ones) sometimes turn out garbage, or don't even try to produce.
Ignoring that out of kindness is silly. Any good professional should welcome honest feedback; if you can't criticize a $T company because it might hurt someone's feelings...
Complaining about the docs is important feedback, aimed at ultimately making Apple healthier. And getting to the point where the docs are sub-par means priorities have shifted over a period of years, and will take that long to get back in shape. That's not on any one person, not even Cook, except in the ultimate responsibility sense.
You, and them, are not their work. Both are subject to constraints of time, manpower, and talent. I don’t believe the issue is with the employees as much as the company not investing enough in that area. When you see a company with the resources Apple has, you expect to see better from them.
Secondary example is XCode, their IDE. It is painfully obvious they don’t have enough people working on XCode.
And the author acknowledges that those individuals are not the problem.
> the problem is not individual engineers — who are not responsible for writing docs; that is the responsibility of dedicated coumentation teams. But that does not make it any less a failure of Apple’s engineering organization.
I get author's point, but this sentence reads weird.
If a team ("dedicated [documentation team]") is responsible for something, surely the individuals in such team are responsible too? Or the author is making a distinction between "engineers" and team members of documentation teams?
It's perfectly reasonable to say that a company of Apple's magnitude should invest in making sure their APIs are well documented. We're not talking about OSS projects with donated developer time.
I took a look at your comment history and you seem to be OK painting broad strokes on companies/institutions that you do not particularly enjoy. At one instance you were directly attacking a user.
It is clear, from your username, you like Apple. But ask yourselves whether you are being fair to the OP here.
A partnership is made of people. A limited liability corporation is not. Sure, it employs people, as do I, but I am not made of my employees and neither is Apple.
I don't know much about Apple developer documentation but I disagree with your comment.
The following is a quote form the article
> Given what I know of Apple’s approach to this, the problem is not individual engineers — who are not responsible for writing docs; that is the responsibility of dedicated coumentation teams. But that does not make it any less a failure of Apple’s engineering organization. The job of an API engineering organization is to support those who will consume that API. I don’t doubt that many of Apples API engineers would love for all of these things to be documented. I likewise do not doubt that the documentation team is understaffed for the work they have to do. (If I’m wrong, if I should doubt that, because Apple’s engineering culture doesn’t value this, then that’s even worse an indictment of the engineering culture.) This kind of thing has to change at the level of the entire engineering organization.
It would be shameful if the author were calling out a particular person, because we do not know anything about any particular person who worked on these docs, what state they were in before that person got there, and what road blocks they might have.
However, it is not shameful at all to call out Apple as a company. The assumption is that if any company in the world has the resources to make their documentation amazing, it is Apple. The failure is not that of the people working on the documentation, it is that of the company as a whole.
1. As others have noted, the metric in question (and what I do call out in the post) is: does documentation for this even exist?
2. Turns out that yes, I do prioritize documentation extremely highly when I publish projects for other people to use. See e.g. https://true-myth.js.org – and when we built this, we did not publicize it or ship a 1.0 till every single item was documented.
I'm not looking for perfect docs; that doesn't exist. It's something you can always improve.
A lot of Apple documentation is just a list of functions a class has without any explanation whatsoever. Many sample projects are written in older swift versions and don't compile anymore. Xcode 11 can only convert swift 4 to swift 5. A lot of samples are still swift 2 or 3. So you either have to manually fix the errors or install an older xcode version to convert them. Such a waste of time.
Listen to some podcasts with Marco Arment, the developer for Overcast and before that Instapaper. He details how bad the documentation is for some of Apple’s low level audio APIs and how it seems like no one at Apple has actually used some of the WatchOS APIs. Catalyst (Apple’s framework for porting iPad apps to the Mac) documentation is a constant source of complaint.
This comment was one of the ones that led me to update the title of the post. My intent: "Having this much missing is garbage." How people took it: "What exists is bad." Thus, the rewording to "Missing."
Not the OP, but I'd provide some examples if there were examples to provide. Unfortunately, their documentation is severely lacking in the area I've worked with recently (Apple Sign In on the server end). Basically, it doesn't exist. I can't point to a specific example other than to say it doesn't exist.
And this should be concerning. If Apple wants people to use Apple Sign In, they should do more than mandate its use. They should make it easy to implement, or, at the very least, provide clear documentation.
Instead, I've had to rely on other documentation outside of Apple that all start by sharing their disappointment with Apple's documentation on this subject, and then try to decipher what Apple is doing.
The only two examples he gives for this "a lot" is a completely new framework that was released about a month ago, and a tool that is, honestly, still in development and not part of normal development workflows for Apple platforms.
1. SPM has been out (and officially supported as part of the Swift Project) since Swift 3 came out. You can defend it as being "not part of normal development workflows for Apple platforms" if you like, but it has been officially supported for years. People would rightly call this out in any other language; it's fair to call it out here.
2. My very strongly held opinion, as I noted at the end of the article, is that you can't actually call something "shipped" until you've shipped the docs.
It is part of the Swift project, but it is not really part of the Apple development ecosystem. It might at some point be, but it is not now, and it is a small side project. And it is not, in general, used when developing for the ecosystem.
And you may feel that way about docs, but it is not reasonable to find one single rushed release, and use that as an argument against the entire ecosystem. That is not a reasonable argument.
Official documentation may be more important for a framework that is new, especially if it's one that developers are being required or encouraged to switch to.
Well, he gives two examples. One is a framework first released about a month ago, in a great rush. The other is a tool that is not part of normal workflows, and is basically still in development.
I'm sure documentation will improve on both, and I've very rarely suffered from a lack of documentation when developing for Apple platforms. It has been a lot more pleasant to read than, for instance, Android documentation (although it has been a number of years since I did that, so it may have improved.)
I've been working on implementing Apple Sign In on the server side. While the iOS side seems to be simple enough, their server side documentation is horrible. I can't imagine anyone actually used the documentation to implement Apple Sign In, and instead had to trial and error their way through it, relying on Googling well and finding other similar solutions.
This is sad, because if Apple wants Apple Sign In to succeed, you'd think they want to make this as easy to implement as possible. Instead, they relying on simply rely on mandating it's use in iOS Apps.
> I am sure all the documentation this guy has ever written has been 100% perfect. /s
I think you're proving his point. Apple, and the larger Apple community, simple doesn't' care about people who don't drink the Kool-Aid, and they mock and insult dissenters (as you did).