2019独角兽企业重金招聘Python工程师标准>>>

自己动手设计一款iOS自动构建发布工具

一、引言

在iOS开发中,你可能经常会遇到这样的场景:

自己负责的功能模块开发完成后,将其合并到测试分支,然后打测试包给测试安装。测试发现bug,这时你可能正在开发分支上做其他的事情,但是你需要修改了bug,提交到测试分支,再次打测试包给测试人员使用。反反复复的切换分支,反反复复的构建打包将浪费你大量的时间,作为一名工程师,最不能容忍的便是在重复的事情上浪费时间。于是,你想,我可以自己动手写一个自动构建发布的小工具。

本篇博客就是基于上面的想法,给大家介绍编写一个简洁的自动化工具的具体步骤与核心要点。在编写本博客时,我也基于这样的想法开发了一款Mac上的iOS自动构建,打包,发布工具,并且将代码开源在Github,如果有兴趣,你也可以作为参考。

二、需求分析

开发工具也是一种产品,在开始做一件产品之前,需求分析是十分重要的步骤。商业产品的需求者是用户,而开发工具的需求者就是你自己。首先,结合工作需要,一款自动化构建工具应该至少满足如下这些功能需求:

1.它应该支持多个项目同时进行自动化构建。

2.应该可以方便的新增与删除项目。

3.它应该具备Git操作能力,自动选择合适的分支进行构建。

4.它需要调用Xcode命令来完成打包工作。

5.它具备发布到第三方平台的能力(例如蒲公英)。

6.它可以灵活的进行模式配置,Git模块,Xcode构建模块和发布模块可以自由组合。

7.它应该有一个输出窗口,可以让使用者获取构建的进度以及log日志。

8.它有记忆功能,会将配置信息保存到本地。

上面列出的功能点是这个自动化构建工具的一些基础功能,实现了这些功能,你的软件便可以正式的投入使用,但是它并不完善,你可以在自己规划的第二版,第三版中继续丰富功能,优化体验。

三、技术分析

明确了需求,你下一步需要考虑的便是实现这些需求所需要的技术。

1.支持多个项目同时进行自动化构建。

在界面上,可以采用列表的方式进行已添加项目的展示。NSTableView是一个很好选择,其使用方便,结合xib文件来编写cell,其开发效率也十分高。关于进行多个项目的同时构建,可以采用多线程编程技术,在Objective-C中,NSOperationQueue可以方便的进行多线程任务管理,我们可以使用它来实现异步编程。

2.新增与删除项目。

对于iOS工程的自动构建,新增和删除项目无非就是保存或删除xcode文件的路径,当然,你可以也需要一些附带的数据用于显示,例如项目名等。

3.操作Git。

安装了Xcode工具,Git工具会被自动的安装。你可以直接在终端通过命令行来调用Git命令,你可以使用Foundation框架中的NSAppleScript类来在OS X平台软件中执行脚本命令,关于Git模块,你需要使用到的命令如下:

①拉取项目所有分支:git branch

②进行分支的切换:git checkout [分支名]

③从远端拉取代码:git pull

4.使用Xcode命令来进行工程的构建。

和操作Git命令类似,你需要使用到的Xcode的构建命令如下:

①清理工程:xcodebuild clean -[工程类型] [工程地址] -scheme [scheme名称] CONFIGURATION=[DEBUG模式]

②导出archive文件:xcodebuild archive -[工程类型] [工程地址] -scheme [scheme名称] -archivePath [导出路径] CONFIGURATION=[DEBUG模式]

③导出IPA安装包:xcodebuild -exportArchive -archivePath [archive文件路径] -exportPath [导出路径] exportOptionsPlist [配置plist文件]

5.发布到第三方平台

这一步其实就是IPA安装包的上传,你可以长传到蒲公英平台作为私有项目供测试人员使用,你也可以上传到公司自己的服务器,AFNetworking是一个同时支持iOS和OS X的网络第三方库,你可以选择使用它来上传文件。

6.灵活的组合模块。

这部分就完全是代码逻辑了,在设计时,你可以将每个模块封装成具体的任务,任务之间只能顺序进行执行,然后自由组合这些任务即可。

7.输出窗口。

使用NSTextView来显示输出信息,无论是执行脚本,还是上传文件,如果出错,都会有信息反馈。

8.记忆功能。

你可以选择使用数据库来存储每个项目的信息,因为数据量并不大,我在开发这个软件时,采用的是归档的原理来进行数据的持久化。

四、界面设计

在Xcode中,使用storyboard开发界面是一件什么畅快的事情。在开发项目的主界面时,我参照了SourceTress的设计,也感谢 @魔笛 提供的界面思路。我想作为开发者的工具无需绚丽的外表,简约是实用,然后看上去舒服就算达到要求。主页面截图如下,其也十分简单,只是作为数据的展示。

添加工程界面我采用的是弹出窗口的模式,正如上面分析,添加工程的实质就是拿到Xcode项目文件的地址,界面效果如下:

项目详情界面略微复杂,其中需要配置编译模块,Git模块和发布模块,界面如下:

关于逻辑与功能的编写,代码较多,需要的朋友可以自动查看源码。

五、扩展与源码

Jenkins是一个持续集成与发布软件的平台。后续你可以为你的自动构建工具添加轮询打包的功能,将其运行在一台作为服务器的Mac电脑上,它就是具有了持续集成功能。

软件下载地址:http://zyhshao.github.io/AutoBuild/welcome.html。

github源码:https://github.com/ZYHshao/AutoBuild。 欢迎starO(∩_∩)O

欢迎指教 共同学习

转载于:https://my.oschina.net/u/2340880/blog/1486246

自己动手设计一款iOS自动构建发布工具相关推荐

  1. iOS自动构建以及打包命令(xcodebuild,xcrun)

    两个命令的语法以及使用方法,资料比较多,到处都可以找到,比如: iOS 自动构建命令--xcodebuild 基于xcodebuild和xcrun的自动化打包 iphone-命令行编译之--xcode ...

  2. iOS 自动构建命令——xcodebuild

    想想当初天天来到公司,每天需要做一件事就是打开Xcode打包ipa,上传到fir.日复一日月复一月年复一年的做着同样的事情,作为有志成为优秀工程师的我来说,这是必须要解决的问题,所以决定自动化解决问题 ...

  3. Gitlab+Jenkins+Artifactory, CI/CD自动构建发布环境搭建使用实践

    CI/CD自动构建发布环境搭建使用实践 通过C/C++的cmake工程示例项目,构建Gitlab+Jenkins+Artifactory自动构建发布环境.其中 Gitlab提供源码仓库功能,通过web ...

  4. iOS 自动构建套件 - flow.ci + fir.im + Coding

    2019独角兽企业重金招聘Python工程师标准>>> 编者按:本文转载自 flow.ci 用户 GitHub@mzying2013 的实践分享,原文链接这里. 前言 相信很多最开始 ...

  5. 32款iOS开发插件和工具介绍[效率]

    插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络訪问 ...

  6. 八款电脑自动校时工具推荐

    1.电脑校时器v3.0 软件体积:56K 运行环境:Windows XP/2003/2008/7 软件授权:免费 下载地址:点击此处下载 软件简介:通过网络服务器使用北京标准时间来校准你的电脑时间. ...

  7. 几款博客离线发布工具

    写博客已是大众化的事情,现在国内外有不少离线编辑发布博客的工具,比如: 博客精灵2008        软件版本: 1.5(公测版)        使用平台: windows 98 / ME / 2K ...

  8. 开发者福利:三款 iOS 应用原型开发工具

    一个好的想法需要借助工具来实现, 应用开发也是如此.有些人会选择Xcode进行iOS应用开发,但这么毫无准备地一头扎进去就很可能会在中间环节卡住,或者最终做出来的应用与自己最初的 想法大相径庭.所以在 ...

  9. 【wordpress】wordpress插件之自动采集发布工具

    前言 安装好wordpress后,就要开始发布文章,由于之前的文章分散在各个平台,想要一个个拷贝过去,的确费时费力,所以想要一劳永逸的解决这个问题,就要用到今天介绍的这个采集工具 插件安装 搜索: F ...

最新文章

  1. 数据结构(06)— 线性循环链表实战
  2. 短序比对工具 bowtie vs BWA vs Subread vs SOAP vs NovoAlign
  3. web.xml 里context-param 、listener、 filter、servlet 加载顺序
  4. p沟道mos管导通条件_通俗易懂:MOS管基本知识(快速入门)
  5. 判断一个偶数(大于4)是不是两个素数之和
  6. 爱情二十四课,妥协50分
  7. java堆排序解决topk问题,利用堆排序来解决topK问题
  8. Flume+Kafka+Spark Streaming+MySQL实时日志分析
  9. http请求过程:一,DNS域名解析系统详解
  10. 【学术 | 比赛】比赛?论文?先收藏!29个学术网站,比赛论文不再困难
  11. C语言实践项目:2019年个税计算器
  12. ESP32 系统篇: 优化系统启动时间
  13. 打开应用商店显示服务器出错了,Win10应用商店提示“我们这边出错了”的三种解决方法...
  14. C语言8.14文曲星上的猜数游戏
  15. CRC-16/MODBUS x16+x15+x2+1校验计算 C++
  16. 无线节点的空中唤醒技术解析
  17. Html5游戏封包,学习JavaScript-10-基本封包类型
  18. windows2012 r2 安装sqlserver 2000问题的解决方法
  19. 如何使用Python进行图形化编程
  20. 链路层典型协议(简述)

热门文章

  1. java 字符串转哈希_从哈希字符串转换字节,java与python
  2. 别人电脑连不上我的swagger,自己能连
  3. 模仿一个球落地效果,最终停在地面上(仿真效果,CSS实现)
  4. 如何进行需求梳理及埋点方案设计
  5. 【转义字符】HTML 字符实体lt; gt: amp;等
  6. Lodop插件未安装 页面卡死 点击无反应
  7. 脚本(3D Survival Game Learning)
  8. 2023年肯尼亚签证办理指南分享
  9. 上周去ThoughtWorks的一次失败的面试经历(二)
  10. python 散点图 置信区间_python计算置信区间