上一篇有讲关于fastlane自动化部署,本篇将会着重讲关于fastlane的实际应用。
目标:
- 利用自动化jenkins打包工具,自动拉取git仓库代码
- 不需要通过手动
检查修改
xcode中项目配置修改(provisioning,codesigning) - 支持多渠道(chanel,appstore,enterprise,develop,adhoc)
- 支持一键上传appstore(首次需要输入账户,密码)
- 企业版本自动上传序号dsym文件到对应平台(fir的hdbug平台)
创建fastlane文件
进入项目目录在终端输入fastlane init命令,会要求输入Apple ID信息按照提示输入即可,选择是否deliver等初始化工作按照上篇讲解即可。操作完成即可看到下图所示的基本内容,下面会对图中文件一一讲解:
fastlane源码解析
一. 统一管理fastlane操作脚本文件
1.外界控制版本号,并且控制渠道AdHoc AppStore Develop InHouse
1234 | versionNumber=$2 # 1.0.0outLaneName=$1 #"AdHoc AppStore Develop InHouse"其中的一种,外界传入curDir=`pwd`distDir="$curDir/build" |
2.根据外界传递的数据控制,调用fastlane的lane操作
123456789 | basicLanes="AdHoc Release Develop InHouse"for laneName in $basicLanesdoif [ $outLaneName == $laneName ]thenecho "outer setValue is:$outLaneName"fastlane $laneName version:$versionNumberfidone |
二. Appfile文件修改
1.同一个app,appfile控制渠道(appstore非appstore的)。当然也可以通过控制多个app区分不同的lane即可
123456 | app_identifier "com.tww.test" # App Store的版本的app_idendifierapple_id "2501046883@qq.com" # 对应的账号appidfor_lane :InHouse do #企业及账号的app_identifier "com.tww.test.enterprise" # 企业及账号app_idendifierapple_id "2501046883@qq.com"" # 对应的账号的密码end |
三. Deliverfile文件修改
1.上传appstore的deliver文件
12 | app_identifier "com.tww.test" # The bundle identifier of your appusername "2501046883@qq.com" # your Apple ID user |
四. Fastfile文件修改
1.修改app identifier(就是bundle id,例如:com.husor.beibei)注意xcode7.0以上苹果改了CFBundleIdentifier or PRODUCT_BUNDLE_IDENTIFIER
12345 | update_app_identifier( xcodeproj:PROJECT_FILE_PATH ,#project路径 plist_path:"#{PLIST_FILE_PATH}" ,#plist文件的路径 app_identifier:app_id) |
2.修改team(teamid)
1234567 | def prepare_update_project_team(team_id) update_project_team( path:PROJECT_FILE_PATH, teamid: "K4W62VQT27" )end |
3.修改info_plist(就是bundle id,例如:com.tww.test)
12345678 | def prepare_update_info_plist(app_id) update_info_plist( xcodeproj:PROJECT_FILE_PATH , plist_path:"#{PLIST_FILE_PATH}" , app_identifier:app_id )end |
4.修改版本号和build号(修改为外部传入的版本,例如:1.0.0和100)
123456789101112131415 | def prepare_version(options) #say 'version number:' #say options[:version] increment_version_number( version_number: options[:version], xcodeproj: PROJECT_FILE_PATH, ) #say 'build number:' #say options[:build] increment_build_number( build_number: options[:version], xcodeproj: PROJECT_FILE_PATH, )end |
5.修改签名的配置,配置对应的provision file,事先将个provisioning放入provision文件内容,关于怎么找到对应的provison可以通过xcode配置正确后,查看project文件(/Users/tianww/Library/MobileDevice/Provisioning Profiles/)找到后复制到这里。
123456789101112131415 | def prepare_version(options) #say 'version number:' #say options[:version] increment_version_number( version_number: options[:version], xcodeproj: PROJECT_FILE_PATH, ) #say 'build number:' #say options[:build] increment_build_number( build_number: options[:version], xcodeproj: PROJECT_FILE_PATH, )end |
6.编译打包为ipa使用gym,当然首先要安装gym。
123456789101112131415161718 | def generate_ipa(typePrefix,options,exportMethod,codeSignID) #say 'generate ipa' fullVersion = options[:version]gym( workspace: './BeiBeiAPP.xcworkspace', configuration: "#{typePrefix}", scheme: "#{SCHEME_NAME}", output_directory: "./build", output_name: "#{APP_NAME}.ipa", archive_path: './build/', clean: true, codesigning_identity: "#{codeSignID}", provisioning_profile_path: "./fastlane/provision/#{typePrefix}.mobileprovision", include_symbols: 'true', include_bitcode: 'false', export_method: "#{exportMethod}" )end |
或者使用shenzhen ,但是发现使用shenzhen比gym的要大
1234567891011121314 | def generate_ipa(typePrefix,options,exportMethod,codeSignID) #say 'generate ipa' fullVersion = options[:version] + '.' + options[:build] channelId = options[:channel_id] ipa( configuration: typePrefix, scheme:"#{SCHEME_NAME}", clean: true, destination:"./build", ipa:"#{APP_NAME}_#{fullVersion}_#{typePrefix}.ipa", archive:false )end |
7.构建不同的lane,处理不同的包。
12345678910111213 | # 企业版 证书打包 desc "InHouse by personal apple account" lane :InHouse do |options| typePrefix = 'InHouse' exportMethod = 'enterprise' codeSigningIdentify = 'iPhone Distribution:tww' prepare_version(options) update_provision(typePrefix) prepare_update_project_team('K4W62VQT27') prepare_update_app_identifier("#{INHOUSE_IDENTIFIER}") prepare_update_info_plist("#{INHOUSE_IDENTIFIER}") generate_ipa(typePrefix,options,exportMethod,codeSigningIdentify) end |
参考
fastlane actions所有的actions的详细讲解。当然我们也可以在terminate中输入以下命令:
12
fastlane actions(会列出所有的action)fastlane action deliver(单独详细的列出deliver的action对应的所有的内容)
- 使用fastlane实现iOS持续集成
- gym actions,关于gym中选择命令
来源:https://www.cnblogs.com/lijianming180/p/12258918.html