我一直好奇心很强。编写 FLEX 这个调试工具的一个很大动机是我想研究其他 app 是如何处理一些常见的问题。
一个星期一,我用一个越狱的 iPhone 和一个 FLEX 的扩展版本对美国 App Store 排名前 100 的免费 app 进行了分析。
一开始我针对每个 app 中的 Objective-C 的类创建了一个数据库。每个 app 的类总数的中数是 1175。数据库最后收集的类总数超过了 181000。类数量最多的 app 是中数的 15 倍以上。我猜你一定知道是哪个 app ;)。类数量排名前 7 的 app 都是 Facebook 或 Google 的产品。
接下来,我搜索了常见的类名并对开源项目和第三方库进行了匹配。结果是我从超过 100 个项目中提取了将近 5000 个最常见的类。
目前最多被使用的是 Facebook iOS SDK,前 100 个 app 中有 67 个都在使用。其他类别的常用库和项目包括 AFNetworking(网络)和 Crashlytics(崩溃报告)。许多 app 中也出现了几个苹果官方的示例代码项目,其中最有名的是 Reachability。最后,只有 30 个 app 使用了依赖管理器 CocoaPods,意味着有很多开发者依然通过传统方式来添加这些库和项目。下面的 gist 给出了所有的库和项目以及它们被使用的 app 总数。
Project | # of Top 100 Free Apps (US) |
---|---|
facebook-ios-sdk | 67 |
Bolts-iOS | 48 |
AFNetworking | 39 |
Google-Mobile-Ads-SDK | 38 |
Reachability (Apple) | 38 |
Crashlytics | 37 |
Flurry-iOS-SDK | 31 |
CocoaPods | 30 |
GoogleConversionTracking | 29 |
SDWebImage | 26 |
Fabric | 25 |
mopub-ios-sdk | 25 |
Unity | 23 |
AdColony | 22 |
GoogleAnalytics | 20 |
GTMLogger | 19 |
comScore-iOS-SDK | 18 |
google-plus-ios | 18 |
OpenUDID | 17 |
CocoaLumberjack | 17 |
Adjust | 16 |
ChartboostSDK | 16 |
MBProgressHUD | 16 |
OpenInChrome | 15 |
TTTAttributedLabel | 15 |
HockeySDK | 14 |
google-breakpad | 14 |
CocoaAsyncSocket | 13 |
AppLovin | 13 |
SBJson | 13 |
FMDB | 12 |
GLImageProcessing (Apple Sample) | 12 |
pop | 12 |
SSZipArchive | 12 |
Appirater | 12 |
BPXLUUIDHandler | 11 |
VungleSDK-iOS | 11 |
Protobuf | 11 |
UnityAds | 11 |
SSKeychain | 10 |
KeychainItemWrapper | 10 |
PLCrashReporter | 10 |
secureudid | 10 |
libPhoneNumber-iOS | 10 |
oauthconsumer | 10 |
InMobiSDK | 9 |
MobileAppTracker | 9 |
TapjoySDK | 9 |
TrustDefender Mobile | 9 |
iRate | 9 |
OnePasswordExtension | 8 |
SFHFKeychainUtils | 8 |
Tweaks | 8 |
cocos2d | 8 |
GPUImage | 8 |
KVOController | 8 |
Nimbus | 8 |
google-cast-sdk | 8 |
HPGrowingTextView | 7 |
Localytics | 7 |
thrift | 7 |
FormatterKit | 7 |
Kochava | 7 |
Mantle | 7 |
Mixpanel | 7 |
AppNexusSDK | 7 |
JSONKit | 7 |
NJKWebViewProgress | 7 |
cocos2d-x | 7 |
TouchJSON | 7 |
SupersonicAds | 6 |
TPKeyboardAvoiding | 6 |
SponsorPaySDK | 6 |
PhotoScroller (Apple) | 6 |
TwitterKit | 6 |
SpeechKit | 6 |
ReactiveCocoa | 6 |
UICKeyChainStore | 6 |
WeChatSDK | 6 |
XMLDictionary | 6 |
SVProgressHUD | 5 |
SocketRocket | 5 |
libextobjc | 5 |
Shimmer | 5 |
TransitionKit | 5 |
AsyncDisplayKit | 5 |
SnowplowTracker | 5 |
aws-sdk-ios | 5 |
SVPullToRefresh | 5 |
MMWormhole | 5 |
Masonry | 5 |
UIAlertView+Blocks | 5 |
FLAnimatedImage | 5 |
AppsFlyer-SDK | 5 |
CardIO | 5 |
TMCache | 5 |
youtube-ios-player-helper | 5 |
4 | |
Parse | 4 |
MagicalRecord | 4 |
GoogleMaps | 4 |
GoogleAds-IMA-iOS-SDK | 4 |
Braintree | 4 |
PSPDFTextView | 4 |
FXBlurView | 4 |
ASIHTTPRequest | 4 |
研究其他 app 是一个扩充 iOS 知识的非常好的方法。如果你对其他 app 中都有什么东西感兴趣,我强烈赞成你去动手发掘。
原文链接 on Medium
本文已获得作者翻译以及传播许可