【iOS】史上最全的iOS持续集成教程 (上)
这个系列的博客分为上下两篇,上篇介绍命令行工具使用,下篇介绍利用Jenkins进行持续化集成
在iOS的开发过程中总是免不了要不停的打包,通常的打包方式是这样的
XCode->Archive->Export
期间还要选择对应的证书与pp文件,进行一次打包会花不少的时间,在打包的过程中你啥都做不了,只能干等着。今天主要介绍利用命令行来解放你的双手,让你在打包的时候能够释放你的双手。
今天分享的内容如下:
- xcodebuild指令介绍与使用
- 利用shell脚本打包
- fastlane介绍与使用
xcodebuild
xcodebuild 指令是苹果官方提供的命令行打包工具,你可以使用此命令来进行clean、build、test、archive。
要查看官方的使用指南,可以通过命令 man xcodebuild来查看
project构建
要构建xcode项目需要在工程所在目录运行xcodebuild指令,如果目录中含有多个preoject的话,就需要使用-project指令来指定需要构建的工程。默认情况下xcodebuild会以工程里默认的configuration来build工程里的第一个target。
workspace构建
要构建workspce,需要设置-workspace与-scheme来定义构建,scheme用于指定要构建的targt以及怎样构建,也可以传递其他参数对scheme进行覆盖。
我们可以通过以下选项来查看工程中的环境
- -list 查看当前工程的信息,如:target列表、configuration列表、scheme列表,同时能看到默认的configuration
- -showBuildSettings 查看构建设置
- -showdestinations 仅对workspace有效
- -showsdks 查看SDK列表
- -usage 使用示例
- -version 查看当前版本
xcodebuild 所有指令默认的configuration都是Release
clean
#清理构建目录 默认的configuration为Release
xcodebuild clean
#也可以指定configuration
xcodebuild clean -configuration Debug
build
### 默认构建
xcodebuild build
### 指定configuration
xcodebuild build -configuration Debug
test
test指令需要指定scheme, 同时还需要指定destination。 可以通过-showdestinations指令来获取可用的destination
xcodebuild -showdestinations -scheme demo_xocdebuild
xcodebuild test -scheme demo_xocdebuild -destination "platform=iOS Simulator,name=iPhone 8"
archive
需要注意的archive时要指定scheme才行
#project的archive
xcodebuild archive -scheme demo_xocdebuild -archivePath test
-exportArchive
此指令用于导出ipa包,必填参数archivePath、exportPath、exportOptionsPlist
### option.plist用于指定打包的method等,此文件可以通过用xcode打包后生成
xcodebuild -exportArchive -archivePath test.xcarchive -exportPath test -exportOptionsPlist 'ExportOptions.plist'
利用shell脚本打包
shell脚本示例如下:
#!/bin/sh
### 配置定义
PROJECT_NAME="test"# 获取当前脚本路径
# basepath=$(cd `dirname $0`; pwd)CONFIGURATION="Debug"#工程名
WORKSPACE="demo.xcworkspace"#设置打包路径
PACKAGE_PATH="Package"#archive path
XCARCHIVE_PATH="${PACKAGE_PATH}/xcarchive/${PROJECT_NAME}.xcarchive"#ipa 路径
IPA_Path="${PACKAGE_PATH}/ipa"#ipa名称
IPAFILE_NAME="${PROJECT_NAME}.ipa"#导出ipa路径
EXPORT_PATH="${IPA_Path}/${IPAFILE_NAME}"optionPlistName="ExportOptions_development"# clean
echo "xcodebuild clean"
xcodebuild clean -workspace ${WORKSPACE} \-scheme ${PROJECT_NAME} \-configuration ${CONFIGURATION} \| xcpretty # archive
echo "xcodebuild archive"
xcodebuild archive -workspace ${WORKSPACE} \-scheme ${PROJECT_NAME} \-configuration ${CONFIGURATION} \-destination generic/platform=iOS \-archivePath ${XCARCHIVE_PATH} \| xcpretty # test
xcodebuild test -workspace ${WORKSPACE} \-scheme ${PROJECT_NAME} \-sdk iphonesimulator \-destination 'platform=iOS Simulator,name=iPhone 8' \| xcpretty # export ipa
echo "xcodebuild exportArchive"
xcodebuild -exportArchive -archivePath ${XCARCHIVE_PATH} \-exportPath ${EXPORT_PATH} \-exportOptionsPlist ${optionPlistName}.plist \-verbose \| xcpretty
使用方式,将此脚本放到项目路径下,然后执行即可
sh debug.sh
fastlane 使用与介绍
什么是fastlane?
fastlane是可以自动打包iOS和Android项目的第三方工具,通过简单的配置即可完成打包,还有的功能是实现屏幕截图并上传,上传ipa到testflight,上传ipa到app-store。
在这里我就只介绍iOS方面的使用了,首先需要安装fastlane。
安装fastlane
- 确定安装了最新的xcode命令行工具
xcode-select --install
- 安装fastlane
[sudo] gem install fastlane -NV
使用fastlane
和xcodebuild的使用方式一样,fastlane也需要在项目所有路径使用。首先我们在命令行进入到项目路径,然后初始化fastlane。以下介绍都是基于使用XCode自动创建了证书的情况下来使用,因为这样fastlane自动生成的pp文件才能匹配,否则就需要在gym中显示的指定pp文件。
fastlane init -verbose
初始化后,就可以变成fastlane命令了 示例如下
default_platform(:ios)platform :ios dodesc "Description of what the lane does"lane :test doscan(# workspace: "FinupCredit.xcworkspace",# scheme: "test",devices: ["iPhone 8 Plus"],)endlane :beta do |values|scan(# workspace: "FinupCredit.xcworkspace",devices: ["iPhone 8 Plus"],)v = values[:i]time = Time.new.strftime("%Y%m%d")version = get_version_numberipaName = "debug_#{version}_#{time}_V_#{v}.ipa"gym(clean: true,configuration: "Debug",export_method: "development",output_directory: "./Debug",output_name: "#{ipaName}",)endlane :release do |values|scan(# workspace: "FinupCredit.xcworkspace",devices: ["iPhone 8 Plus"],)v = values[:i]time = Time.new.strftime("%Y%m%d")version = get_version_numberipaName = "release_#{version}_#{time}_V_#{v}.ipa"gym(clean: true,configuration: "Release",export_method: "app-store",output_directory: "./Release",output_name: "#{ipaName}",)end
end
在这里scan和gym分别是fastlane提供的两个action,scan的作用是执行项目中的单元测试,gym则是用来打包的。在这个脚本中我们允许传入变量,用来生成ipa名称。
gym中的。。。也可以指定plist文件,使用方式如下
desc "使用opetionPlist来指定打包配置"lane :useOptionPlist do |values|scan(# workspace: "FinupCredit.xcworkspace",devices: ["iPhone 8 Plus"],)v = values[:i]time = Time.new.strftime("%Y%m%d")version = get_version_numberipaName = "debug_#{version}_#{time}_V_#{v}.ipa"gym(clean: true,configuration: "Release",export_method: "development",output_directory: "./Release",output_name: "#{ipaName}",#指定plist路径export_options: "./ExportOptions_app_store.plist" )end
转载于:https://www.cnblogs.com/pretty-guy/p/9525548.html
【iOS】史上最全的iOS持续集成教程 (上)相关推荐
- 史上最全的iOS面试题及答案
史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...
- 史上最全面的python学生管理系统教程(二)
目录 序言 sqlite使用教程 python sqlite使用教程 数据库构造 学生信息表结构: 教师信息表结构: 课程成绩表结构: 教师添加课程: 学生表连接课程成绩表: 数据库语句了解 sqli ...
- 在CentOS7上安装Drone搭建CI持续集成环境
文章目录 在CentOS7上安装Drone搭建CI持续集成环境 前言 安装前规划 安装过程 配置域名解析 安装Docker 拉取Drone Server镜像 添加GitHub OAuth Applic ...
- python 持续集成 教程_jenkins+python自动化测试持续集成教程
一.首先我们安装Jenkins,我这里采用的是.msi应用程序,根据提示进行安装(傻瓜式),最后会打开默认的网页地址:http://localhost:8080 如果端口有冲突,可以去Jenkins的 ...
- 史上最全的 iOS 各种测试工具集锦
引言: 随着移动互联网的兴起,APP 测试的越来越被重视!Android 系统因为自己的开源性,测试工具和测试方法比较广为流传,但是 iOS 系统的私密性,导致很多测试的执行都有点麻烦. 为了帮助大家 ...
- 新手必看,史上最全的iOS开发教程集锦,没有之一!
最近大火的iPhone XS Max和iPhone XS,不知道有没有同学已经下手了呢?一万三的价位确实让很多人望而却步啊.据说为了赢得中国的用户,专门出了双卡双待的,可想而知中国市场这块" ...
- 史上最全Java面试题全集(上)
转载自 Java面试题全集(上)!(速度收藏) 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有 ...
- iOS开发笔记--超全!iOS 面试题汇总
作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) Object-c的类可以多重继承么?可以实现 ...
- 史上最全的Android开发学习教程集锦【初学者】
根据Google的报告,截止2017年5月为止,Android活跃用户已超过20亿,并还在持续增长中.Android系统在几个主要的市场上已超过了iOS系统,特别是在美国,欧洲和日本,然而苹果确实在中 ...
- 在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境
本文以部署 Spring boot + Maven 项目为例,使用码云作为代码托管仓库,在 CentOS 7 上搭建 Jenkins 持续集成环境. 1. 准备工作 1.1 安装 Java 环境 Je ...
最新文章
- Ural 1018 (树形DP+背包+优化)
- 解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
- cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)
- wpf将文字转化为图形_工程师们开发出将天然气转化为固体的方法
- 计算机技术博客博客知乎,我的技术博客的选择:CSDN、博客园、简书、知乎专栏仍是Github Page?...
- 日志存储 elasticsearch vs clickhouse
- [Tool] SourceTree初始化GitFlow遇到错误(git command not found)的解决方案
- 数模美赛准备——Numpy
- windows winrar 指令_WinRAR命令行参数整理
- 启发式搜索--八数码问题
- mysql 只有一个ibd文件_只有一个ibd文件如何恢复数据表
- web页面播放实时视频流
- wpf 窗体翻页效果
- 第十二章 牛市股票还会亏钱-外观模式(读书笔记)
- 【调剂】黑龙江大学电子工程学院-王国涛副教授课题组招收2021级硕士研究生(调剂生)...
- 腾讯游戏开发工程师:Linux 机器 CPU 毛刺问题排查
- 研发管理--测试绩效管理
- 观察者模式——应聘者和应聘公司的关系
- 团队-中国象棋游戏-模块测试过程
- 我的世界服务器修改武器合成表,我的世界武器合成表大全 我的世界武器怎么合成...
热门文章
- Altera Quartus 13.1 仿真工具路径错误问题解决 Can‘t launch the ModelSim-Altera software
- QT语言家实现软件中英文切换
- 学业水平考试计算机成绩查询入口,2018广东学业水平考试成绩查询入口
- 【MySQL】内连接,外连接,自连接(详解)
- 火影推荐程序连载23-Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计
- uniapp开发app下载模板功能
- 微信群发红包原理 计算机,微信红包群发中隐藏着一个很多人不知道的小秘密...
- 多人对战游戏开发实例之《组队小鸡射击》(附源码)
- 我的世界java版启动失败或闪退_我的世界无法正常启动、崩溃(Crash)等常见问题...
- Laravel Mix