Jenkins iOS打包我目前了解的几种方式:
1.使用jenkins xcode 插件,对应的要添加证书和描述文件,然后对应的填写构建参数。
2.使用jenkins xcodebuild + xcrun命令 这里我只简单写一些常用的方法 ,中间会遇到xcode一个文件丢失的问题, xcode 9 之后有个文件被移除掉了,这两种方式我就不展开了,想要使用的请自行搜索查下,网上也有很多教程。(下面代码转自手把手教你利用Jenkins持续集成iOS项目)
# 工程名
APP_NAME="YourProjectName"
# 证书
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Shanghai ******* Co., Ltd."
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
//下面2行是没有Cocopods的用法
echo "=================clean================="
xcodebuild -target "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"
使用fastlane 打包,个人觉得是更方便管理,更容易操作。
Fastlane 的使用,网上已经有很多教程了,我只写一下自己遇到的坑点和总结。其实跟我们安装Cocoapods挺类似的,基本上你装过Pod,环境就基本好了,例如ruby环境,你只需要了解的就是Fastlane 的一些Action。
如果环境安装失败,请移步查看
Rvm + Ruby +Gem 相关命令
下面是自己写的一个 fastfile 文件
# 定义fastlane版本号
fastlane_version "2.111.0"
# 定义打包平台
default_platform :ios
# 任务脚本
platform :ios do
#开始前操作
before_all do
end
desc "Jenkins版本打包"
lane :YLAPP do |options|
#target
target = options[:target]
#scheme
scheme = options[:scheme]
#configuration 可以不指定
# configuration = options[:configuration]
#时间暂时没用到
currentTime = Time.new.strftime("%Y%m%d%H%M")
#修改版本号为打包buildNumber
increment_build_number(
build_number: options[:build_number]
)
#获取target 版本号
version_number = get_version_number(target: "#{target}")
#获取buildNumber
build_number = get_build_number(xcodeproj: "#{target}.xcodeproj")
#输出方式如果企业包打包方式改为企业打包
export_method = "ad-hoc"
if target == "Enterprise" then
export_method = "enterprise"
end
# 开始打包
gym(
#输出的ipa名称
output_name:"#{scheme}.ipa",
# 隐藏没有必要的信息
silent: true,
# 是否清空以前的编译信息 true:是
clean:true,
#scheme
scheme: "#{scheme}",
# 指定打包方式,Release Debug Test 未指定就按照scheme 指定的configuration
# configuration:"#{configuration}",
# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"#{export_method}",
# 更新描述
export_xcargs: "-allowProvisioningUpdates",
#是否包含调试符号
include_symbols: false,
#是否开启bitcode
include_bitcode: false,
# 指定输出文件夹
output_directory:"~/build/#{scheme}/#{version_number}/#{build_number}/",
)
#上传到firim
firim(firim_api_token: "******************************")
end
#结束后的操作
after_all do |lane|
# This block is called, only if the executed lane was successful
# slack(
# message: "Successfully deployed new App Update."
# )
end
error do |lane, exception|
# slack(
# message: exception.message,
# success: false
# )
end
end
一些常Action Tips
#添加版本插件
fastlane add_plugin versioning
# 以下两个action来自fastlane-plugin-versioning,
# 第一个递增 Build,第二个设定Version。
# 如果你有多个target,就必须指定target的值,否则它会直接找找到的第一个plist修改
increment_build_number_in_plist(target: 'targetName')
#增加build版本
increment_build_number(
xcodeproj: 'personProject',
build_number: "#{build}",
)
increment_version_number_in_plist(
target: 'target',
version_number: '1.0'
)
#指定描述文件
export_options: {
provisioningProfiles: {
"com.test.conner" => "ios_dis",
}
},
#添加firim 上传插件
fastlane add_plugin firim
# 上传firim
firim(firim_api_token: "此处填写fir的用户token"),
#添加pgyer
fastlane add_plugin pgyer
# 上传蒲公英
pgyer(api_key: "11111122222233333444444", user_key: "111122233344455555", update_description: "#{option[:desc]}")
#提交到testFlight
pilot(
#忽略等待包上传成功
skip_waiting_for_build_processing: true,
)
#常用参数:
scheme :#指定打的哪个scheme
project :#指定project (未使用cocopods)
workspace #:指定workspace (使用cocopods)
clean :#打包前clean
xcargs : #附加一些参数传递给xcodebuild 如: xcargs: 'DEBUG_INFORMATION_FORMAT="dwarf-with-dsym"',
export_method :#出包方法 app-store, ad-hoc, package, enterprise, development
configuration : #指定构建App的配置 Release、Debug、自定义
output_directory : #输出目录
output_name :#输出名称
include_symbols :#是否包含调试符号
include_bitcode :#是否开启bitcode
相关文章:
持续化集成(一):Jenkins安装
持续化集成(二):Jenkins 常用配置
持续化集成(三):Jenkins + Fastlane 打包