1,安装xcode命令行工具
命令:
xcode-select --install
结果如图,提示为 xcode-select: error: command line tools are already installed, use "Software Update" to install updates,表示我已经安装过了。如果没安装会提示安装。
2.安装Fastlane
命令如下,选一种即可;
gem的安装方式:
sudo gem install fastlane -NV
brew的安装方式:
brew cask install fastlane
我采用brew 的安装方式,brew cask install fastlane
如果如下图:让我们重起终端,就可以用fastlane
3.初始化fastlane
3.1 打开你的工程目录 (注意:是工程目录,shopeone-app-ios是你的工程名字)
cd /Users/xiehewanbang/Desktop/other/shopeone-app-ios
cd 后面是你自己的工程路径:不要弄错啦,不要复制命令。
3.2 fastlane初始化命令
命令:
fastlane init
结果:会让我们选择 ,我这里选择4,手动管理证书的打包方式。其他方式后续再讲。
结果:bundle update卡住啦 !没遇到就跳过吧;
解决:gem sources 看一下gem资源url ,把url换成国外地址
注意:有的人说是用中国地址不会卡,我用的外国地址不会卡。什么原因你懂的,如果不行可以再换回来。
1.增加外国地址
gem sources --add https://rubygems.org
2.删除gem 中的国内地址
gem sources --remove https://gems.ruby-china.com/
3.再次执行 fastlane init
fastlane init
结果没问题如图:
4.fastlane命令文件的配置。
我的是上传到PuGongYing的测试包。所以就以这个为例子吧。
其中metadata和screenshots分别对应App元数据和商店应用截图。
Appfile主要存放App的apple_id team_id app_identifier等信息
Deliverfile中为发布的配置信息,一般情况用不到。
Fastfile是我们最应该关注的文件,也是我们的工作文件。
4.1我们打开Fastfile 的文件把文件编辑成如下代码,如图:
default_platform(:iOS)
platform :iOS do
desc "XX测试包"
lane :xiaoguoDebug do |options|
appName = "xiaoguo"
dateString =`date '+%Y%m%d_%H%M%S'`
schemeName = "#{appName}"
workspaceName = "#{appName}.xcworkspace"
profileName = "xiaoguo_profile_dev"
gym(
clean:true, #打包前clean项目
export_method: "development", #导出方式
scheme:"#{schemeName}", #scheme
workspace: "#{workspaceName}", # 自己项目名称xcworkspace(使用cocoapods才会生成)
configuration: "Debug",#环境
output_directory:"/Users/xiehewanbang/Desktop/打测试包/DEBUG_Package",#ipa的存放目录
output_name:"#{schemeName}_#{dateString}_DEBUG.ipa",
export_xcargs:"-allowProvisioningUpdates",#访问钥匙串
export_options: {
provisioningProfiles: {
"bundleid" => "#{profileName}" # bundleid,打包用的证书名字
}
}
)
#蒲公英的配置 替换为自己的api_key和user_key
pgyer(
api_key:"",
user_key:"",
#password: "123456", # 密码
#install_type: "2"
update_description: options[:desc]#"description" # 本次测试更新的文字说明(参数设置)
)
end
end
重要的事情说三遍:
记得保存!
记得保存!
记得保存!
4.2 安装蒲公英插件,命令如下
fastlane add_plugin pgyer
a 中间提示,输入y即可
b 中间提示,输入输入开机密码:
输入自己的开机密码
5 打包命令执行方式
5.1打包方式一:命令打包
直接命令如下:
fastlane xiaoguoDebug desc:自动打包
说明:
1.xiaoguoDebug 为lane 的名字
2.desc:自动打包 为打包的描述
3.注意:xiaoguoDebug 为你的lane 的名字,就是4.1中这个句话中 lane :xiaoguoDebug do |options|
中的xiaoguoDebug 。这两个xiaoguoDebug 必须要一致。
这样的话每次打包都需要执行 fastlane xiaoguoDebug desc:自动打包,有的同学感觉很烦,有的时候很容易出错。如果,觉得不烦躁的话,我们的文章就到这里吧。如何还想改进,可以看5.2
5.2 打包方式二:shell执行脚本打包--双击脚本即可
5.2.1 shell脚本配置 (1,2 步)
1 .打包的命令 sell脚本建立:
随便找一个路径作为脚本存放的路径(我建立了一个文件夹fastlane打包)执行命令:
touch xiaoguo.sh
这样就建立一个名字为shell 的脚本,如图:
2.打开xiao guo.sh (随便什么工具都行,Xcode,subline Text),在脚本写入
#!/bin/sh
# 获取当前脚本所在目录
script_dir="$( cd "$( dirname "$0" )" && pwd )"
#打包工具中lane 的名字
lane_name="xiaoguoDebug"
#工程所在的路径
project_dir="/Users/xiehewanbang/Desktop/other/shopeone-app-ios"
#打包工具所在的路径
fastFile_dir=$project_dir/fastlane
#更新提示文件路径
updateFile_dir=$script_dir/desc
#更新提示文件名字
updateFile_name="update_desc"
#更新提示文件:当前打包工程 对应的 更新内容
project_DesKey="xiaoguo"
# 判断要压缩结果路径是否存在
if [ -d "$project_dir" ] ; then
echo "\033[32;1m----😄😄${project_dir}路径存在可以打包 \033[0m"
else
echo "\033[31;1m------打包的路径: ${project_dir} 不存在😂😂😂 \033[0m"
exit 0
fi
JQ_EXEC="which jq"
#打开升级提示所在的路径
cd $updateFile_dir
# 判断要压缩结果路径是否存在
FILE_PATH="${updateFile_name}.json"
if [ -f "$FILE_PATH" ] ; then
echo "\033[32;1m----${FILE_PATH} 更新提示文件存在 嘎哈哈 \033[0m"
else
echo "\033[31;1m------${FILE_PATH} 更新提示文件 不存在😂😂😂 \033[0m"
exit 0
fi
update_desc_String=$(cat $FILE_PATH|jq .${project_DesKey}.update_desc)
echo "更新提示内容--------${update_desc_String}"
#打开打包脚本所在的路径
cd $fastFile_dir
#脚本命令
fastlane ${lane_name} desc:${update_desc_String}
exit 0
记得保存!
记得保存!
记得保存!
对字段解释:
解释1.lane_name="xiaoguoDebug"
lane_name 是自己在工程中建立的Fastfile 中的lane的名字;xiaoguoDebug 如5.1上面已经提到过。
lane_name根据自己的定义的名字修改
解释2.project_dir="/Users/xiehewanbang/Desktop/other/shopeone-app-ios"
project_dir 是自己工程的路径这个要根据自己工程不同而确定,
project_dir一般要修改
解释3.fastFile_dir=$project_dir/fastlane
fastFile_dir 是当时安装fastline的路径,这个一般是固定的,就在工程路径中fastlane里。
fastFile_dir一般不修改。
解释4.updateFile_dir 和updateFile_name和project_DesKey
这四个是和升级提示,这里先根据注解简单理解一下,有关的我们下面讲细讲。
#更新提示文件路径
updateFile_dir=$script_dir/desc
#更新提示文件名字
updateFile_name="update_desc"
#更新提示文件:当前打包工程 对应的 更新内容
project_DesKey="xiaoguo"
5.2.1 ''升级提示''文件的配置(1,2,3 , 4步)
1.建立升级提示的文件(这是一个json 格式的文件):
在xiaoguo.sh 同级先建立一个文件夹desc , 用命令工具打开desc 文件夹:
cd /Users/xiehewanbang/Desktop/fastlane打包/desc
再执行
touch update_desc.json
这样就创建里一个update_desc.json的文件
2.打开(用Xcode 或者subline Text)update_desc.json 编辑文件内容如下:
{
"xiaoguo": {
"update_desc":"测试上传"
}
}
文件路径如下:
现在我们来解释一下shell脚本中的这3个字段
#更新提示文件路径
updateFile_dir=$script_dir/desc
#更新提示文件名字
updateFile_name="update_desc"
#更新提示文件:当前打包工程 对应的 更新内容
project_DesKey="xiaoguo"
解释1: updateFile_dir=$script_dir/desc
updateFile_dir 是升级提示文件update_desc.json 所在的路径。只要按照我说的文件夹层次建立的desc 文件夹,
script_dir/desc 这个不用改。$script_dir 表示xiaoguo.sh 的所在路径,后面拼接一个desc。
解释2: updateFile_name="update_desc"
updateFile_name 升级提示文件的名字,就是update_desc,如果你建立的文件不是这个。就要用改用自己定义的。
解释3:project_DesKey="xiaoguo"
project_DesKey 是从当前 “升级提示” 的字典(其他语言叫map) 取的当前这个工程的App 对应的更新提示。
例如 xiaoguo 这个工程对应的升级提示为“测试上传”
所以,每次打包上传时,我们都要去打开文件,改一下 “测试上传”
3.安装jq 工具(shell 脚本需要解析升级提示文件中的json 数据)
打开这个链接 https://stedolan.github.io/jq/download/ 可以参看一下;
执行命令:(前提要安装brew,是一个管理工具,这个网上很多,不细说了)
brew install jq
我已经安装过了,所以提示重复安装。
4.双击执行脚本(打包时,只要双击脚本,即可打包)
1.问题描述:双击时,发现脚本没有执行,只是被某个默认文件编辑工具打开了。
解决办法:我们需要把xiaoguo.sh 的后缀改为 xiaoguo.command
再次双击,出现新的问题,如下:
2.解决上面的权限问题:
执行命令如下:
chmod +x /Users/xiehewanbang/Desktop/fastlane打包/xiaoguo.command
再次双击,脚本执行了,😄终于成功啦!