![]() I guess Microsoft Office probably does it the best. No one wants to write multiple native versions of the same app, so we either get wrappers and in-house abstractions or something like Electron. While it’s great to celebrate milestones, it seems a little odd to be happy about layers of legacy code and nonstandard, custom choices that lead to a 300MB app that does most of the same things as a web page.īig cross-platform apps still seem like an unsolved problem. The post gets into a bit of technical details that are fascinating, but the tone strikes me as weird. We knew were doing dyld3 and page in linking years before we shipped them.Īnd the advice we were giving people on how to structure their apps was to set them up to work well in that future environment we were not ready to discuss. Having said that, the more elaborate these things are and the less like other apps built with the normal tools are the less likely the future optimizations we are building will improve your apps perf. Which means a number of potentially labor intensive or high risk optimizations are appropriate for them because if they become an issue later they will notice them early and have the ability to undo them. They are large developer with dedicated QA and perf who releases dozens of app updates a year for a network service that can force uses to upgrade. I am to say the exact same thing I said to to them when they asked me about some of these choices: Using plugins, FBiOS could abstract away C++ implementations so that they still powered the app but were hidden from most engineers. Ultimately, the FBiOS team began to advise that product-facing APIs/code should not contain C++ so that we could freely use Swift and future Swift APIs from Apple. FBiOS was able to replace most runtime failures with build-time warnings by migrating bits of infra to a plugin-based architecture. Since many of the FBiOS core abstractions were built on iterating through all the classes in memory, FBiOS had to rethink how many of its core systems worked. With the addition of dylibs, runtime APIs like NSClassFromString() risked runtime failures because the required class lived in unloaded dylibs. The addition of dylibs triggered a mental shift in the way Meta’s product engineers wrote code. As the years went by, most code would end up in a dylib so that startup performance stayed fast and was unaffected by the constant fluctuation of added or removed products in the app. FBiOS was able to curb the unbounded growth of the app’s startup time. Without heavy caching from our build system, engineers would have to spend an entire workday waiting for the app to build.The app makes heavy use of code generation, spurred by Buck, our custom build system.There is almost zero raw usage of Apple’s SDK - everything has been wrapped or replaced by an in-house abstraction.It has dozens of dynamically loaded libraries (dylibs), and so many classes that they can’t be loaded into Xcode at once.It’s full of C++, Objective-C(++), and Swift.The Evolution of Facebook’s iOS App ArchitectureĪfter years of iteration, the Facebook codebase does not resemble a typical iOS codebase: ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |