Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Claude Code now reads AGENTS.md if there is no Claude.md(claude.com ↗)
    136comments
  2. Android 17 is the first since 3.x to add new APIs without releasing to the AOSP(grapheneos.social ↗)
    190comments
  3. Saving another 100TB of RAM(cloudflare.com ↗)
    34comments
  4. Cloudflare Quick Tunnels(cloudflare.com ↗)
    223comments
  5. Xcode 27.1 Beta Release Notes(developer.apple.com ↗)
    59comments
  6. How OpenAI Used Its Own LLMs to Design Its Jalapeño Chip(ieee.org ↗)
    discuss
  7. US troop deaths during Iran war exceed Pentagon count by at least four(reuters.com ↗)
    32comments
  8. Cache-to-Cache: Direct Semantic Communication Between LLMs (2025)(arxiv.org ↗)
    11comments
  9. Photon-Emission-Guided Laser Fault Injection Enables RP2350 Secure Debug(ledger.com ↗)
    45comments
  10. Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash(cactuscompute.com ↗)
    72comments
  11. How to Write with an LLM(sockpuppet.org ↗)
    246comments
  12. OpenJev(openjev.com ↗)
    238comments
  13. The first new cat species discovered in 100 years(nationalgeographic.com ↗)
    35comments
  14. Cyclomatic Complexity in C#(ndepend.com ↗)
    9comments
  15. The Implications of Linguistic Illegibility for LLM Security(arxiv.org ↗)
    17comments
  16. Two parallel neural ectoderm progenitors contribute to the developing brain(newscientist.com ↗)
    51comments
  17. C++26: Trivial infinite loops are no longer undefined behaviour(sandordargo.com ↗)
    168comments
  18. From Geometry to Algebra and Back Again: 4000 Years of Papers (2023) [video](youtube.com ↗)
    discuss
  19. Warez: The Infrastructure and Aesthetics of Piracy (2021)(archive.org ↗)
    13comments
  20. Minimal Phone 2(minimalcompany.com ↗)
    150comments
  21. A 1542 papal cipher cracked with simulated annealing(simonklee.dk ↗)
    discuss
  22. How SpaceX streamlined the Raptor engine(construction-physics.com ↗)
    25comments
  23. Inside ZCode: Silently uploading your Git history to the cloud(ferstar.org ↗)
    89comments
  24. A search-and-inference database from scratch in pure Zig(antfly.io ↗)
    16comments
  25. I vibed a proof of Conway's conjecture(overreacted.io ↗)
    175comments
  26. Size-Specialized Memory Allocation(go.dev ↗)
    3comments
  27. The US 'Kill Chain' That Destroyed an Iranian School(bloomberg.com ↗)
    1comments
  28. Korea raises data breach fines to 10% of revenue(koreajoongangdaily.com ↗)
    73comments
  29. Cekura (YC F24) Is Hiring(ycombinator.com ↗)
    discuss
  30. North Korean nuclear test sets off years of earthquakes(science.org ↗)
    148comments

Why the Facebook iOS Application is so large

51 pointsby 11y agoquellish.tumblr.com
52 comments
11y agoHN ↗

I've never seen an iOS application quite like this. I wonder how they even manage it. Tons of subprojects perhaps?

11y agoHN ↗

I wonder how much of it is automatically generated.

11y agoHN ↗

That's a good question. Is much of this the output from some GUI design tool? There seems to be a class for every GUI element.

11y agoHN ↗

to my dear downvoters, "Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it." Alan Perlis

11y agoHN ↗

Lots of money, lots of employed engineers, everyone needs to do something.

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.

11y agoHN ↗

I hope that's not the case, considering there are much more interesting things Facebook employees could be working on (not necessarily even for the betterment of society).

11y agoHN ↗

It seems to definitely be the case for designers (300+?), I wouldn't be surprised if it's the same for engineers.

10,000+ people to keep the service running?

11y agoHN ↗

I heard about something similar to this once on a project a friend was working on (it wasn't of this scale) - it was actually when a designer was the lead on the project and he insisted on customizing random tiny bullshit and the engineers didn't have the power to say no (to cut on the added complexity).

Don't know if this applies in FB case.

11y agoHN ↗

I mean, sure. Most apps have that. The question is what internal structures led to it being this way, and whether they're worth the cost.

Of course, we have no idea about any of that stuff so we sit outside and say "lol Facebook are so silly".

11y agoHN ↗

And its all Objective C code!

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.

11y agoHN ↗

my favorite ones though:

FBWhichApplicationAreWe_DO_NOT_USE.h

FBProfileSetEventsCalendarSubscriptionStatusMutationOptimisticPayloadFactoryProtocol-Protocol.h

FBStoryCreateInputDataAttachmentsLifeEventExtrasEducationInfoEndDate.h

FBReactionAcornSportsContentSettingsSetShouldNotPushNotificationsMutationCall.h

11y agoHN ↗

Chrome asks to kill the page after a bit. Does this content exist in a cleaner state?

11y agoHN ↗

I opened it in the opera version of chrome and it loads no problem. The browser isn't the best at everything but sometimes it works when everything else fails.

11y agoHN ↗

There is no Opera version of Chrome. Opera uses Blink, that's it.

11y agoHN ↗

Apparently Chrome uses blink too. But now I can see how one is not the other even though both use the same.

11y agoHN ↗

I was expecting a bit more nuance and insight than '18,000 classes, lol, FB is dumb.' At the very least, it'd be interesting to note what the size of the app might be after app thinning goes live next month.

11y agoHN ↗

Not just assets, but also the compiled binary will be for that architecture alone. ARM6, ARM7 etc. Really cool stuff.

11y agoHN ↗

If you're having difficulty loading this webpage, it's because the author decrypted Facebook's iOS binary and listed all 18,000 header files.

Yes, this webpage is merely a list of 18,000 headers.

11y agoHN ↗

1. The article gives the insight that the binary is sooo big, not just assets as one would think.

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.

11y agoHN ↗

Barely does 1 and 2 since 3 causes browsers to actually slow down to a crawl. The second that 18k list started to load, my browser turned ridiculously slow.

11y agoHN ↗

I agree that the inline HTML code block is not optimized for such a use-case. You can read the content here: https://news.ycombinator.com/item?id=10066530

Still my point was about the content being simply a list, which it is not (for better or worse in this case, I know :-)

11y agoHN ↗

causes browsers to actually slow down to a crawl.

some browsers. FF 40.0 on my 2012 rMBP barely breaks a sweat.

11y agoHN ↗

I opened it with FF on my phone - no problem loading or scrolling it whatsoever.

11y agoHN ↗

Fine on Chrome 44 running on a fairly ancient Core 2 Duo

11y agoHN ↗

Latest Firefox doesn't even break a sweat.

11y agoHN ↗

yeah the website presents it in bloated HTML unfortunately. Here is the content:

-------------------------------

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.

11y agoHN ↗

FB App is 114MB in size, but loading this page in Chrome will use a good 450MB, idk how they managed that.

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.

11y agoHN ↗

He doesn't compare the size of the binary with the size "of the memory used by the live program".

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).

11y agoHN ↗

I love how easily some ppl on HN call someone an idiot. Way to encourage people to share.

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.

11y agoHN ↗

I love how easily some ppl on HN call someone an idiot. Way to encourage people to share.

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"?

11y agoHN ↗

Serving something you want to read doesn't mean there should be no criticism for serving it in a bad way.

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.

11y agoHN ↗

There's criticism of serving something in a bad way, and then there is calling someone an "idiot".

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.

11y agoHN ↗

But then they can say. In 2.0 we improved performance 50%!! And repeat this process of headline news several times!

11y agoHN ↗

This so called "investigation" of the Facebook app can be done much simpler. Locate the app in iTunes, rename the .ipa file to .zip, unzip and run otool and nm on the binary. The author list 18,000 header files which is not much of an investigation nor much interesting. Though the staggering number of classes does admittingly somewhat explain the enormous size of the FB app. I do not use the FB app, but generally it can be equally illuminating to look in the Resources/ folder of an app if you wonder where the size came from.

11y agoHN ↗

He didn't claim it to be an investigation. It seems to be an insight.

As for being interesting, it's quite subjective. Might not be interesting to you, but it makes other people wonder.

11y agoHN ↗

No. You have to jailbreak and "crack" the app to get at the code segment, which makes this more of an effort than you make it out to be. Unless you know something I don't?

11y agoHN ↗

The symbols themselves are not encrypted, so you can still list those without cracking the app.

11y agoHN ↗

Seems to me that huge part of this was auto-generated (and auto-structured), and each .m/.h contains very few lines of code. I don't know what FB app does, but with 18000+ fully functional non-excessive handwritten modules you can just win the internets. Oh wait~

11y agoHN ↗

Their binary alone is 118MiB? Even with all the auto-generated crap in there (I hope no human chose those names), how do they manage that?

I wonder how long it takes for an iPhone to even load that thing into memory before it starts executing any code..

11y agoHN ↗

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.

11y agoHN ↗

They are obviously very lost and reinventing wheels, rather than learning and applying the right design patterns for Apple platforms. I talked to a Facebook iOS person on here recently who was under the impression that GCD offered no help with concurrency problems.

11y agoHN ↗

I hope it's a mechanism to make it possible for new employees to actually work on this app.

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.