We actually scan millions of apps from the app stores. Here's a public view of the top 500 in US, and if you choose the cross-platform category, you can see apps like this. For example, "Pac-Man 256" is rank 28 (Unity), Amazon is rank 30 (Cordova), etc.
It's actually very difficult to accurately match code written in so many different languages as compilers discard a lot of the info you need. I spent a lot of time researching and evaluating different ways to fingerprint libraries, as well as reconstruct the boundaries of internal modules when there weren't any symbols.
We match code by using a similarity search across all components we've ever seen. Since code written in C can be compiled to x86 or ARM, we disassemble the code into an intermediate language. Then we reconstruct control-flow graphs, data dependencies, and other platform-independent features. We index these in a custom search engine, which allows quick lookup and matching.
It's very difficult, but ultimately a really fun problem to solve. Most of our engineers got started with exactly the exercise Ryan did here. :-)
I can't imagine ever seeing a non-native app in the top 100 with the exception of maybe ReactNative-based apps which is a bit of a grey area since it compiles into native.
I agree that React Native is great, and you will be seeing a lot more apps using it, especially as their Android version comes out.
However, iOS (afaik) doesn't quite have shared libraries like you would have on a Linux server and there's no point in creating a separate ObjC library that would add bloat to each Xamarin binary because the C#-to-ObjC transpiler can selectively generate the wrappers/proxies during compilation. Xamarin might not even use a code generator to do that because you can just include all the ObjC code with the transpiler and copy-paste include them into the project at will.
However, Mono isn't composed of ObjC classes so it's harder to detect just by looking at that list like the author did here. Xamarin does have a few ObjC components (such as XamarinNSThreadObject) since it adds a support library to the environment.
We actually match the structure of the code (control flow subgraphs), as well as other items like data references, so we get a more accurate view than you do just looking at class names.
You're right that each native or ObjC library you use with Xamarin has a plugin that exports a C# interface. It will be interesting to see how this evolves and if Xamarin will come up with a way of auto-generating these interfaces better.
Does anybody have any solid resources on SDK marketing directly to iOS and Android developers?
We've found some innovative ways to address the community (doesn't hurt to have an office packed with engineers to ask where they find solutions) but looking for ideas ranging from the best developer events, to publications, to PR agencies focused on devs, to marketing co's etc.
I have been surprised how hard it is to turn up prior-art on this subject.
- There's generally no dependency management, or you're forced into using Cocoapods, and using it in a bad way (binaries in your repo).
- You're at the will of the vendor for additional features (framework, Swift nullability/generics integration, bitcode), and, if they're even available, dependency bumps. This gets really painful. Every time I used a closed-source framework, it ends up being a nightmare.
This is compared to:
- Add line to Cartfile
- carthage update
- A little drag and drop
- Done, future releases will probably Just Work
You might have better luck with people that aren't necessarily "iOS devs", i.e. games, where using closed-source is more common and they might not even be using Xcode.
* Realm.io has successfully positioned themselves as a thought leader in swift development for iOS by producing solid blog content and leading the Swift SF meetups (+ contributing to open-source projects).
* Crashlytics/Fabric.io is more interesting -- my experience with them has been entirely word-of-mouth (but they have a big presence at Twitter's developer conference/WWDC/Google IO, too).
* Parse generally has interesting, high-quality technical blog content: (https://blog.parse.com).
And...holy shit, they just raised their pricing by 5x. That's kind of insane. I was really on the fence about this at $500 / month, but if I really needed this now, I'd probably try building it myself. If you planned on paying for this for a year, that's $30k. Seems like you could recreate this for $30k, right?
https://twitter.com/SourceDNA/status/652247709655547905 https://twitter.com/SourceDNA/status/652247927289544704
"CocoaPods is less popular in the top 100 apps than the long tail. We see ~180K apps with AFNetworking."
"CocoaPods more popular in apps that aren't top 100. Top apps more customized, less third-party code."
Similar to the cocoapods note, my guess is it's catching on much faster with the long tail than the most popular apps.
Swift is growing but not huge yet. Certainly there has been a flood of experiment apps in the long tail, where someone used it as a learning exercise. Some of the larger companies are using it for a new project once in a while, but it's certainly been most popular in games.
What never ceases to surprise me is the influence a single developer can have, even in a large organization. Someone picks up a tool and then suddenly it's used everywhere in the company.
In any case, here's the original gist, which doesn't seem to have the same problem: https://gist.github.com/ryanolsonk/e33bf9e89677da9fe8ce
"Bolts-iOS" is a dependency of "facebook-ios-sdk", which means that 19 of the top apps are using an outdated version of the Facebook SDK that predates Bolts, and might be vulnerable.
1. App was written a while ago and is only in maintenance mode
2. Developer got started early on and hasn't kept track of the industry
The latter often happens with internal dev kits, where someone drops a static library in (say, to add a wrapper) and then never updates the dependency. New apps inherit it when they use the internal dev kit.
Note that it may be skewed a bit since apps can get created but not published on the app stores (personal experiment, in-house app for a company). This does roughly align with our data on iOS though.
And some cool new Swift/Objective C libraries:
https://www.ckl.io/blog/9-trending-objective-c-and-swift-ios...
http://www.appbrain.com/stats/libraries/dev
Top ad network on Android sorted by usage:
Is there anything of interest HN would like me to look up or blog about?