5 ms·
This is a quite opinionated piece, and of course not for everyone. I want 100% of all crashes reported, so I need Fabric or similar. And I write way better and
by manmal 9y ago
This is a quite opinionated piece, and of course not for everyone. I want 100% of all crashes reported, so I need Fabric or similar. And I write way better and more stable code with an RX framework, so I'll use RxSwift or ReactiveSwift/Cocoa. And since I do have to interface with JSON, I will include ObjectMapper or similar (until I can have iOS11 as min target). And sure, I could go by with just NSURLSession, but Alamofire's footprint is not that big, so I'll add that too. Why should my app be smaller than 20-30MB if Facebook can get away with 400MB? There will be 1% of users who are delighted by a small binary footprint, but the rest will not even notice.
BTW there's a totally different story with Android apps that will be installed in developing countries, by users with cheap devices and low connectivity. In that case I would scrape every last bit off. On an iPhone I do expect most users to have a fairly decent connection because you won't get very far without it.
- derefr 9y ago> There will be 1% of users who are delighted by a small binary footprint, but the rest will not even notice. They won't care... until their 16GB iPhone 6 tells them they're out of space, with that convenient action-button that takes them to the Storage section in Preferences, with all the installed apps sorted into a neat list ranked by how much space they take up. You don't want to be high on that list if your app is not absolutely indispensable. (Heck, sometimes when it happens I even delete the Facebook app; I don't use it often enough to justify 400MB. Lately it seems they've made its presence required to refresh the OAuth pairing of the Messenger app, though...)
- nawgszy 9y ago>which they haven't used lately Then why does it matter? What was going to bring them back? Notifications you try to lure them in with just drive them away, after all.
- derefr 9y agoMost of the third-party apps on my phone are either 1. purpose-specific utilities (track a flight, track a package, call a taxi, etc.); 2. chat apps that I have no presence on myself; 3. casual games. I come back to a utility app when I next need to do the thing it's for. But if that's infrequent enough, I might delete the app in the mean-time, and then reinstall it when I next need to do the thing. But given that I'll already be in the app-store, I might look for a competitor instead. At that point, your app's size has churned me. I come back to a chat app if-and-only-if someone gives me their username on such a chat app as their only contact information, and I really want to talk to them. (Think: dating.) Otherwise, I delete these pretty much as fast as I can, because in aggregate the sheer number of these I accumulate takes up a lot of space no matter how small they each are individually. (And often they're not small individually.) I come back to a casual game when I'm bored and want to kill time. Casual (i.e. "five minutes at a time") games are roughly substitute goods for one-another, though, so it doesn't matter if I delete any individual one as long as I have some on my phone. (Or a book to read. Either-or.) These are usually the apps where the actual size is the most relevant.
- danieldk 9y agoWhy should my app be smaller than 20-30MB if Facebook can get away with 400MB? Facebook can get away with it due to being so central to people's lives. Even though 32GB is the minimum storage on new iOS devices now, there are still a lot of people with 16GB iPhones and iPads. Managing storage on these devices is quite painful, with a lot of apps now taking between 50 and 500MB. When I still had a 16GB iPhone, I had to remove many applications because I ran out of space all the time since about a year ago. We should feel collectively responsible for all this bloat. Sure, we don't have to fit a full Pascal IDE and compiler on a 1.44MB disk anymore. But it is certainly good to keep some reference points in mind: - Turbo Pascal was a full IDE and was 2.29MB for all the bits. They didn't use an existing GUI framework either. - QNX fit a kernel + graphical environment on a 1.44MB 3.5" disk, with a network stack and web browser. 213MB for a chat app is outrageous, no matter how you look at it [1]. [1] https://itunes.apple.com/us/app/snapchat/id447188370?mt=8 https://itunes.apple.com/us/app/snapchat/id447188370?mt=8
- manmal 9y agoSure. I'm advocating that apps a magnitude smaller are ok-ish - 20-30MB is what I get when I go really crazy with the dependencies.
- pjmlp 9y ago> Turbo Pascal was a full IDE and was 2.29MB for all the bits. They didn't use an existing GUI framework either. Forgetting about Turbo Vision? :) I used to carry MS-DOS 3.3 and Turbo Pascal on a 1.44MB 3.5" disk, back on those days. Don't remember if it was TP 3, or if I tailored it to my purposes though.
- sandofsky 9y ago> Why should my app be smaller than 20-30MB if Facebook can get away with 400MB? Facebook gets away with its behavior because it's Facebook. For everyone else, it's an uphill battle to get installs. As an experiment, Segment purchased a successful calculator app, and then deliberately bloated it over time. Installs dropped as the size increased. When it crossed the 100mb cellular download limit, it dropped by 66%. https://www.recode.net/2016/10/4/13151432/app-size-calculator-bloat-experiment-developers-segment https://www.recode.net/2016/10/4/13151432/app-size-calculato... If that 30mb doesn't push you over the 100mb limit, you can expect it to cut installs by 13.5%.
- ajanuary 9y agoOne reason to have a small app is to make it download quicker on a slower connection, which means I'm less likely to start randomly downloading competitors while it's downloading. The quicker you can get me from starting the download to launching the app the less time I've got to find another app.
- danpalmer 9y agoI believe the new Swift compiler announced at WWDC does dead code removal, so including a large library for not a lot of actual use should affect the binary size much less now.
- pjmlp 9y agoYou can already do it with Swift 3 as well, provided you enable LTO, with the side effect of slower build times.
- majewsky 9y agoI'm not familiar with Swift, but I'd be weary of treating dead-code removal as an excuse for piling on libraries. Deciding whether code is actually dead looks like a halting-problem-level type of problem. For example, if I write the following Golang code: str := "World" fmt.Printf("Hello %s\n", str) Then the compiler pulls in the entire fmt library, which can render all kinds of datatypes as part of Printf(); there are even reflection-based format strings like %#v which generates a Go literal for the value that you pass in. Without knowing how Printf() works, the compiler cannot understand that I'm never going to visit these branches of the Printf() function, so it cannot tree-shake these (or any of the functions called by these branches).
- scarface74 9y agoWhy should my app be smaller than 20-30MB if Facebook can get away with 400MB? Because you're not Facebook. When people start seeing space run out on their device and go to settings and see which apps are taking up the most space, Facebook is probably one of the last apps that they will delete. Your large footprint app will be very tempting to delete.
- dmitrygr 9y ago> Why should my app be smaller than 20-30MB if Facebook can get away with 400MB? Because while some might tolerate FB, they might not you. And when they get that "storage full" message, your app will be one of the first out (I hope so, it sounds like it would be well deserved). Have some respect for your users...