美文网首页iOS初中级开发iOS数据转换
Fastlane + .sh 一键打包上传

Fastlane + .sh 一键打包上传

作者: 猪脚 | 来源:发表于2017-06-20 00:24 被阅读128次

    通过最近的fastlane实践进行的整理

    1. fastlane 初始化

     fastlane init
    

    2. Fastfile

    Fastfile管理你所创建的 lan。它的格式是这样的:

    # 自动更新fastlane 工具
    # update_fastlane
    
    #需要的fastlane的最小版本,在每次执行之后会检查是否有新版本,如果有会在最后末尾追加新版本提醒
    fastlane_version "2.30.1"
    
    #默认使用平台是 ios,也就是说文件可以定义多个平台
    default_platform :ios
    
    platform :ios do
      before_all do
        # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
        cocoapods
    
      end
    
      desc "Runs all the tests"
      lane :test do
        scan
      end
    
      desc "提交一个新的Beta版本到 Apple TestFlight"
      desc "This will also make sure the profile is up to date"
      lane :beta do
        # match(type: "appstore") # more information: https://codesigning.guide
        gym(scheme: "Docment") # Build your app - more options available
        pilot
    
        # sh "your_script.sh"
      end
    
      desc "部署一个新版本到App Store"
      lane :release do
        # match(type: "appstore")
        # snapshot
        gym(scheme: "Docment") # Build your app - more options available
        deliver(force: true)
        # frameit
      end
    
      # 你可以定义自己的lane
    
      #执行lane成功后的回调
      after_all do |lane|
        # slack(
        #   message: "Successfully deployed new App Update."
        # )
      end
    
      # 如果流程发生异常会走这里并终止
      error do |lane, exception|
        # slack(
        #   message: exception.message,
        #   success: false
        # )
      end
    end
    

    我们可以自定义一个lane

    desc '构建 adhoc 任务'
      desc 'fastlane adhoc'
      lane :adhoc do
        gym(
          scheme: "bw",
          export_method: "ad-hoc",
          output_directory: "./build", # 打包后的 ipa 文件存放的目录
          output_name: "bw2017"  # ipa 文件名
        )
      end
    

    PS:多个 lane 的话实际上是可以相互调用的,这个其实特别实用

    default_platform :ios
    
    platform :ios do
    
      lane :prepare do
        cocoapods
        match
      end
    
    desc 'fastlane build'   'fastlane build type:adhoc'
      lane :build do |options|
        # 调用上面的 prepare 任务
        prepare
    
        case options[:type]
        when 'adhoc'
          adhoc
        else
          appstore
        end
      end
    
    
      lane : adhoc do
      ···
      end
    
      lane : appstore do
      ···
      end
    
    end
    
    
    

    利用目前支持的工具可以做所有包含自动化和可持续化构建的每个环节,例如:

    scan 自动化测试工具,很好的封装了 Unit Test
    sigh 针对于 ios 项目开发证书和 Provision file 的下载工具
    match 同步团队每个人的证书和 Provision file 的超赞工具
    gym 针对于 iOS 编译打包生成 ipa 文件
    deliver 用于上传应用的二进制代码,应用截屏和元数据到 App Store
    snapshot 可以自动化iOS应用在每个设备上的本地化截屏过程

    3 执行

    打开终端,切换到项目的根目录:执行fastlane lane'name
    就可以了。成功之后会在相应的路径下生成ipa文件,如果报错的话就根据错误信息好好查看文档

    为了实现一键打包的方案,需要将gym和fir结合到一起,这里利用了一个脚本文件,在使用时直接执行这个脚本文件即可,文件内容如下:

    4 一键自动化打包

    #!/bin/bash
    
    #设置超时
    export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
    
    #计时
    SECONDS=0
    
    #假设脚本放置在与项目相同的路径下
    project_path=$(pwd)
    #取当前时间字符串添加到文件结尾
    now=$(date +"%Y_%m_%d_%H_%M_%S")
    
    #指定项目的scheme名称
    scheme="Demo"
    #指定要打包的配置名
    configuration="Adhoc"
    #指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数
    export_method='ad-hoc'
    
    #指定项目地址
    workspace_path="$project_path/Demo.xcworkspace"
    #指定输出路径
    output_path="$project_path/IPA"
    #指定输出归档文件地址
    archive_path="$output_path/Demo_${now}.xcarchive"
    #指定输出ipa地址
    ipa_path="$output_path/Demo_${now}.ipa"
    #指定输出ipa名称
    ipa_name="Demo_${now}.ipa"
    #获取执行命令时的commit message
    commit_msg="$1"
    
    #输出设定的变量值
    echo "===workspace path: ${workspace_path}==="
    echo "===archive path: ${archive_path}==="
    echo "===ipa path: ${ipa_path}==="
    echo "===export method: ${export_method}==="
    echo "===commit msg: $1==="
    
    #先清空前一次build
    fastlane gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}
    
    #上传到fir
    fir publish ${ipa_path} -T "XXX_YOUR_API_TOKEN_XXX" -c "${commit_msg}"
    
    #输出总用时
    echo "===Finished. Total time: ${SECONDS}s==="
    

    (1、使用该文件需要项目支持CocoaPods;2、本项目的项目名称是Demo,在实际使用时需要将Demo替换成自己的项目名称;3、需要将XXX_YOUR_API_TOKEN_XXX 换成自己的fir token)

    如文件名文AutoPack.sh,打包时只需要在cd到项目文件下,执行:

    ./AutoPack.sh
    

    ps:
    1、写好自己的 脚本,比如aa.sh
    2、打开终端 执行,方法一: 输入命令 ./aa.sh ,
    方法二:直接把 aa.sh 拖入到终端里面。
    注意事项:
    如果 没有成功报出问题::
    Permission denied。就是没有权限。
    解决办法:
    修改该文件aa.sh 的权限 :使用命令:
    chmod 777 aa.sh 。
    然后再执行 上面第二步的操作 就 OK .

    参考资料
    http://blog.csdn.net/u013282507/article/details/72884789
    http://blog.csdn.net/zhuweideng/article/details/72547957

    相关文章

      网友评论

      • Bruce_XHG:你好 用你的这个脚本遇到一个问题 请赐教 QQ 642848215

      本文标题:Fastlane + .sh 一键打包上传

      本文链接:https://www.haomeiwen.com/subject/nlrwqxtx.html