iOS程序员的业余沙龙iOS之框架架构iOS之开发配置

组件化开发之-一步一步实现iOS组件化开发架构(一)

2017-05-26  本文已影响923人  一根聪

原创 2017-05-25

关键点:

  • 组件化框架以及所需技能
  • 验证项目
    • 创建私有Repo
    • 创建工程
    • 创建组件Pod
    • 配置Jenkins-Pipeline
    • 通过fastlane 创建lanes

由于最近在公司要求做关于组件化开发的事,索性就将自己如何实现一步一步的记录下来,这里介绍如何来实现的,将会分为几个阶段介绍,现目前介绍第一阶段:验证(即验证所需技能、Android客户端和我们实现的技术不同时如何找出较优方案、如何与后端管理系统配合,后端需要提供哪些能力),如果有不合理的地方望指点我的邮箱

关于为什么我们在开发移动端的时候需要使用到组件化开发呢?这里有一些我自己通过别人介绍以及自己在验证组件化开发时的体会组件化开发之-我们有什么必要使用组件化开发?

我们后台采用微服务架构,有能力为第三方开发者提供更多的服务,但是有时候为了适应业务需求的快速变化,以及部分客户(如电信、移动)特殊需求(不能用我们平台提供的服务时、不能将数据提交至第三方管理平台等),这时候别人在开发自己的后台时,也要求我们前端架构也能够考虑到了可扩展开发,也就是说要求我们的架构需要能够满足 插件化开发(为第三方提供SDK),那么为了实现这些需求我们需要做哪些呢?

组件化框架以及所需技能

首先简单介绍一下我们iOS组件化的架构,如下图,整个架构会分为三个阶段实现:

要实现插件化是需要建立在组件化的基础之上的,这一阶段我们只讲述关于组件化开发相关的框架及技术,在组件化成型并稳定的情况再来考虑插件化开发。以下是我们实现整个框架的脑图(现阶段我们只做图中右半部分):

验证项目

上述章节已经提到了我们需要做的事以及需要了解的技术,以及我们如何分阶段实现,这里就不废话了,直接开始创建一个验证项目。

创建私有Repo

现在我们添加自己私有仓库就算成功了, 接下来就是需要来创建自己的工程。

创建工程

由于这里是验证工程,我们就将工程命名为VerifyProject吧,同样也需要在Github上创建工程的仓库(因为我们后期需要通过Jenkins自动下载代码进行配置并构建)

创建组件Pod

接下来就是创建你的组件Pod了,在创建组件Pod的时候我建议参考组件化开发之-pod创建规范(这仅仅是一个简单的规范,适合小项目) 。这里我们创建5个组件模块称之为:VerifyA、VerifyB、VerifyC、VerifyD、VerifyE,创建方式是相同的,我以VerifyA为例。

$ pod spec create Verify+A

最后你的目录结构看起来应该是:

$ pod lib lint
$ git add .
$ git commit -m "添加Pod"
$ git push

# 添加Tag
$ git tag 0.0.1  # 这里需要与你.podspec中 s.version相同
$ git push --tags

# 验证
$ pod spec lint 

-> Verify+A (0.0.1)

Analyzed 1 podspec.

Verify+A.podspec passed validation.

$ pod repo push Verify Verify+A.podspec  

Validating spec
 -> Verify+A (0.0.1)

Updating the `Verify' repo

Already up-to-date.

Adding the spec to the `Verify' repo

 - [No change] Verify+A (0.0.1)

Pushing the `Verify' repo

Username for 'https://github.com': wangcccong@foxmail.com
Password for 'https://wangcccong@foxmail.com@github.com':
To https://github.com/ApterKingRepo/Specs.git
   ea61c37..3df4c78  master -> master
$ pod search Verify+A 

-> Verify+A (0.0.1)
  业务组件A
  pod 'Verify+A', '~> 0.0.1'
   - Homepage: https://github.com/ApterKingRepo/Verify-A
   - Source:   https://github.com/ApterKingRepo/Verify-A.git
   - Versions: 0.0.1 [Verify repo]
source 'https://github.com/CocoaPods/Specs'
source 'https://github.com/ApterKingRepo/Specs.git'  
platform :ios, "9.0"  
target "XXX" do  
  pod 'Verify+A', '~>0.0.1'  
end

配置Jenkins-Pipeline

在使用Jenkins之前你需要去了解fastlane如何使用。我的另一篇文章有一个简单介绍:组件化开发之-基于Jenkins搭建iOS持续集成开发环境,但是更多更详细功能还请你移步fastlane docs

# 伪代码
pipeline {
    enviroment {
      环境变量
    }
    parameters {
      参数配置
    }
    stages('配置项目') {
       stage('拉取原始项目')
      stage('写入配置文件')
      stage('配置Podfile')
      stage('引入模块')
      stage('构建项目')
      stage('部署到蒲公英')
    }
    post {
      failure { 
        hook_failure   #通知管理后台,构建失败,重新构建
      }
      success {
        hook_success  # 通知管理后台,构建成功,用户可以直接去下载
      }
    }
}

通过fastlane 创建lanes

$ cd VerifyProject
$ fastlane init

如果是第一次使用fastlane init,你需要按照提示信息输入你的Apple ID 以及密码,后面的事情就交给fastlane创建就可以了。但是有时候你会发现如果你已经使用过了fastlane init之后,并且这时候如果你的Apple ID的密码改变了,该怎么办呢? fastlane tool chains 提供了一个工具credentials_manager, 这时候你只需要删除保存的密码:

$ fastlane fastlane-credentials remove --username xxx@xxx.com
password has been deleted.

现在你可以直接执行你的fastlane init 了,如果你想要在执行时不需要输入密码,你可以:

 $ fastlane fastlane-credentials add --username xxx@xxx.com
Password: *********
Credential xxx@xxx.com:********* added to keychain.

成功之后你会看到如下信息

+----------------+-----------------------------+
|          Summary for produce 2.35.0          |
+----------------+-----------------------------+
| app_name       | VerifyProject               |
| app_identifier | com.ApterKing.VerifyProject |
| username       | xxxxxx@xxx.com              |
| sku            | 1495690xx                   |
| platform       | ios                         |
| language       | English                     |
| skip_itc       | false                       |
| skip_devcenter | false                       |
| team_id        | FJAP4H992E                  |
+----------------+-----------------------------+
source 'https://gems.ruby-china.org/'

gem 'fastlane', '2.35.0'
gem 'gym'
gem 'xcov'
gem 'cocoapods', '1.2.1'
gem 'xcpretty'
gem 'dotenv'

# 项目相关
FL_PROJECT_PATH = "./VerifyProject.xcodeproj"
FL_WORKSPACE_PATH = "./VerifyProject.xcworkspace"
FL_SCHEME = "VerifyProject"

# 输出目录
FL_OUTPUT_ROOT_DIRECTORY = "./fastlane_build"

# 蒲公英
FL_PGYER_USER_KEY = "6fe2235f85a756314753774cee5fb164"
FL_PGYER_API_KEY = "43ce06e684f029fe3ec64a436c2a5c15"
// 进入到fastlane目录下
$ bundle exec fastlane lanes
--------- ios---------
----- fastlane ios config_generate
生成配置文件
Usage: bundle exec fastlane ios config_generate param:[数据/URL等]

----- fastlane ios config_pod
配置Podfile
Usage: bundle exec fastlane ios config_pod

----- fastlane ios build
构建项目
Usage: bundle exec fastlane ios build config:[Debug/Release]

----- fastlane ios deploy
部署到蒲公英
Usage: bundle exec fastlane ios deploy config:[Debug/Release]
pipeline {
  agent any   // 你也可以使用 agent {label 'mac_for_iOS'}

  environment {
    BASH_PROFILE = '~/.bashrc'
  }

  stages {
    stage('拉取项目') {
      steps {
        git 'https://github.com/ApterKingRepo/VerifyProject.git'
      }
    }

    stage('生成配置文件') {
      steps {
        dir('./VerifyProject/fastlane') {
          sh "bundle exec fastlane ios config_generate param:'${params.module}'"
        }
      }
    }

    stage('配置Podfile') {
      steps {
        dir('./VerifyProject/fastlane') {
          sh 'bundle exec fastlane ios config_pod'
        }
      }
    }

    stage('构建项目') {
      steps {
        dir('./VerifyProject/fastlane') {
          sh 'bundle exec fastlane ios build config:Debug'
        }
      }
    }

    stage('部署项目') {
      steps {
        dir('./VerifyProject/fastlane') {
          sh 'bundle exec fastlane ios deploy config:Debug'
        }
      }
    }
  }

  post {
    failure {
      echo '构建失败,你可以调用远程通知,或者发送一个Email'
    }

    success {
      echo '构建成功,你可以调用远程通知,或者发送一个Email'
    }
  }
}

你可以讲代码下载来自己照着做一遍,应该就会比较熟悉整个流程,这里面的代码还没有考虑到如何进行业务组件间的调用,我将在下一阶段来介绍
** 这里也有一点公有Pod代码,你也可以来看看:**

最后你会发现:最快熟悉的方式应该是自己做一遍,你会发现里面有很多坑,踩多了你也就会了。

上一篇下一篇

猜你喜欢

热点阅读