无奈使用了fastlane,现在Xcode可以自动管理证书了,所以应声而出就是不用繁琐签名打包的工具,说到工具,fastlane不得不说,简直就是一系列工具,提供打包、上传App Store,甚至可以自动生成屏幕截图,针对多语言支持的应用简直就是福利,多得不说了,来理一理坑。
1:首先要说的就是权限,当fastlane打包过程中出现Permission denied�
的时候,就需要注意了,jenkins属于系统的一个子账号,所以权限大受限制。
&(JENKINS_HOME)/workspace/
下所有文件需要挂在读写权限,
将所有用户设定为读与写。
不要忘了设置下目录下所有文件都同时更新全新:
2:另外就是涉及到一个执行最后的时候,出现code sign失败导致archive失败,这个需要在jenkins Excuse Shell 开始加入解锁keychain的命令,不然默认jenkins会打不开钥匙串也拿不到证书,这个错误就特别的简单,简单的无理取闹!
security unlock-keychain -p 系统密码 $HOME/Library/Keychains/login.keychain
3:如果涉及到字符集错误,需要在jenkins Excuse Shell 开始设定命令行字符集命令:
export LANG="en_US.UTF-8"</code>
给个示例:
cd ${JENKINS_HOME}/workspace/
security unlock-keychain -p wuqiong $HOME/Library/Keychains/login.keychain
export LANG="en_US.UTF-8"
fastlane adhoc_build
以上是我们项目构建的时候必要的命令,另外贴上fastfile内容,给你们做个参考:
# 定义fastlane版本号
fastlane_version “2.46.1”
# 定义打包平台
default_platform :ios
def updateProjectBuildNumber
currentTime = Time.new.strftime("%Y%m%d")
build = get_build_number()
if build.include?"#{currentTime}."
# => 为当天版本 计算迭代版本号
lastStr = build[build.length-2..build.length-1]
lastNum = lastStr.to_i
lastNum = lastNum + 1
lastStr = lastNum.to_s
if lastNum < 10
lastStr = lastStr.insert(0,"0")
end
build = "#{currentTime}.#{lastStr}"
else
# => 非当天版本 build 号重置
build = "#{currentTime}.01"
end
puts("*************| 更新build #{build} |*************")
# => 更改项目 build 号
increment_build_number(
build_number: "#{build}"
)
end
def upload_pgyer
pgyer(api_key: “1dfa01bc013314b3d0e790e52e3f529f”, user_key: “bf680401a152800709dec9beb1437f93”)
end
#指定项目的scheme名称
scheme=“ZIM2”
# 任务脚本
platform :ios do
lane :development_build do|options|
branch = options[:branch]
puts “开始打development ipa”
updateProjectBuildNumber #更改项目build号
# 开始打包
gym(
#输出的ipa名称
output_name:”#{scheme}”,
# 是否清空以前的编译信息 true:是
clean:true,
# 指定打包方式,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"development",
# 指定输出文件夹
output_directory:"./fastlane/build",
)
puts "开始上传蒲公英"
# 开始上传蒲公英
upload_pgyer
end
lane :adhoc_build do|options|
branch = options[:branch]
puts “开始打adhoc ipa”
updateProjectBuildNumber #更改项目build号
# 开始打包
gym(
#输出的ipa名称
output_name:”#{scheme}”,
# 是否清空以前的编译信息 true:
clean:true,
# 指定打包方式,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"ad-hoc",
# 指定输出文件夹
output_directory:"./fastlane/build",
)
puts "开始上传蒲公英"
# 开始上传蒲公英
upload_pgyer
end
end
在这个基础上可以继续加入一键构建上传App Store的功能,可以打出不同环境的包,可以打出不同证书的ipa和修改info.plist文件做到渠道包一键制作,没做深究,下次有需求在琢磨。