Why the Facebook iOS Application is so large
quellish.tumblr.com
quellish.tumblr.com
Yes, this webpage is merely a list of 18,000 headers.
2. It shows how the classes are extracted
3. It presents the classes for you to browse.
The word "merely" is downplaying the information being shared by the author.
Still my point was about the content being simply a list, which it is not (for better or worse in this case, I know :-)
some browsers. FF 40.0 on my 2012 rMBP barely breaks a sweat.
FB App is 114MB in size, but loading this page in Chrome will use a good 450MB, idk how they managed that.
-------------------------------
How on Earth the Facebook iOS Application is so large
Recently someone on reddit asked “How on earth is the Facebook app size so large ?”. The person asking the question realized that the ~100Mb compressed App Store archive wasn’t all assets - a very large portion was the application binary.
How do you answer that question? You quickly reverse engineer the application!
1 Download the binary to a jailbroken device from the App Store
2 Find the application on the device. SSH into the device and find the application container on the filesystem:
find / -type d -iname "SomeApp*.app"
3 Decrypt the binary Install dumpdecrypted on the device. Follow the instructions for using it.
4 Get the files off the device using scp or rsync. In most cases you will want the application container, the decrypted binary, and the application data container (i.e. what it writes out to the filesystem).
At this point you have the decrypted binary and it’s files. You can now run class-dump on the binary and output a directory of header files for all the classes in the binary, or you can use a disassembler like IDAPro or Hopper to easily see all the classes, symbols, etc.
In the case of the Facebook application, there are more than 18,000 classses in the application:
[... list of all the classes ...] https://gist.github.com/quellish/473f513fbd1310233a8e
There is a LOT of crap in there. Even a “FBFeedAwesomeizer” - which alone is a collection of 74 classes and protocols.
This is why the application binary itself is over 114Mb.
Comparing the size of the binary with the size of the memory used by the live program is apples to oranges. The two metrics don't have any correlation whatsoever.
He compared the size of the binary with the size (in Chrome's memory) of the idiot's webpage complaining about it.
Which he obviously knows is Apples to Oranges, but it's still fun to know and illuminating (the guy blames FB for being too careless with their app size but is too stupid to watch for his web post's size).
I found it interesting even if my browser ate 260 whatever MB of memory. Doesn't make him an idiot, just a little bit lazy about optimizing his blog (which is not used by millions like the Facebook app)
It seems none of the cool kids with lean blogs managed to post this stuff or get it on HN. I'd love to read their articles about it, but hey, they don't seem to exist.
We live in the "social sharing age". People even share what they had for lunch. If anything, people should be encouraged to share LESS or more meaninful stuff only.
>It seems none of the cool kids with lean blogs managed to post this stuff or get it on HN. I'd love to read their articles about it, but hey, they don't seem to exist.
Serving something you want to read doesn't mean there should be no criticism for serving it in a bad way.
If you had only one chinese restaurant in your city, one that served bad food, would it make sense not to complain for their good quality because "other restaurants don't serve noodles at all"?
There's criticism of serving something in a bad way, and then there is calling someone an "idiot".
Should we instantly call every single person an idiot for making a mistake?
I wouldn't say that the food was bad here, it was just a bit cold.
> We live in the "social sharing age". People even share what they had for lunch. If anything, people should be encouraged to share LESS or more meaninful stuff only.
This is off topic, but I don't think people should share less. If you are bothered by it, you should read less. Maybe we should have better tools for filtering. But information is everything, something as banal as "I had a bad day" has value. Tracking social sentiment for example.
True.
>Should we instantly call every single person an idiot for making a mistake?
No, but what if they do that first by pointing fingers at the stupid FB devs?
>This is off topic, but I don't think people should share less. If you are bothered by it, you should read less.
This still leaves the problem of an overproduction of pointless stuff, which aside from the ecological issues and time wasted by those producing it, also makes deciding "what to read" among the avalance of BS more difficult.
As for being interesting, it's quite subjective. Might not be interesting to you, but it makes other people wonder.
>This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.
I wonder how long it takes for an iPhone to even load that thing into memory before it starts executing any code..
I takes my iPhone 4s about 5-10 seconds to start it.
Perhabs someone with experience on large complex applications can share some insights?
Otherwise, I pity the FB employees who gets assigned to this project. "Here you go, fix that button, here's 18k files to digest".
Surely they must've decoupled it into oblivion in order to have a class that manages "just that", so
1. new employee can work in an "isolated" context (although he really isn't)
2. can locate where to write and debug in this complex codebase.
That's the case with a lot of tech today - it's done for the sake of letting people do something. Which, I guess, is not that bad, in the end things are brought to perfection, even though they're not strictly 'needed' in the product. The fast CPUs and enough RAM take care of the added complexity and everyone's happy.
10,000+ people to keep the service running?
Don't know if this applies in FB case.
Of course, we have no idea about any of that stuff so we sit outside and say "lol Facebook are so silly".
Reading through just some of the classes they have it looks like they have everything from packet readers to image manipulation to RSS feeds to web page embedding to video playback in there. Its literally an OS unto itself.
FBWhichApplicationAreWe_DO_NOT_USE.h
FBProfileSetEventsCalendarSubscriptionStatusMutationOptimisticPayloadFactoryProtocol-Protocol.h
FBStoryCreateInputDataAttachmentsLifeEventExtrasEducationInfoEndDate.h
FBReactionAcornSportsContentSettingsSetShouldNotPushNotificationsMutationCall.h
Anyway, I find this to be pointless, when the majority of that size is probably taken by assets.