Jenkins之IOS xcode-fastlane打包上传蒲公英或者Appstore

1.基础准备

蒲公英账号
Apple开发者账号
Ruby/brew
MAC系统更新到最新
Xcode与开发保持一致10.1
rvm 来下载Fatalane  2.12.x以上
Jenkins 2.150.1
蒲公英插件pgyer(可以安装,也可直接用蒲公英Linux命令上传)
Brew 来下载 cocoPod 
Sed要更换为gnu版本,最新的可能命令为gsed
修改gem源为国内https://gems.ruby-china.com

2.fastlane打包方式

1):可能需要提供的文件
在这里插入图片描述2):fastlane的包到appstore

在这里插入图片描述**注意:**0.2.到最新代码目录及下载依赖不用赘述,3.配置build_id自增上传appstore不重复不冲突的作用 ,具体思路就是每次+1 替换到Info.plish文件中。 4.就是fastlane 用release方式打包,需要开发配置证书之类上传appstore。 其他环境用fastlane beta打包dev/test/uat等环境上传蒲公英。

3):fastlane打包到dev/test/uat脚本

```bash
#0.git pull lastest
cd ~/application/HealthStore
#撤销本地修改的操作
git checkout . 
#更新为当前分支最新代码
git pull
echo "git pull success"
#拉去远程分支到本地,若本地已经存在,则直接git checkout
#切换本地分支
local_version=`git branch`
[[ ${local_version} =~ $version ]] && git checkout $version || git checkout -b $version origin/${version}

#下载依赖
pod install
#merge 最新分支
#git merge origin/1.3.0-04.08
#echo "git merge success"


######################################
#static var base = BaseUrlEnum.test.rawValue  //测试环境
#static var base = BaseUrlEnum.uat.rawValue   //uat环境
#static var base = BaseUrlEnum.prod.rawValue  //生产环境
######################################

#1.替换配置文件
#cd HealthStore/Tools/Network/
#cp GMNetworkUrl.swift GMNetworkUrl.swift.bak

#根据环境,需要替换的部分
cd  ~/application/HealthStore/HealthStore/Tools/Network
str=`grep -n "static var base" GMNetworkUrl.swift|cut -d ":" -f 1`                          
arr=(${str// / })
firstnum=${arr[0]}
#lastnum=${arr[${#arr[*]}-1]}

#插入需要打包的环境
echo $iosenv

str_iosenv="static var base = BaseUrlEnum.${iosenv}.rawValue"
echo ${str_iosenv}

gsed -i "${firstnum}a  ${str_iosenv}" GMNetworkUrl.swift


#删除指定行
#sed -i "${firstnum},${lastnum}d" GMNetworkUrl.swift
gsed -i "${firstnum}d" GMNetworkUrl.swift


#2.修改打包说明
description="\"$DES\""
echo $description

des="update_app_description=${description}"
echo $des

cd ~/application/HealthStore/fastlane
#替换fastfile文件的发版说明
gsed -i "1a ${des}" Fastfile
gsed -i "1d" Fastfile


#3.进行打包上传操作
cd ~/application/HealthStore 
echo "22222222222222222222222222222"
fastlane beta
echo "build success! look to pgy...."
```

3.xcode打包方式

注:因为fastlane cocopod等经常更新等不稳定问题,改为xcode方式打包,所以Jenkins所在机器必须要安装Xcode

在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描在这里插入图片描述注意:这里根据项目具体情况来切分不同环境,1.pod复制过来是为了加快下载依赖,2.3.4都是用gsed来替换或者删除来切换环境
5.进行xcode打包并上传蒲公英的脚本如下:

	```bash
	# !/bin/bash
	
	# 手动打包使用方法:
	# Step1 : 将Automation整个文件夹拖入到项目根目录
	# Step2 : 打开AutoPackageScript.sh文件,修改 "项目自定义部分", 配置好项目参数
	# Step3 : 打开终端, cd到Automation文件夹 (ps:在终端中先输入cd, 直接拖入HSBAutomation文件夹, 回车)
	# Step4 : 输入命令: "sh AutoPackageScript.sh" 回车, 开始执行此打包脚本
	
	
	# ===============================项目自定义部分(自定义好下列参数后再执行该脚本)============================= #
	
	# 计时
	SECONDS=0
	# 是否编译工作空间 (例:若是用Cocopods管理的.xcworkspace项目,赋值true;用Xcode默认创建的.xcodeproj,赋值false)
	
	
	# 指定项目的scheme名称
	# (注意: 因为shell定义变量时,=号两边不能留空格,若scheme_name与info_plist_name有空格,脚本运行会失败)
	scheme_name="HealthStore"
	
	# 工程中Target对应的配置plist文件名称, Xcode默认的配置文件为Info.plist
	info_plist_name="pgy_export"
	
	# 指定要打包编译的方式 : Release(appstore),Debug(内测包)
	#build_configuration="Release"
	
	build_configuration="Debug"
	
	
	# ===============================自动打包部分(如果Info.plist文件位置有变动需要修改"info_plist_path")============================= #
	
	# 导出ipa所需要的plist文件路径 (默认打企业包: "pgy_export.plist", 如果需要打包上传AppStore则是: "appstore_export.plist")
	#ExportOptionsPlistPath="~/application/tools"
	
	# 返回上一级目录,进入项目工程目录
	#cd  /Users/yangzhao/application/HealthStore
	
	# 获取项目名称
	project_name=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
	
	# 获取Info.plist路径,拿到版本号, 编译版本号, BundleID
	info_plist_path="/Users/yangzhao/application/tools/${info_plist_name}.plist"
	
	
	#时间戳
	formattedDate=$(date "+%F-%H:%M:%S")
	
	# 指定输出ipa名称 : scheme_name + formattedDate
	ipa_name="${scheme_name}"
	
	# 删除旧.xcarchive文件
	
	# 指定输出ipa路径
	export_path="/Users/yangzhao/Desk/archive/${build_configuration}/${scheme_name}_${formattedDate}"
	
	# 指定输出归档文件地址
	export_archive_path="$export_path/$ipa_name.xcarchive"
	
	# 指定输出ipa地址
	export_ipa_path="$export_path"
	
	
	# AdHoc,AppStore,Enterprise三种打包方式的区别: http://blog.csdn.net/lwjok2007/article/details/46379945
	#method="app-store"
	method="ad-hoc"
	
	
	echo "[*************************  开始构建项目  *************************]"
	# 指定输出文件目录不存在则创建
	if [ -d "$export_path" ] ; then
		echo $export_path
	else
		mkdir -pv $export_path
	fi
	
	
	# 判断编译的项目类型是workspace还是project
	# 编译前清理工程
	xcodebuild clean -project ${project_name}.xcodeproj \
						 -scheme ${scheme_name} \
						 -configuration ${build_configuration}
	
	xcodebuild archive -workspace ${project_name}.xcworkspace \
						   -scheme ${scheme_name} \
						   -configuration ${build_configuration} \
						   -archivePath ${export_archive_path}
	
	
	#  检查是否构建成功
	#  xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
	if [ -d "$export_archive_path" ] ; then
	echo "[项目构建成功 ] "
	else
	echo "[项目构建失败 ] "
	exit 1
	fi
	
	
	echo "[*************************  开始导出ipa文件  *************************]"
	xcodebuild  -exportArchive \
	            -archivePath ${export_archive_path} \
	            -exportPath ${export_ipa_path} \
	            -exportOptionsPlist ${info_plist_path}
	
	# 检查文件是否存在
	if [ -f "$export_ipa_path/$ipa_name.ipa" ] ; then
		echo "导出 ${ipa_name}.ipa 包成功 ]"
	else
		echo "[导出 ${ipa_name}.ipa 包失败 ..]"
	
	fi
	# 输出打包总用时
	echo "[使用Automation打包总用时: ${SECONDS}s]"
	
	
	
	# ============================上传到蒲公英部分(如需修改请自行替换蒲公英API Key和User Key)================================ #
	
	echo "[*************************  上传到蒲公英  *************************]"
	cd  $export_path
	
	# 蒲公英上的User Key
	uKey="xxxxxx"
	 
	# 蒲公英上的API Key
	apiKey="xxxxxx"
	 
	# 要上传的ipa文件路径
	IPA_PATH="$export_ipa_path/$ipa_name.ipa"
	 
	# 蒲公英下载密码
	PASSWORD="111111"
	
	MSG=$1
	 
	# 执行上传至蒲公英的命令
	echo "[************************* uploading *************************]"
	
	curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}" -F "buildInstallType=2"  -F "buildPassword=${PASSWORD}" http://www.pgyer.com/apiv2/app/upload
	```

在这里插入图片描述

4.其他注意

1):先根据fastlane的包方式,或者区分环境来进行打包。

2):可以考虑直接用xcode原生命令来打包。

#可能需要用到的脚本:  pgy_export.plish(打包所需 *.plish文件)   build_id.sh(上传appstore需要用到,数字每次+1)    GMNetworkUrl+environment.swift(ios切换环境的代码部分)

```bash
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>compileBitcode</key>
	<false/>
	<key>method</key>
	<string>ad-hoc</string>
	<key>signingStyle</key>
	<string>automatic</string>
	<key>stripSwiftSymbols</key>
	<true/>
	<key>teamID</key>
	<string>2RS856R568</string>
	<key>thinning</key>
	<string>&lt;none&gt;</string>
</dict>
</plist>
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins集成IOS全自动打包可以使用Jenkins Pipeline来实现。下面是一些基本步骤: 1. 安装JenkinsiOS插件:确保您的Jenkins服务器已经安装并配置好Jenkins,并且已经安装了相关的iOS插件。 2. 创建Pipeline:在Jenkins中创建一个新的Pipeline,用于自动化IOS打包过程。 3. 配置环境:在Pipeline中配置所需的构建环境,包括iOS开发环境、模拟器等。 4. 编写脚本:使用Jenkins Pipeline的Groovy语言编写脚本,实现IOS自动打包的过程。可以使用Xcode命令行工具来执行打包操作,例如使用`xcodebuild`命令。 以下是一个简单的示例脚本,用于自动化IOS打包过程: ```groovy stage('Build') { steps { sh 'xcodebuild -project YourProject.xcodeproj -scheme YourScheme -configuration Release clean build' } } stage('Archive') { steps { archiveFile(file: 'YourApp.ipa', pattern: '**/*.ipa') { sh 'xcodebuild -exportArchive -archivePath build/Release-iphoneos/YourScheme.ipa -exportOptionsPlist export.plist -allowProvisioningUpdates' } } } ``` 这个脚本会在构建阶段使用`xcodebuild`命令清理并构建项目,并在归档阶段使用`xcodebuild`命令导出ipa文件。您可以根据需要修改脚本中的命令和参数,以适应您的项目配置。 5. 触发Pipeline:在Jenkins中配置相应的触发器,例如触发器时添加iOS项目目录作为输入源,然后在Jenkins Pipeline中自动执行打包操作。 以上是一些基本步骤,您可以根据您的实际需求进行调整和扩展。请注意,自动打包过程可能需要一些额外的配置和步骤,具体取决于您的项目和开发环境。另外,为了确保自动打包过程的可靠性,您可能需要测试和验证脚本,以确保它在不同的环境中都能够正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值