jekins 打包:shell 脚本动态修改打包参数

前沿说明:专职ios开发的,不擅长打包脚本这些。最近公司有多租户的打包需求(一套代码可以打不同的包,切换不同的Icon或者启动图),领导安排我试试,实在不行找运维帮忙,咱这小白就接过来了,必应来必应去的,还真摸索出来了。

下面就是shell脚本动态修改bundleId,prodfile,Icon的方法。

仅供参考,实际项目你需要根据你的项目路径来改shell脚本!!!
bash 复制代码
#编译工程文件
echo "############################################"
configFile=$WORKSPACE/AppWorkName/MainResources/Plist/configFile.plist
sed -i "" "s#WebUrl_Value#"$WebUrl"#" $configFile

这是替换项目中配置文件里面的参数方法,$WORKSPACE实际上是你的项目路径,这是写在jenkins里面的shell脚本,是相对路径,你也可以写成绝对路径。 如图所示:

下面是修改xcode配置参数:
bash 复制代码
echo "+++Source reset...\n"
pwd
echo "+++++++++++++++更新 build 信息+++++++++++++++++++++++++"
echo "更换的bundleId"
APP_BUNDLE_ID="com.zzila.test"
desplay_name='桌面名字'
buildFile=$WORKSPACE/$APP_TARGET/$APP_TARGET/"$APP_TARGET"-Info.plist 
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName $desplay_name" $buildFile
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $APP_BUNDLE_ID"

参数解释:APP_TARGET是你的项目名字, W O R K S P A C E / WORKSPACE/ WORKSPACE/APP_TARGET/ A P P T A R G E T / " APP_TARGET/" APPTARGET/"APP_TARGET"-Info.plist这个就是你项目原始的info.plist文件,这个buildFile就是相对路径,jenkins的打包相对路径。另外一定要注意就是项目的info.plist文件,很关键。 如果你的info.plist文件里面没有如下参数,你可以手动添加,如图所示:

bash 复制代码
echo "描述文件的uuid"
APP_PROFILE_UUID="test--111111111"
echo "更换的bundleId"
APP_BUNDLE_ID="com.zzila.test"
echo "描述文件的名字"
$APP_PROFILE_NAME="product.dis"
#这个是project.pbxproj文件的配置路径,你可以打开此文件看看里面的描述文件,你就明白了替换原理
pbxprojFile=$WORKSPACE/$APP_TARGET.xcodeproj/project.pbxproj
echo "+++++++++$pbxprojFile++++++++++"

sed -i -e 's/PRODUCT_BUNDLE_IDENTIFIER\ =\ .*/PRODUCT_BUNDLE_IDENTIFIER\ =\ ''"'"$APP_BUNDLE_ID"'"''\;/' $pbxprojFile
sed -i -e 's/PROVISIONING_PROFILE\ =\ .*/PROVISIONING_PROFILE\ =\ ''"'"$APP_PROFILE_UUID"'"''\;/' $pbxprojFile
sed -i -e 's/PROVISIONING_PROFILE\[sdk=iphoneos\*\]\"\ =\ .*/PROVISIONING_PROFILE\[sdk=iphoneos\*\]\"\ =\ ''"'"$APP_PROFILE_UUID"'"''\;/' $pbxprojFile
sed -i -e 's/PROVISIONING_PROFILE_SPECIFIER\ =\ .*/PROVISIONING_PROFILE_SPECIFIER\ =\ ''"'"$APP_PROFILE_NAME"'"''\;/' $pbxprojFile
sed -i -e 's/PROVISIONING_PROFILE_SPECIFIER\[sdk=iphoneos\*\]\"\ =\ .*/PROVISIONING_PROFILE_SPECIFIER\[sdk=iphoneos\*\]\"\ =\ ''"'"$APP_PROFILE_NAME"'"''\;/' $pbxprojFile

上一步已经动态修改了bundleId,ios的都知道打包还需要选择描述文件,这个方法就是动态的修改描述文件。至此修改完成,打一下包,你可以查看project.pbxproj文件看是否替换ok,如果有报错根据报错信息修改路径问题,或者参数问题。

替换icon的方法也是一样,我采用的是预置icon资源文件到项目,打包的时候根据参数去替换。
bash 复制代码
echo "replacement resource file begin"
newResourcesFile=$WORKSPACE/res/icon/ios/filename/
oldResourcesFile=$WORKSPACE/platforms/ios/$APP_TARGET/Images.xcassets/
#替换方法
cp -R $newResourcesFile $oldResourcesFile
echo "*********complete*********"

参数说明:newResourcesFile 预置的icon存放路径,oldResourcesFile是初始icon路径,替换掉就可以了。 //jenkins补充 ######今天领导又提出了一个打包的需求,就是通过shell脚本命令切换xcode,然后必应来必应去,也没好的方法,最后还是chatgpt解决了,遇到的问题就是sudo的时候需要密码,对shell命令不熟悉,所以chatgpt完美解决了我的问题。

perl 复制代码
#xcode版本
xcodeversion='14.2' 
#xcode路径
xcode_path="/Applications/Xcode${xcodeversion}.app"
# 设置系统密码
password="xxxxxx"
# 使用xcode-select命令切换Xcode版本
# 使用echo和管道将密码传递给sudo命令
echo "$password" | sudo -S xcode-select -switch "$xcode_path"
# 打印切换后的Xcode版本信息
xcode-select -p

如果用 jenkins打包,其实系版本的 jenkins 可以直接配置 xcode 打包,不需要再写 shell脚本打包了,shell 脚本写的主要是上传操作,上传 ipa 文件到指定的服务器(或者蒲公英)生成二维码。 详细的配置会总结在下一篇文章里面。

相关推荐
mldong3 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排3 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60614 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角5 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!5 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰5 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi7 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen7 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马8 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒8 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端