阅读 6819

🐻各大厂商对Swift、Flutter等『新技术』的真实填坑情况

如果你们leader,还不让你用Swift,不让你使用xib、storybard,你可以把这篇文章给他看下。本文分析了百度网盘、钉钉、抖音、京东、快手、b612、喜马拉雅……等众多app,从是否拥抱新技术如swift、flutter以及用到的开源库等维度进行分析,希望能对各位大佬工作或是面试有所帮助

说明

  • 本文通过爱思助手,直接拿到的ipa
  • 分析不够全面,大家见谅,前后一共2个小时时间,有些仓促
  • app并未挑选,随机分析的
  • 就我个人而言,是喜欢swift、storyboard、xib的,所以app拥抱了这些,会心生欢喜。

app列表

百度网盘

总体情况如下:

  • 使用swift
  • 使用flutter
  • 有四个 app extension
  • 有自定义字体
  • 大量 xib
  • 有storyboard
  • 用到了Metal

用到的开源库(熟悉的味道)

  • ZFPlayer
  • MJRefrsh
  • lottie
  • weibosdk、alipay

想去百度网盘的兄dei,可以看看Swift、xib、Storyboard、flutter方面的知识。没想到百度网盘对新技术还是很跟进的,有点意外。

哔哩哔哩

被前浪后浪刷屏,我们来看看B站的app。

总体情况如下:

  • 使用swift
  • 无flutter
  • 有自定义字体
  • 大量 xib
  • 无 storyboard
  • 使用OpenGL ES

用到的开源库:

  • lottie
  • FFmpeg
  • ijkplayer
  • AFNetworking
  • AFDownloadRequestOperation
  • AMTagListView
  • Base64
  • CocoaAsyncSocket
  • DAPagesContainer
  • DMCircularScrollView
  • FileMD5Hash
  • FMDB
  • google-toolbox-for-mac
  • JSONKit
  • Mantle
  • Masonry
  • NSObject-ObjectMap
  • NullSafe
  • OTPScannerOverlayView
  • PSCollectionView
  • Reachability
  • weibosdk、alipay
  • ReactiveCocoa
  • SVProgressHUD
  • VVImageTint
  • ZipArchive

额。。。这么多,开眼界,B站拥抱了swift、xib,没有拥抱flutter、storyboard。此外这些库,感觉都是oc的,框架都是经典框架。

钉钉

统治阶级控制韭菜们的大杀器

总体情况如下:

  • 支持iwatch
  • 无Swift代码
  • 少量 xib
  • 有storyboard

用到的开源库:

  • MWPhotoBrowser

钉钉能看出来的不多

看下 icon的命名方式如下: 钉钉的

下划线命名,也比较混乱,有的是功能开头,也有btn、dt、oa这样的存在。

钉钉还是纯Objective-C了,很多库都是自己的,我只看到了MWPhotoBrowser,在深度挖掘下,应该可以看到更多,你需要准备一步越狱机,以及以下软件。

这些我不够专业,以免误导大家,所以暂不在本文讨论范围内。大佬们可以尝试,记得在本文下方丢链接。

抖音

包名是:Aweme

总体情况如下:

  • 无swift
  • 无xib
  • 无storyboard
  • 有coreml
  • 有lottie
  • 有MJRefresh

里边非常多的bundle,纯OC工程,能分析出来的较少,期待其他大神分享。

剪映

抖音中没有swift,我们看看另一团队剪映的情况。 包名:videoFusion

  • 用了swift,而且还有swiftUI,coreImage,metal等引用
  • 有MJRefresh
  • 无xib
  • 无storyboard

我看到少部分bundle是和抖音通用的,绝大都是自己的东西。字节跳动内部看起来不欢迎xib、storyboard。flutter也没有影子,据说懂车帝有。。。

京东

我发现了这个,贴出来。

# configuration.plist 文件中key命名规范

一、按“小驼峰”规则命名

二、最前面拼接归属模块(具体业务模块名或common)

三、整个key中只能有一个下划线

1、业务模块

规则:业务_标识

实例: JDAppManagerModule_appDownloadUrl

2、公共模块

规则:common_标识

复制代码

实例: common_debugModel common_channelTypes

  • 有swift
  • 大量nib(熟悉的味道)
  • 有storyboard
  • react
  • 有MJRefresh
  • lottie

京东,拥抱了swift、xib、storyboard,点赞。

铁路12306

看看官方的app怎么样 少量xib,无swift,微博,阿里sdk,没什么可说的

喜马拉雅

每晚都听,看看这货。

  • 无swift
  • lottie
  • AFNetwork
  • POP
  • iWatch
  • 很少的xib
  • YBImageBrowser
  • MJRefresh

纯OC的代码,比较原始,没有拥抱新技术。

天天P图

  • 无 swift
  • 包大小应该是可以优化的,图片管理有点。。
  • 大量xib
  • MJRefresh
  • 直接干中文名字
  • SVProgressHUD

B612

  • 有swift,用到了ARkit、Coreimage、GLkit、Metal等很多switft的框架
  • 无xib
  • 无storyboard
  • 用了lottie
  • NSRare/NSGIF
  • UIColor-HexValues
  • FXBlurView
  • SDWebImage
  • SFBluetoothLowEnergyDevice
  • AVCustomEdit [https://developer.apple.com/library/content/samplecode/AVCustomEdit/Introduction/]
  • iOSInstalledApps
  • GrowingTextView
  • GenericKeychain [https://developer.apple.com/library/ios/samplecode/GenericKeychain/Introduction/Intro.html ]
  • MSWeakTimer

还有很多,就不一一列举了。b612很好,把很多疑难杂症bug都放到文档里了,我觉得这些都是宝贵财富,应该保密才对。不过能有这样开放的心态,点赞。本文仅仅是技术分析,如果不妥,请联系,我会及时删除。

快手

太多了,用快手结尾。

  • 无swift
  • flutter
  • 居然用中文直接命名,真接地气
  • 用的是 webp格式的图片
  • 亲娘啊,这么多图片直接放,起码上千了
  • 有部分xib
  • 无storyboard
  • lottie
  • MJRefresh

快手应该也是还没有拥抱swift,但拥抱了flutter。

总结

太多了,就不一一分析了,这些也够用了,以后慢慢补充吧。

  • 发现基本上都用lottie,应该自己加工过
  • swift 使用各半,但这应该是趋势
  • 大厂有很多重度xib、storyboard使用,老程序猿,请拥抱它。
  • flutter 宣传的热闹,真正上车的较少
  • MJRefresh为啥用的这么多,n b 哦
  • 网络库AFNetwork是用的较多的
  • YBImageBrowser和MWPhotoBrowser被使用,功能虽小但做好不容易,为作者点赞
  • Masonry应该OC中公认的布局之王了
  • ijkplayer、zfplayer作为开源播放器的佼佼者,供你选择

本文只是提供了一个途径,帮助你更好的了解竞品。是我在生病时,无聊搞的,肯定不完善,分析的不够透彻,希望能有帮助,也希望有心的面试者能够看到这篇文章,你去他家面试时,很有可能面试题就藏在这里,比如我就去过B612,当时就问了MSWeakTimer相关的东西,祝各位好运。如果有不同见解,欢迎入群solo。

如果你做的事一款相机类软件,你就去找竞品,然后分析,一定能帮助你走过很多弯路,技术永无止境,作为一名程序猿,我们需要规划自己的未来,这可能是更重要的。

入群solo