美文网首页
iOS-本地化组件化的实践

iOS-本地化组件化的实践

作者: 李丘 | 来源:发表于2020-04-28 15:57 被阅读0次

前言

业界已经有许多技术文章进行了组件化的指导了,这里就不再赘述。

本文主要讲的是小型团队和小型项目对于「本地组件化」的实践。

为什么要提出组件化本地化的概念呢?对于小型项目和小型团队来说,可能自身的项目不需要用到组件化,但是又想学习和利用组件化的技术,组件化的本地化恰好可以满足这个需求。

那么何为本地化的组件化呢?对于常规的组件化来说,每一个模块或者说组件都需要创建为一个远端的组件库,别的模块从远端加载这个组件来使用,这样就需要管理非常多的库。而本地化的组件化只需要创建一个远端的代码库,存放所有的代码,进行版本管理,跟平常的代码管理一样,所有的组件也是放在这个库中,无需创建多个组件库,所以叫做本地化的组件化。

技术思路

本地化的组件化的技术思路是这样的,项目使用 workspace 来管理所有的 Project,其中的一个 Project 为主项目,其他的为不同的组件,新增组件就在这个 workspace 中新建一个 Project

运行主项目就选用主项目 Project,运行单一组件就选择这个组件 Project 进行运行。

而跨模块的通信使用的是基于反射的远程接口调用封装,基于 CTMediator 开源库。

Demo实践

比如现在要开发一款记录类型的APP,可以记录身体信息,比如身高体重等,基本的业务逻辑是,先进行登录,然后进入主功能界面,提供首页记录功能和我的页面两个 Tab。

Github-ModularizationDemo

以下是具体的实践过程:

创建 workspace

如图方式创建一个名为 Records.xcworkspace 的 workspace

workspace.png
创建 Project
  • 首页
  • 我的
  • 登录
  • 身体信息组件
  • 公共组件

按照功能,划分为这几个组件,分别创建4个 project,其中首页和我的放在主 project中,身体信息、登录和公共组件为单一组件,公共组件放一下功能分类,公共类,宏定义,后台接口文档之类的。

command + shift + N 创建 Project

注意要放在 Records 这个 workspace 中

add_project.png

创建完成如图

structure.png

构造组件

举个例子,先完成登录组件,把项目切换到 登录

login.png

完成登录的基本业务逻辑,运行没有错误之后,进行组件化的工作

podspec 文件

在终端创建 podspec 文件

pod spec create 文件名

使用这种方法创建的 podspec 文件会带有大量的注释
touch xx.podspec

使用这种方法会创建出一个空白的 podspec 文件

我们创建跟组件同名的 Login.podspec 文件, 详细语法参考 Podspec语法参考

Pod::Spec.new do |s|
    s.name             = 'Login'
    s.version          = '0.0.1'
    s.summary          = '登录组件'

    s.description      = <<-DESC
    TODO: Add long description of the pod here.
    DESC

    s.homepage         = 'https://gitee.com/xxx'
    # s.license          = { :type => 'MIT', :file => 'LICENSE' }
    s.author           = { 'xxx' => 'xxxxxxxxx@qq.com' }
    s.source           = { :git => 'https://gitee.com/xxx/Login.git', :tag => s.version.to_s }

    s.ios.deployment_target = '9.0'
    
    s.source_files = 'Login/Login/*.{h,m}'

    s.subspec 'Controller' do |ss|
        ss.source_files = 'Login/Login/Controller/*.{h,m}'
    end

    s.subspec 'Router' do |ss|
        ss.source_files = 'Login/Login/Router/*.{h,m}'
    end

    s.subspec 'View' do |ss|
        ss.source_files = 'Login/Login/View/*.{h,m}'
    end

    s.dependency 'CTMediator'

    s.prefix_header_contents = <<-EOS

    #ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #endif

    EOS
end

CTMediator

这是其他组件调用本组件的入口,通过创建 CTMediator 的分类,获取该组件入口控制器,比如当前登录组件就是通过 CTMediator+Login 分类中的方法获取登录控制器。

CTMediator.png

至此,登录组件已经完成,按照上诉步骤,完成其他组件的构建

组件的调用

构造 Podfile 文件

在 workspace 的根目录下创建 Podfile 文件,并完成构建

Podfile.png
source 'https://github.com/CocoaPods/Specs.git'

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

workspace 'Records.xcworkspace'

target 'Record' do

  project 'Record/Record.xcodeproj'
  
  pod 'CTMediator'
  
  #调用登录组件
  pod 'Login', :path => '../Record/Login/'

  inhibit_all_warnings!
  
end

#登录组件
target 'Login' do

  project 'Login/Login.xcodeproj'

  inhibit_all_warnings!

end

在终端使用以下命令完成本地组件的加载

pod update --no-repo-update

加载完成后,可以在 Pods 中的 Development Pods 看到加载的组件

Pods.png

切换到主工程 Record,进行登录组件的调用

Record.png

在需要用到组件的地方,导入组件中的CTMediator分类文件(CTMediator+Login.h),调用分类方法,获取控制器,进行控制器的使用跳转,demo 是在 AppDelegate 中调用

#import <Login/CTMediator+Login.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    UIViewController *loginVc = [[CTMediator sharedInstance] loginVc];
    
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginVc];
    
    self.window.rootViewController = nav;
    
    [self.window makeKeyAndVisible];
    
    return YES;
}

至此,本地化组件化的基本实践流程已完成,具体请参考Demo。

相关文章

  • iOS-本地化组件化的实践

    前言 业界已经有许多技术文章进行了组件化的指导了,这里就不再赘述。 本文主要讲的是小型团队和小型项目对于「本地组件...

  • iOS组件化实践(基于CocoaPods)

    iOS组件化实践(基于CocoaPods) iOS组件化实践(基于CocoaPods)

  • 组件化实践详解(二)

    在上一篇文章《组件化实践详解(一)》中我们介绍了组件化实践的目标和实践步骤,本文继续说说关于组件化实践遇到的问题及...

  • 蜂鸟商家版 iOS 组件化 / 模块化实践总结

    蜂鸟商家版 iOS 组件化 / 模块化实践总结 蜂鸟商家版 iOS 组件化 / 模块化实践总结

  • ios 组件化

    参考 iOS 组件化实践《二》基于现有项目拆分组件化实践 在现有工程中实施基于CTMediator的组件化方案 i...

  • iTunes connect修改主要语言(2017.10)

    本地化 本地化有app内本地化,和itunesConnect里本地化。app内本地化是用户使用 app时看到的语言...

  • iOS国际化

    本地化需求 1,字符串本地化2,app名称本地化3,storyboard中的控件的title本地化 如何实现本地化...

  • iOS 本地化总结

    本文设计到的本地化,均来自自己实践, 在此做个笔记,方便自己复习也方便他人学习. 在iOS中涉及到本地化的场景主要...

  • 组件化方案

    组件化方案引用 在现有工程中实施基于CTMediator的组件化方案 iOS组件化实践(一):简介 iOS组件化实...

  • 组件化中的本地化

    在开发过程中,可能由于业务繁多,进行组件化处理但是也有可能因为业务面向不同的国家,要有本地化处理 要想各个业务有自...

网友评论

      本文标题:iOS-本地化组件化的实践

      本文链接:https://www.haomeiwen.com/subject/hozvwhtx.html