1.背景 就目前而言 , IOS 项目的组件化在业内已经有比较成熟的方案了 。虽然各个公司都有自己的组件化方案 , 但这些方案的具体实现方式也都大同小异 。截止到本次组件化改造之前 , 我所在的 iOS 开发团队尚未对项目进行组件化改造 , 单个模块在多个项目中的复用仍使用手动复制迁移的方式 。现有的一些功能模块也基本是使用 OC 语言开发的 。如下图所示 , 假如现有项目使用了功能模块A , 而功能模块A又依赖功能模块B , 此时有新项目也要使用功能模块A , 就需要将功能模块A和功能模块B的源码全部手动复制到新项目的工程中 。
文章插图
这样做有以下几个问题:
- 不利于模块的统一管理
- 不利于模块的独立调试
- 难以维护、不可持续
以上只是列举了几点这种管理代码复用方式的不足之处 , 此外还有模块版本管理、自动化等其他问题 , 就不一一展开说明了 。
鉴于 Swift 语言的高效率和安全性 , 业内对其的应用也越来越广泛 , 团队内的一些新 App 以及功能模块逐渐开始使用 Swift 开发 , 这些老旧的功能模块也将逐渐被取代 。此外 , 随着部门内开发和维护的 App 越来越多 , 组件化作为一项基础设施急需得到落实 , 不仅方便开发人员进行项目管理 , 也可以方便的进行组件在多个项目中的复用 , 提升开发效率 。
目前焦点 iOS 组件化已初见成效 , 本篇文章将通过其中一个组件的改造实践作为案例 , 给大家介绍一下进行组件化改造的基本流程 。
2.基本原理开始之前我先为大家说明一下我们组件化的基本原理 。我们采取的组件化方案是基于cocoapods实现的 , 也是业内使用比较普遍的一种方案 。最终效果是 , 将我们希望实施组件化的模块从主工程中解耦出来成为独立组件 , 并制作成本地 pod 库 , 再通过cocoapods集成到项目中 , 被独立出来的组件使用单独的 git 仓库管理 。类似于使用 cocoapods 集成第三方库一样 , 只不过我们的组件库是一个本地的 pod 库 。
因此 , 要想制作一个组件库 , 首先要知道如何制作本地的 pod 库 。
【iOS组件化初探】pod 库主要由三部分组成:源码文件、资源文件和podespec文件 。源码文件和资源文件暂且不说 , 每个 pod 库都要有一个名字为库名称.podspec的文件 , 官方称其为specification , cocoapods官方对该文件的解释为:
?大意为:该文件描述了关于 pod 库的所有配置 。包括从何处获取源代码、使用哪些文件、应用构建设置以及其他一些元数据(如名称、版本和描述)的详细信息 。
A specification describes a version of Pod library. It includes details about where the source should be fetched from, what files to use, the build settings to apply, and other general metadata such as its name, version, and description.
可以通过三种方式来创建podspec文件:
1. pod lib create xxxxxxxx表示创建的文件名 , 这种方式比较适合从零开始开发一个组件 , 因为它会自动帮我们生成许多模版 。在终端执行以上命令 , 命令执行过程中 , 会询问几个问题 , 根据实际情况和需要回答即可 。这里以QRCodeReader为例:
lanfudong@macBook-Pro ~ % pod lib create QRCodeReader Cloning `https://github.com/CocoaPods/pod-template.git` into `QRCodeReader`.Configuring QRCodeReader template.security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.------------------------------To get you started we need to ask a few questions, this should only take a minute.If this is your first time we recommend running through with the guide:- https://guides.cocoapods.org/making/using-pod-lib-create.html ( hold cmd and double click links to open in a browser. )What platform do you want to use?? [ iOS / macOS ] > iOSWhat language do you want to use?? [ Swift / ObjC ] > SwiftWould you like to include a demo application with your library? [ Yes / No ] > YesWhich testing frameworks will you use? [ Quick / None ] > NoneWould you like to do view based testing? [ Yes / No ] > No
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 化妆品|我是敏感肌,选择化妆品有什么讲究?护理有什么注意事项?
- 化疗后白细胞低吃什么比价好呢? 化疗后白细胞低吃什么?
- 中国足协|凌晨0: 2打脸足协:归化都不行还靠本土?揪出陈戌源伪职业做法
- 时尚发型|我想学习化妆,是一个化妆新手,应该要了解哪些知识?
- 进阶|如何应对职场中的“变化莫测”?大多数人身在其中却不自知
- 三个方法帮你淡化痘坑! 怎样去痘坑
- 想要格式化电脑C盘? c盘能格式化吗
- 陈奕辰|《心动2》天意CP感情稳定,被夸越来越有夫妻相,陈奕辰变化真大
- 南风知我意|《南风知我意》要来了?成毅再次化身美强惨,与张予曦上演虐恋
- 为什么可以根据地层和化石了解古气候的变化?