Dear Apple
github.com
github.com
Google has a long road ahead of it, but it looks like they have the right pieces in place where I see small, incremental improvements each year, so maybe they're the tortoise. Milestones on that long road are like migrate away from Dalvik, fix business model / monetization issues with the Android marketplace, switch to vector-based canvas blitting, rationalize API support for different manufacturer-added features, and so on. What would be interesting is if they steal Apple's developer thunder by capitalizing upon open source and their in-house build system, and out-flank Apple's developer mindshare, by creating a developer-oriented ecosystem.
Imagine if you could hook up your own Docker container that Google's build infrastructure then taps to build your Android app...but all the open source your app depends upon are in their build infrastructure, with near-instant feedback on build and CI problems of the open source bits operating at a massive scale. App development shifts to a posture where open source frameworks/modules/libraries that already power a lot of software are orders of magnitude more convenient to develop under this ecosystem, and the agility/efficiency of all those Android developers coalescing around common open source components online in a single build and CI ecosystem far outstrips Apple-based developers stuck with XCode and their own person-oriented toolchains. Apple has nothing in the pipeline remotely like that kind of ecosystem. Google would also get big data-based insight into phone app development trends in real-time that Apple could only dream about. Google's phone app development OODA loop would tighten considerably smaller than Apple's.
I also wonder if Google and Microsoft could find benefits to team up to replace Dalvik with CLR, and then Microsoft Visual Studio becomes a first-class citizen on Linux for building CLR-based apps on Android.
The majority of the Android users is yet to experience any of those improvements.
This has arguably negative impacts on Android's utility as a non-Google OS, but there's no question that this strategy was to help push updates to users faster.
No need for smoke and mirrors games regarding decoupling Android.
But... why? Gradle already does a good job eliminating works-on-my-machine-isms, that sounds like cloud-for-the-sake-of-cloud.
> I also wonder if Google and Microsoft could find benefits to team up to replace Dalvik with CLR, and then Microsoft Visual Studio becomes a first-class citizen on Linux for building CLR-based apps on Android.
But... why?
Github for build and continuous delivery/deployment/integration; extremely distributed build. Today an app developer pulls down the latest version of an open source library and building against it, then files any integration issues against the library's ticketing system. Google's system allows the library developer to build a version, then find everyone whose apps that use their library break because of the new proposed version. It vastly speeds up the delivery cycle and increases robustness between builds of all your dependencies and your app.
A lot of people really like the re-factoring and IntelliSense features in Visual Studio, but hate working under Windows. The new Linux compatibility push under Windows when it matures may accomplish the same as making Linux a first-class citizen in Visual Studio.
Google trying to further develop Dalvik/Android Runtime for Android seems to me eerily like Sun developing further generations of SPARC. Google would have to put up a really big war chest to continually find and address all the edge cases to sustain a process virtual machine going forward into the future, and I'm not clear where the value proposition lies in doing so, rather than settling upon an existing process virtual machine with more developers working upon it. I suspect Google does this because adopting someone else's process virtual machine, even an open sourced one, risks that someone else somehow strategically chokepointing Android development in the future with incompatible changes.
That assumes that library authors can see the code of dependent applications. Ehhh...
> It vastly speeds up the delivery cycle and increases robustness between builds of all your dependencies and your app.
Presumably by breaking repeatable builds? I certainly don't want it to replace libraries without my knowledge, and that's the only part where I can see it possible "speeding up the delivery cycle".
Oh, yeah, Gradle can do that anyway with -SNAPSHOT dependencies.
> A lot of people really like the re-factoring and IntelliSense features in Visual Studio, but hate working under Windows. The new Linux compatibility push under Windows when it matures may accomplish the same as making Linux a first-class citizen in Visual Studio.
Tried IntelliJ/Android Studio? Especially considering that ReSharper, which is more or less a port of IJ's refactoring, is usually considered a must-have add-on for VS.
> Google trying to further develop Dalvik/Android Runtime for Android seems to me eerily like Sun developing further generations of SPARC. Google would have to put up a really big war chest to continually find and address all the edge cases to sustain a process virtual machine going forward into the future, and I'm not clear where the value proposition lies in doing so, rather than settling upon an existing process virtual machine with more developers working upon it.
Sounds like migrating to OpenJDK would be a much more reasonable path in that case, since it wouldn't mean starting over in third-party application support.
What "long term reality"? They have been doing this when they were near bankrupt and continue to this day, 20 years later, and they are now the richest company on the planet.
Maybe the long term reality is actually success?
I will say, though, that I've always liked IB (though not storyboards). But then there's the wonderful "Oh, you opened a nib, I should move something around in the XML." -> SCM status changes even though I didn't modify the file.
In response to your problem, having done the Xcode Old/Xcode New dance every year since 2012, I got into the habit of making sure they are never running concurrently. Things get even worse if you run xcodebuild on the command line while a different UI version is running.
...yes. You can. 6 is the minimum.
> having done the Xcode Old/Xcode New dance every year
There didn't used to be this hard division between Xcode versions because of the compiler. If you were willing to do some reconfiguring, you could use newer GCC or "Apple LLVM" with the older Xcode.
As for other problems, please file radars and respond to requests for additional information. I have been on the external side of radar, I know it can be frustrating, but we do read them and we do take direct action based on them. Even duplicates are very useful.
CoreSimulator is used during builds and for IB's accurate rendering feature. Instruments and Console open connections to CoreSimulator for various purposes. A lot of things can break.
Once a given institution reaches a certain scale, the apparent limitations on human attention at the top of the hierarchy make it impossible for the organization to contemplate small ventures. Like the parable of Bill Gates finding a hundred-dollar bill on the sidewalk, it's no longer worth the time to stoop to pick up the small stuff.
(Intuitively, this seems related to the absurd inflation in the cost of public works in the US over the last century.)
It's especially frustrating here because the business case here seems pretty simple: go make these developers happy and effective. It's a known audience, they're easy to reach, they're not shy about telling you what they want. I don't think a lot of information needs to get to the top of the hierarchy.
You want to play in Apple's walled garden, you take the scraps they give you.
They have no financial incentive to make the experience better for you if you're already a captive developer.
And one of the reason the bigger spending customers are with Apple is the benefits of the walled garden. It's more secure, and it's updated far faster (or at all). For developers it's a better environment to develop for, consistent screen sizes and hardware features and I know I can write my latest app for the latest iOS and within months of it's release the vast majority of revenue producing customers will be on it. That's a big reason why better apps are written on iOS first, it's easier.
1) 2x mouse nuts is still mouse nuts.
2) Do they really make 2x? Especially after you deduct $100 a year?
He said something to the extent of "Xcode has a robust version control system" and the crowd laughed. And the presenter got offended, said it "wasn't nice" of the audience to laugh considering how hard-working the Xcode team was.
My recollection is blurry so it would be nice if someone else remembers this too.
But if that's really the attitude within Apple or the Xcode team, don't hold your breath for improvements.
Edit: changed my paraphrase of the presenter. since I remember it a little better now.
Apple's organizational culture is meant to be about small teams. Steve Jobs once said "we're the biggest startup on the planet" [5]. This leads to complaints about various neglected features or products and calls for Apple to hire more employees or spin off divisions so it can have dedicated resources. Just like people will always complain about the quality of service at airlines, Apple watchers will always complain about whatever pet issue they feel isn't getting enough attention. That there are complaints doesn't in and of itself mean that Apple needs to change their organizational culture. These complaints always miss the opportunity cost of the changes they suggest: that Apple is Apple because they are resource constrained.
[1] http://fortune.com/2016/01/28/apple-retail-ahrendts-employee...
[2] https://www.nytimes.com/2016/11/21/technology/how-apple-empo...
[3] https://abc.xyz/investor/pdf/20161231_alphabet_10K.pdf
Let's break that down across everything those 16k software engineers are responsible for:
• The OS kernels, drivers, and frameworks of macOS, iOS, watchOS, and tvOS
• The base-system software on all of those OSes, including rather involved apps like: iBooks, Safari, Mail.app, iTunes, Photos.app
• "Apps by Apple" like iWork, GarageBand, Pages/Keynote/Numbers, Final Cut Pro, Logic Pro X, iBooks Author, and, yes, Xcode
• Server.app (which adds to macOS the kind of enterprise domain-management + provisioning + MDM tooling that Windows gets in its Server releases, but also includes extra stuff like Wiki software, Xcode build-bots, and VPN management)
• Firmware + macOS drivers + Windows drivers(!) for Apple hardware (keyboards, mice, touchpads, headphones; I bought one of those MacBook USB-C multiport dongles recently and it did a firmware update, so apparently it has firmware too)
• Firmware and operating systems (usually NetBSD-derived) for "appliances" like the Airport/Time Capsule [though at least this has been dropped]
• Sponsored work on open-source projects (Webkit and LLVM being the two big ones) and standards (the Swift language; the Bonjour protocol)
• iCloud backend services: this includes the "obvious" things like the object store behind iCloud Drive and the per-app iCloud CoreData syncing servers; but also includes:
• • Apple's own maps service to back Maps.app
• • the iTunes store and App store (both in web and app form)
• • the Apple Music / "iTunes in the Cloud" sync servers
• • iCloud PIM support (mail, notes, calendars, reminders)
• • the FaceTime and Messages.app servers
• • Siri and Dictation (and you likely won't believe just how many languages Apple has built well-trained speech models for)
• • the Apple website / Apple Store + Apple Support apps
• • Xcode "development team provisioning" servers
• • webapp versions of iWork and the PIM apps (go look at icloud.com)
• • the Game Center servers
• • the iAd servers
Then again, maybe this is another way of saying that Apple really doesn't care about professional programmers and their needs. Similar to the feedback around the latest MacBook Pro specifications and the lack of movement in the Mac Pro and Mac Mini machines.
It's not like having fewer people per project hasn't worked out for them in the one way that really matters for a company -- profit.
Obviously it's not the absolute number (50k) that counts, but how it's distributed. (And those 50k are not even all programmers).
If you do an OS, a mobile version of it, an embedded version of it, your own language, several huge SDKs, your own mail app, your own calendar app, you own spreadsheet, your own word processor, a TV appliance, the biggest mobile app store on the planet, your own logic board and CPU designs, the biggest music store on the planet, another large desktop app store, your own DAW, your own NLE, your own compositor, your own broswer, your own javascript engine, your own AI, your own Maps, and several other things besides, then no, "50k" might not be enough.
Microsoft has 5000 programmers just for Office.
Additionally, we are invited to "Contrast that with Google which has 72k employees". So, Google, which has almost exactly 20% more employees (after removing all retail and help center Apple employees), is supposed to be so much different, and an example of a large company? At least the comparison to Microsoft has more than a doubling of employees.
The argument that Apple works the way they do because they run their teams lean is fine, but let's not start acting like they're not a large company just because their culture is intentionally different in some aspects.
Edit: To be clear, by objection is to the premise "Apple is not a big company." which was the leading statement of the comment I replied to.
http://smbresearch.net/sizing-up-smb/
Businesses with thousand or more employees are so rare as percent of the whole that they deserve their own category anyway. As in, what you say about them wouldn't apply to businesses in general and vice versa.
Apple might be vertically integrated to a higher degree than Microsoft and Google, but Apple doesn't have as big of product diversity.
If you have headcount for "testing" then I don't want to use your software. Tests are integral to coding and should be written first.
Your process description doesn't sound anything like how I understand products are developed at Apple. Where's the headcount for the designers / UI specialists? Are you counting them as engineers?
Yeah, if everything were synchronous, deterministic, linear, and non-interactive, life would be so much easier, and test-driven development might actually work.
They invest most of their resources into hardware and critical software. Everything else clearly is secondary.
It doesnt take much to form this opinion either, just look at the quality of their software overall. Very inconsistent, trending towards mostly stable. Design improves which is good I guess but not what developers need.
They don't make a ton of money from independent developers and it doesn't matter anyway because most of the heavily used apps are created by Apple themselves.
But I was under the impression Apple at least took care of the devs who work on their platforms.
As someone else has noted: vote with your keyboard. I do ROR web development in part because I am free of many of the constraints other devs must face on custom platforms.
If you don't like doing dev with Apple, don't do dev with Apple. Either pick better tooling (if available) or ditch the platform (if possible).
I've also found that homebrew packages sometimes don't contain the necessary header files for development, (i.e. imagemagick), so you're forced to switch to MacPorts just for that and it's altogether more painful than on Linux.
It also simply just doesn't feel like a lot of the tools target macOS, there's an outdated bash shipped by default and Apple even broke curl recently[1].
1 - https://daniel.haxx.se/blog/2016/10/11/poll-on-mac-10-12-is-...
my dev machine is a VM, which gives me a ton of other benefits, like portability, resizability, backups, versioning, and overall stability. I can (and have) given devs my VM to get up and running immediately on a complex project, without having to do a lot of setup.
With each OSX update, usually stuff broke, needed to be reinstalled, or performed differently. With Linux, that is not the case. And with a linux VM, I can ride out host upgrades and keep plugging away with a machine i know works - or attempt an upgrade on a cloned VM and have a trivial way to backtrack if it fails.
However, as of fairly recently, IIUC Docker for Mac uses macOS's native hypervisor framework rather than relying on VirtualBox as it used to.
Shit like this is why I do all my development in a VirtualBox with Arch Linux. While my co-workers argue about the best way to install Docker on their Macs, I just `pacman -S docker && systemctl start docker` and get on with my life.
You could probably run vanilla macOS in a VM without running into any problems.
He only ever used Homebrew as far as I know.
> Would Linux be immune to that, if you had 2 concurrent pkg managers?
How would that ever happen?
The entire pbxproj format is horrible, but at least you have stuff like BUCK (https://buckbuild.com/) that can mitigate some of that.
Another thing I would add to that letter are good build boxes. Bring back xserve, so we have CI that is not based on mac pros or mac minis.
Android devs, even though they have build tooling options with java, have other problems that make developing on their platform painful. Their simulators are bad compared to iOS, the fragmentation / lack of updates is pretty annoying and overall it's harder to deliver good equivalent android apps than it is for iOS. iOS as a software platform is actually pretty solid.
What do you use to develop on? Any specific laptop or is it a desktop?
FWIW I'm still not sure what the BUCK workflow is suppose to look like for most teams. It seems like if you use BUCK you're expected to not use Xcode even as an editor, yet there isn't another editor to pick up the slack (assuming you want autocompletion and decent highlighting). I think there's still a lot of work to be done for it to be a viable replacement, even for Objective-C, for Swift it's even further away.
If you find that "insulting", consider how it feels to be told to go through the work of filing dozens of most-likely-duplicate reports simply because Apple won't deign to allow searching existing reports. Regardless of whatever excuses they give for that, it sends a very clear signal about how Apple values the time of third-party developers.
What exactly isn't apparent? How Radar is the way things get done and you need to file a Radar if you want anything fixed? I'd think that's crystal clear given that every single Apple engineer you talk to will explain this to you.
It was a big mistake for Apple to ask outside developers to use a bug tracking tool that purports to be a user interface into Radar. I would much prefer a ticket system like those used at other companies. If Apple engineers triage a ticket and decide to open a Radar, that process should be opaque to the outside world.
Once Developer Relations made the decision to allow outside developers to create bug reports, Apple should have given us a modern, full-featured web interface. Instead, they gave us the ridiculous, brain-dead tool that you see at bugreport.apple.com, which looks like it was designed by an incompetent Cobol programmer (apologies to Grace Hopper).
Subnautica.
That's about it.
1. https://www.bitwig.com/en/bitwig-studio.html
Edit: Not sure about the state of Linux VST plugins/emulation though :)
And in many cases, Ardour[3], may be good enough.
1 - http://reaper.fm
I just wish Apple had taken the Google route and made development a lot more open, not sure what they stand to gain by keeping even iOS development a walled garden but hey it's their platform to do with as they please.
The only redeeming Apple product I found is the mac mini which gives low-budget developers an easy access to their expensive platform.
Objective-C did have some basic tools. But even Eclipse was better?
You can always use AppCode, I believe it has the usual JetBrains level of refactoring. I have a copy paid and installed yet I almost never use it.
From my perspective Xcode is a really nice IDE. I prefer the lean UI compared to Visual Studio and Xamarin. The only thing that annoys me is that since Swift the syntax colouring and autocompletion breaks multiple times a day. This is a slight annoyance for me, but otherwise I personally think it's a decent IDE.
I don't experience the crashes like you do. And I've never really used much refactoring tools in the past, so I guess I don't know what I am missing out on.
But you might want to consider AppCode from Jetbrains. Apparently it supports both Objective-C and Swift and it's refactoring support -at least- should be good.
It used to be worse, of course. Especially in Swift 1.x and 2.0.
I thought this was a letter from Github to Apple, but was disappointed to discover that it was a letter from some subset of the Apple developer community.
I recognize that this is sort of pulling at a thread, but since Github is so widely used, perhaps some sort of exception can be made?
I don't think the letter goes far enough.
If Apple is doing something you don't like, put pressure on them. A better strategy than OP's would be to go to greater lengths, like labeling Apple "anti-developer" (the same way Trump uses labels against his opponents), but too many here are too scrupulous and rationally-minded to do this. The basic fact is, the tactics you need to use in a philosophical debate and the tactics you need to use to effect change are different, and, to be effective, you need to be a bit radical and a loose-cannon. Activists who insist on being factual, moderate or respectful, lose. That includes political activists, union leaders, as well as anybody that wants to change corporate behavior or policy as is the case here.
Unions are an old-school idea. But unions won't work to protect iOS developers from Apple.
So why doesn't someone build up a brand, blog, or platform as a "developer's advocate"? A Twitter account, speaking on behalf of 100k followers, has leverage influence, and power. They can represent people, organize communities discussing developers' issues, and speak out with a single voice. Why does nobody do this? It's easier for Apple to ignore 100k individuals than for them to ignore 1 organization with 100k followers. The latter will get much wider media coverage.
Social media empowered mobs, why not use that for good?
I'm honestly curious what makes it sound immature though. Could you elaborate?
I am very thankful that they at least had the wisdom to expose "xcodebuild", etc. as command-line tools, because I have always set up my primary build to rely only on the commands. (Even when “building” from Xcode, the build that I click runs "make" underneath with xcodebuild.) That way, I never need to be in the GUI and can work around its quirks or bugs that make it unusable, which has paid many dividends.
They do fascinating work though. Making a living with Microsoft technology at my day job(s) for two decades, Apple stuff was a refreshing change.
It pulls in the UI designer from XCode, and you get all of the advantages of Visual Studio which is hands-down just a better IDE than XCode.
> there are so many alternative toolsets you can use
Actually no, if you want the latest, most supported tools, frameworks APIs etc. you have to use Xcode.
Most of us don't want to use Xcode, but we also don't want to use C#, (Swift is actually very nice), which IS NOT a native solution.
See http://continuous.codes/ for an example of what can be done with F# and Xamarin.
OTOH Codename One ( https://www.codenameone.com/ ) has a very different interpretation of "native". They use their own widget toolkit like QT which makes them "less native" in that regard. But they are native to Android (being Java based) and translate directly to C/Objective-C which means you can literally write OS native code and use native widgets within the hierarchy.
I think native is a worthless word in that regard as it doesn't properly convey meaning in these sort of complex situations. Once PhoneGap started billing itself as "native" this all went out of the window...
You can do all of this at the command line without having to use Xcode. All Xcode is doing is running a bunch of command line applications to accomplish what it does... it isn't some kind of evil magic, it is just a project manager; so close that broken IDE that is Xcode and write some makefiles: you can use the same iPhone SDK and use the same compilers and the same programming languages can you can build .apps and codesign things for distribution via the App Store and never once touch Xcode. I'm working on a project right now that uses app extensions and special entitlements and all kinds of crazy up-to-the-latest iOS magic, and I'm not using Xcode: you can too; it isn't even like it is complicated, and so I continue to have absolutely no sympathy.
It's not good but it's workable. Which Apple accepts as a reason to focus very few resources on dev tools.
Yes, this letter should probably reference a bug#, but it should not be in the bug itself. And, because it's an open letter, you can go add a bug and make a PR to add it to the letter.
What I'm saying is you never know what's going to happen on a single heavily controlled platform. In 2 years time, Apple can create a competitor to your app and ban you (happened), create new guidelines so you can't publish your app anymore (happened), change search algorithms and your app drops (happened?), remove you for political disagreements (happened), remove your app because of API deprecations and non-backward compatibility (happened).
Developing on a platform like this in inherently risky, this is probably fine for (most) companies but I would advice developers to avoid devoting all their careers to a single platform and try to diversify a bit in case something happens in the future.
What I recommend doing is to learn how to develop solid, cross platform APIs and you then have the flexibility to develop as many clients as you like, web, iOS, Android etc. with no single point of failure.
Messenger has had CallKit integration for quite a while now.
Those are the important things, quibbling about some features in the development system is silly, esp. when Apple has poured tons of resources into Swift and done it really well.
SourceKit seems to crash with every moderately complex expression.
Sadly, that's the only refactoring support available right now.
For anyone who signs this, make sure you throw a report at em as well!
From my perspective as a programmer, Apple's success has hinged entirely on the quality and innovation of their OS and dev tools. For a long time, both of these have been ahead of the game (since NeXT came to Apple).
They lose this advantage, they crumble. Mark my words! Go on, mark them.
I'm surprised by how few of these comments actually touch on the suggestions in this letter. Overall, they seem like small improvements that won't really move the needle on Xcode's effectiveness... Breaking up targets to make 15sec compilation times to <1sec would be nice though
Things I do with every project: -Don't use the interface builder, easier to do all UI work programmatically - Use Pods
Swift 4/5 will establish ABI compatibility, so that binary swift libraries will work across compiler versions
Another year of breaking changes, hooray!
Whatever happened to graceful deprecation of older language features an APIs? They invalidated all the related example code online and created a ton of mandatory work for all iOS developers within a 1 year timeframe, that's nuts. In my opinion :)
There just seems to be a lot of momentum; everybody's excited about it, everybody wants to be on the bus.
Personally, I wouldn't take any job application that only lists "Swift developer" seriously. Anyone serious enough about iOS development should know that you always need both. Also, not a big fan of telling people what technology to use forcefully.
1) Apple now has most code examples in Swift. 2) Most talks at WWDC are either in Swift only, or with ObjC as the alternative examples. 3) Swift was made available almost 3 years ago. 1.0 was released in Sept 2014. The Swift team was working on it for several years before that. This is now roughly 6 years that the team has been working on it. So when should we consider it stable? 10 years? Longer?
To release a new language, call it the future of iOS development, but also call it "unstable and beta" is a really poor way to treat your developers. I am then stuck between possibly starting a project with an entire deprecated development environment (ObjC), or one that's going to be changing every year forcing me to spend significant time upgrading and possibly introducing bugs.
It seems possible to have a language change and mature in a more sensible way than this, it's just harder and takes more work by the language maintainers. The easy way is just to break everything, which is what Swift is doing.
C++ taught us what happens when you let cruft creep in, so I can see it from. their point of view, however I can also see the developer frustration.
It should be much better with the Swift 4 transition.
Is this a manifesto, or an attempt to get a bunch of Apple developers to put their email addresses on a list as part of someone's marketing campaign for iOS-focused dev tools?
Every developer on an Apple device who actually makes apps for Apple devices. There are a lot of devs on Macbooks who produce server applications that run on Linux, possibly more than create iOS or macOS apps.
You can see how it works on the Economist where there are two "titles" for each article, a catchy one and a useful one.
e.g. From http://www.economist.com/printedition/2017-02-18:
Catchy / Useful
- Taking the low road / Scotland's economy
- Back to the desert / Britain in the Gulf
- Still cleaning up the Co-op / Ethical banking
- Errant Flynn / Turmoil in the administration
- etc
Quite often an excellent article will have a really generic or vague title that few people will ever read, and a judiciously edited title will interest people enough to read it.
At that point, upvotes should determine whether the article lives or dies, as usual. If readers don't think the article is worthwhile, they don't have to upvote it.
I like your subtitle idea too. It's definitely better than insisting on keeping just the original title. Unfortunately, it will make for some practical difficulties with the layout of HN pages, which will be able to fit fewer articles in the same space, and it will also be problematic with RSS feeds and the like, which will often still display just one title, not a title and subtitle.
"Dear Apple" or "Requests regarding XCode and Swift/ObjC" or "Developer tooling in the Apple ecosystem"
Uneditorialized titles also encourages marketing via title wording. But in general, isn't this the Facebook "link as it is" vs "how would be objectively and fairly make links better" debate?
They also stopped making computer monitors and routers last year and haven't updated most of their computers in years.
Best reason to host WWDC outside of SF this year is so it won't be a building full of Xcode developers lol!