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

配置Jenkins-Pipeline

当运Jenkins之前您得去打听fastlane如何运用。我之其他一样首文章产生一个概括介绍:组件化开发的-基于Jenkins搭建筑iOS持续集成开发条件,但是再次多还详尽功能还求而走fastlane
docs。

  • New Item 创建一个Pipeline
  • 配置Pipeline General
  • 配置Pipeline Triggers
       我们选择带来参数的长途触发,从下图的提拔中我们可见见,你一味待看JENKINS_URL/job/iOS/job/Verify/build?token=TOKEN_NAME
    既好触发发了,如果你带有参数还续加即可...?token=token&module=A,B,D

  • 配置Pipeline

由于在配置Pipeline
script时,我们需要依赖于fastlane,我们这里就先说一说在Pipeline中需要的几个Stage
(这里只以简单的介绍,其他更多单元测试、功能测试等,在后面阶段再来详细介绍),注意从Jenkins2.5以后Pipeline脚本支持两种方式,新的一种方式是创建一个Jenkinsfile,然后再来写你的脚本,最好的方式是参考官方文档[Pipeline
Syntax](https://link.jianshu.com?t=https://jenkins.io/doc/book/pipeline/syntax/),已经很详细介绍了,在这里我就不细说了。

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

-END-

证项目

上述章节已经关系了咱们用开的转业和需要了解的艺,以及我们哪分割路贯彻,这里虽无赘述了,直接开创造一个认证项目。

羊蝎子店之业主女儿今年七载了,只当电视及呈现了天安门之升旗。

创造组件Pod

联网下就创建而的组件Pod了,在开立组件Pod的时段自己建议参考组件化开发的-pod创建标准(这仅仅是一个粗略的规范,适合小项目)
。这里我们创建5个零件模块称之为:VerifyA、VerifyB、VerifyC、VerifyD、VerifyE,创建方式是同一之,我因为VerifyA为条例。

  • 在Github上创建Repository

  • 创建Example,假要我们使用的是MVVM开发模式,创建好后以UIViewcontroller中添加简单代码即可,最后看起应当是:

  • 创建.podspec,并且创办Pod/Classes目录,将Example的View、ViewModel、Model拷贝至Classes目录

$ pod spec create Verify+A

末你的目结构看起应当是:

  • 修改.podspec
  • 本地验证.podspec是否正确

$ pod lib lint
  • 交至Github,并远程验证,按照下列步骤需要首先付诸Git,然后上加Tag

$ 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中

$ 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

$ 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]
  • 当今而可以采用了,请记住在您的Podfile中上加而Private Pod 源

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
  • 依上述方式创建而的其它零件,最后创建成功后,在你的Specs中,看到的应该是如此

京勿是刚刚开头的地方,也非会见是最终一个地方。

由最近当店堂要求开关于组件化开发之事,索性就以协调什么促成均等步一步之记录下来,这里介绍如何来兑现的,将会晤分为几单等级介绍,现眼前介绍第一等:验证(即征所欲技能、Android客户端和咱们落实之技能差时怎么寻找有比佳方案、如何跟后端管理网匹配,后端需要提供哪些能力),如果发不成立之地方为指点自己的信箱。

“恭喜”这词话,我也怎为说不出口。

通过fastlane 创建lanes

  • 创办而的fastlane
    这里需要您进入我们之前创建的VerifyProject项目中,然后初始化fastlane

$ 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                  |
+----------------+-----------------------------+
  • 缔造而的Gemfile,你要为此到fastlane哪些工具集,如己今天的如下:

source 'https://gems.ruby-china.org/'

gem 'fastlane', '2.35.0'
gem 'gym'
gem 'xcov'
gem 'cocoapods', '1.2.1'
gem 'xcpretty'
gem 'dotenv'
  • 创立有环境配置App.env

# 项目相关
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"
  • 修改Fastfile,创建lanes,我主要发生:
       在创建lane
    config_generate、config_pod这几个模块中我们需要为此到shell脚本,你可以打这边去询问一下基础的shell脚本写法:Shell
    教程

// 进入到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
    script是动伪代码表示的为?现在我们用来宏观它,以下是自个儿勾勒的:

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'
    }
  }
}
  • 末你要来点发而的Pipeline了,由于我们现在凡是测试,没有同Web端链接,但是也能模拟远程传递参数触发:

  • 末尾你想到的该是Build就ok
    了针对性吧?那么你应有是眷恋错了,你晤面见到的凡:

各种错误,也不要担心,慢慢修改即可,最后你总会看到构建成功,我将这个整个的构建过程发布到了Github上了,
你可以从:
  • Verify
    私有Repo

  • VerifyProject
    源码

  • 业务组件A

  • 事务组件B

公可以说话代码下充斥来好以在做同全方位,应该就是会较熟悉整个工艺流程,这中的代码还不曾设想到何以开展业务组件间的调用,我拿当下一阶段来介绍
** 这里呢闹某些国有Pod代码,你啊得来瞧:**

  • Swift
    一些扩大
  • Swift完成的汽车仪表盘
  • 阿里字库

终极你晤面发现:最抢熟悉的方法应是友善开相同普,你会意识内部来那么些坑,踩多了您呢就算会见了。

“等作了工钱,我哪怕失置办人红。”

至于为何我们在开移动端的时光要利用及组件化开发也?这里发出局部己自己通过他人牵线和自己以证实组件化开发时的咀嚼组件化开发之-我们发什么必要运用组件化开发?

“生活并未自想像的那好,但也未尝我设想的那么糟。”

关键点:

  • 组件化框架和所急需技能
  • 证实项目
    • 创造私有Repo
    • 缔造工程
    • 缔造组件Pod
    • 配置Jenkins-Pipeline
    • 通过fastlane 创建lanes

自此怕是双重为凭着不至这样好吃的羊蝎子了。

组件化框架和所急需技能

第一简单介绍一下咱iOS组件化的架,如下图,整个架构会分为三只级次落实:

  • 兑现基础与作业模块组件化开发
  • 封装Framework及规范SDK接口文档
  • 社内率先利用SDK完成插件化开发

  • [组件]:
    目前我们包含了作业组件和基础零部件。业务组件涉及到您所待形成的之一需求,这里是冲企业事情需要进行支付;常用的网,数据存储等我们将其划归到基础零部件中来,但是要你记住一点,也是生重要之一点:基础零部件的付出相应是确立在业务需的底蕴之上,任何独立开发出的基础零部件对于事情需求来说并无会见起至其他帮助作用,应该由业务需指导基础零部件的支付,任何独立出来的基本功零部件应该是成立于公待做的某某功能及,如齐图被涉及的网要、蓝牙BLE、MQTT等基础零部件。

  • [私家/公有仓库]:
    团队通力合作开发时,我们应吗或是必须以及之是版本控制工具。你应当打达成图被看到,我们以及了CocoaPods,我推荐您下Git,当然使用SVN也远非呀问题,但是倘若你认为你写的公有基础零部件可以呢大部分业务需要提供劳务能力,想通过开源来啊大家所用,并且为从中寻找有不足,那么用Git是一个于好的取舍。如果您先用的凡SVN这个版本控制工具,而且是不时用命令的道来运,相信你得便捷接通至Git并且熟练运用,这里我之其余一样首Git基础,就活该力所能及满足你创造Pod了。
  • [Pod]:相信您于支付iOS中为还是多还是丢失用了第三正值依,也该听说和用过CocoaPods,在咱们的组件化架构中我们用以及该项技术再度多一些的事物:组件化开发的-Cocoapods使用与创造发布自己的Pod以及组件化开发之-pod创建标准,我们要能够创造和谐的国有Pod
    以及个体Pod,使用了Pod之后您会意识是第三正在依管理工具也同非常适合用来进展组件化以及插件化管理。
  • [Web后高保管]:面架构图之Web管理后台其实可以无存在,但是为什么这边用考虑进组件开发框架中吗?我信任你们要是是供微服务后台,那么您一定遇到过不少索要定制化业务需,或者您以售卖你自己事务的时要各自吗歧用户定制不同之App,而未是管你所出之拥有事情组件一起打包送你吃你的客户,这个时你不怕需用后台管理来因不同用户,不同权,不同选项构建而的移位使用。Web后令保管此处只为运动端提供权限、用户从定义业务、后期用户支出之自定义业务Pod管理、自动生成配置文件和继续触发自动包功能。
  • [Jenkins]:凡是连集成的一个格外好引擎,那么我们为何以软件开发中落实没完没了集成否?就自我临时眼前了解及发现,如果我们是团组织开发来完成有一下工作,那么我们就算在多次付给代码,提交以后需要快速的证实修改,我们无可知每次交一个即自己失去啊App打一次于包交由测试团队来测试吧。而且有时我们一个急需开发好我们相遇特别情况需要快速上线呢?Agile教给了咱召开下的东西用是MVP(这里不是公上荣耀游戏受的死去活来最屌的队友,也非是美国业篮球联赛最有价球员奖,而是不过小但运行版本),其中有一个步骤需要我们下工具来促成,这时候我们不怕因此到了Jenkins,我之其它一样切开文章写了关于怎样行使:组件化开发的-基于Jenkins搭建筑iOS持续集成开发条件。
  • [SDK/Framework]:要是贯彻插件化开发与平台管理,那么您必得啊老三方开发者提供一个而速实现之框架和专业吧,上图被干的支出业务组件/基础零部件尽管是咱也老三在支付公司供的部分得以高速利用的Framework和力所能及很快对接抱平台的SDK,以及有出规范,只要遵循此开规范来开展,那么你的急需便可于原有的根底之上实现特殊需求的事务,并且迅速集成发布你的本子。
  • [其三方出]:汝只有需要依照上述涉的开支规范开展初步即可,开发成功后的工作组件有点儿种方式很快衔接到平台:一栽是你可以你的事务组件直接上传或者打包成Framework,并且通过Pod方式交给至我们沿提供的个人Pod仓库,同时在我们的后台按照规范提交你的零件模块;另一样栽艺术是唯恐你无希罕为别人看您的代码(即使是您的合伙人),那么你可以交到到您自己之个人仓库以创办好而的Private
    Pod,告诉平台若的库房地址即可。至于剩下的事务虽交于平台处理吧,你以会见比较你了构建一个App花费更不见的时日。

万一落实插件化是要建立于组件化的根基之上的,这同样流我们只是讲述关于组件化开发有关的框架和技术,在组件化成型并稳定的状况又来考虑插件化开发。以下是我们实现整个框架的脑图(现阶段咱们就开图备受右半片段):

原创 2017-05-25

8单人,分了片遍,路上老板跟我们说他这家羊蝎子店开了出十年了,明年打算把女接北京来达成小学。

我们后台采用微服务架构,有能力呢老三方开发者提供更多的服务,但是有时为适应工作需求的全速变动,以及部分客户(如电信、移动)特殊需求(不克就此我们平台提供的劳务经常、不能够用数据提交至第三着管理平台等),这时候别人当支付自己之后台时,也要求我们前端架构也能考虑到了不过扩大开发,也就是说要求我们的架构需要能够满足
插件化开发(为老三正值提供SDK),那么为贯彻这些需求我们得开哪些也?

房租一个月2800。

缔造私有Repo

  • 在Github高达缔造一个Repository,并且命名也Specs(至于何以而如此可参见组件化开发之-pod创建标准)

  • 添加Private Pod 并验证

今天我们抬高自己个人仓库就成功了, 接下来便用来创造和谐的工程。

“现在方针好了,我们这些做多少事情的也罢挣了接触钱,我打算将老家的房屋卖了,把父母与女儿都带北京。”

创工程

由于此地是验证工程,我们就是将工程命名为VerifyProject吧,同样为要在Github上创办工程的库(因为咱们后期需要经过Jenkins自动下载代码进行配备并构建)

  • 始建项目Repository

  • 以Repository拉取下来并且通过XCode创建工程VerifyProject

  • 开创布局文件Config以及Config.swift
       其实我们可在继续通过Jenkins-Pipeline
    脚本动态创建这半单文件之,但是这里怎么用首先创建为?一个缘故是:整种是出于哪些组件构建而成为是动态的,我们要依据Web管理后台的安排来窜配置文件、我们主模块的展示与修改Podfile。还有一个再度要紧的因由是:我们知晓要您于类型受到动态增长其它文件,XCode是力不从心将该卷入到您的型中的,因为你并不曾点名它这些新创造的文本是要编译的,当然也发出大神提出了解决方案的采用代码为
    Xcode
    工程长文书,略微有接触麻烦,我们这边是证明工程,就先行飞起加以,在晚级逐步到。
    创好后,你的种看起应当是这样的:

  • 初始化你的Podfile,这个上要您难以忘怀不待以Podfile添加任何借助

现在你的工程创建也已经完成了,现在提交到Github仓库,它看起来应该是:  

仅仅希望那些还有希之丁,不要以流转中碌碌无为。

那场大火里死的人数又来什么错为,不过大凡生所逼罢了。

微七留于首都,没有猫,害怕被铺辞退交不由房租,每天拼了命的劳作。

“死难者离开了这个世界,活下来的人头要是落及六缠绕之外,还有人管路但降低、不得不去北京。”


我们顿时是住在五维凤旁边的快捷酒店,凌晨于不顶车,老板说他发车,可以免费送我们回来。

聊旅舍不许养宠物,小七将养了少年的猫送给了情侣,交完房租剩下的如出一辙触及钱为猫贩了十几个鱼罐头,放在太空舱里。

摊煎饼的姨母,家里还有一个七十多年度之老奶奶,两单人口在北京站底先头,顶在寒风坐了五只多钟头,凌晨上了火车,说再也为磨不来了。

以至于这时我才忍不住想要流泪。

“至少在零下四渡过的京,我弗用露宿街头。”

其并且说,隔壁那小羊蝎子店也牵扯了,老板昨天即带来在家回东北了,走前给大家做了最后一戛然而止羊蝎子,加了好多辣。

到了酒店下车的上老板与咱们说,下次重新来,他们下的涮毛肚也颇爽口。

“16000平方千米的首都,我未曾1平米的容身之处。”

自身咨询她为何非像面一样回家,小七说,当年我并了命才考到的北京,就这么回,我不愿。

圈昨晚让本人作了长微信:努力,我一旦去北京了。

自我莫晓该怎么转其,一摆放逐客令有时候比天灾人祸还要吃人束手无策。我望它在五分钟前发的心上人围,她用了充分遥远的让贴满了小熊的行李箱及同等堆放袋子在一起,背景是光秃秃的墙,一依台历写在大娘的26。

它们说,我母亲被我查找了个近乎对象,不出意外的言辞,明年新春就是设婚了。

范围买了平张单程的返家之车票,二十基本上只钟头,硬座。

抄完节目已经凌晨三接触,圈圈带我们错过隔壁一小羊蝎子店吃宵夜,店充分有点,东西反而很齐全,老板听说我们都是于他乡来之,又大多送了咱们几乎弄错烤韭菜。

董大力

“我女儿吵吵着想去天安门扣押升旗仪式,路费太昂贵了,她今年6年,还无来了北京。”

国王荣耀打的杀厉害的音响师,女对象莫乐意跟外扭动老小县,找了只六十差不多春带在三三两两只男之劣绅,结婚了。

五维凤凰的门口,我生了车冷的直哆嗦,旁边窜过来一个女生递给我平双双手套。这是自我先是浅看圈圈,大概,也是最后一糟探望圈圈了。

——《财经》

“从此后,北京只有自己一个口矣呀。”

距离发工钱还有十上,小七找我借了200块钱,买了平等箱子袋装泡面,剩下的当日常支出。

来自心情沉重的

稍稍七下还出个妹妹,每个月6000的工资,要寄四分之一回家。

……

我和局面是去年赶上星之时节认识的,巧的凡,我们认识的地方就于大兴。

“来了首都三年,走之时光吗尽管如此来东西。”

只是他们以发出什么错为,不过大凡怀念了得重新好一些罢了。

小七凡是本人其他一个对象,她为在京,比规模幸运的一点是,她找到了新的房子,六围绕外之均等下有些旅店,和其他一个姑娘和租了一如既往之中标间,两摆放床,十几平米,包括更衣室,每天要盖1个钟头40底地铁去上班。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website