美文网首页iOS开发iOS开发-工具
iOS--fastlane自动化打包

iOS--fastlane自动化打包

作者: 乐逍遥的笔记 | 来源:发表于2020-10-23 18:21 被阅读0次

    前言:App的开发过程中,打包测试也是非常重要的一环,但是频繁的机械式操作反而阻塞我们的开发测试效率,我们希望通过自动打包上传到测试环境减少一些不必要的简单操作,所以自动打包开发工具就应运而生了,常见的主流工具有JenkinsfastlaneJenkins功能强大,但是需要的配置也比较多,团队较大的可以优先考虑,fastlane比较轻便,配置较为简单,使用起来也很方便。本文将基于fastlane自动化打包的功能,详细的介绍下fastlane安装到上传蒲公英的整个流程。

    目录

    <一>. fastlane的安装

    <二>. fastlane的配置

    <三>. fastlane打包并上传至蒲公英fir.im

    <一>. fastlane的安装

    • 1.笔者配置fastlane的环境为 macOS Catalina v10.15.6版本。
    • 2.fastlane 是用Ruby语言编写的一套自动化工具集和框架,fastlane的Github地址fastlane的官网fastlane的文档
    • 3.fastlane的安装(在终端命令行操作):
      --第一步:因为fastlane是用Ruby语言编写的工具,所以必须保证已经配置好了Ruby开发环境。可以使用如下命令行查看是否安装了Ruby:
    ruby -v
    

    如果有以下提示说明你已经安装了Ruby:

    ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin19]
    

    如果没有安装也没关系,这里提供一个博主的方法
    --第二步:安装Xcode命令行工具

    xcode-select --install
    

    如果没有安装,命令会有提示框,根据提示一步一步安装即可。
    如果出现以下命令提示,说明已经安装成功:


    已经安装成功提示
    xcode-select: error: command line tools are already installed, use "Software Update" to install updates
    

    --第三步:Ruby和Xcode环境都配置好之后,我们只需要执行以下命令来安装fastlane

    sudo gem install -n /usr/local/bin fastlane
    

    安装完成之后,输入以下命令查看是否安装成功:

    fastlane --version
    

    出现以下提示说明你已经安装成功了:


    fastlane安装成功

    如果没有以上提示也没关系,回看前面的步骤,再仔细检查下,祝君好运。

    <二>. fastlane的配置

    fastlane安装成功之后,接下来就是比较重要的fastlane的配置。

    • <1>首先需要我们cd到你的iOS项目下,执行初始化命令:
    fastlane init
    

    命令执行完成之后会给出我们如下几个提示:

    fastlane init
    命令执行到最后有What would you like to use fastlane for?提示,此时fastlane列出几个选项,需要我们告诉它使用fastlane需要执行哪种操作:
    • 第一种获取App Store的App预览照片。
    • 第二种打包上传至TestFlight工具上。
    • 第三种打包上传到App Store。
    • 第四种自定义打包方式。

    以上四种方式大家可以根据自己的需要自行选择,本文主要介绍打包上传至第三方平台,所以选择4自定义打包方式。选择完成之后,fastlane会在我们项目中创建fastlane文件,这个过程大概需要两分钟等待。
    出现以下截图说明已经创建成功:

    截屏2020-10-22 下午11.38.17.png
    此时只需要我们一直敲回车键即可,直到该命令运行结束,我们会看到如下创建的文件:
    截屏2020-10-23 下午4.19.11.png
    • <2>创建好fastlane文件夹之后,Appfile是编辑我们相关App和开发者账号信息的,一般不需要我们去手动修改,在最后一步的打包过程中如果出现需要App ID的相关信息,我们在命令行中正常输入即可。Fastfile是我们对自动打包这个过程的完整配置,默认的Fastfile文件内容如下:
    # This file contains the fastlane.tools configuration
    # You can find the documentation at https://docs.fastlane.tools
    #
    # For a list of all available actions, check out
    #
    #     https://docs.fastlane.tools/actions
    #
    # For a list of all available plugins, check out
    #
    #     https://docs.fastlane.tools/plugins/available-plugins
    #
    
    # Uncomment the line if you want fastlane to automatically update itself
    # update_fastlane
    
    default_platform(:iOS)
    
    platform :iOS do
      desc "Description of what the lane does"
      lane :custom_lane do
        # add actions here: https://docs.fastlane.tools/actions
      end
    end
    
    • 1.主要介绍lane的任务结构和蒲公英、fir.im的api配置。
      笔者给出一个自己的例子来作为参考并讲解主要参数的含义:
    #     gym(
    #       scheme:"NonTeacher", #项目名称
    #       export_method:"ad-hoc",#打包的类型
    #       configuration:"Release",#模式,默认Release,还有Debug
    #       output_name:"#{ipaName}",#输出的包名
    #       output_directory:"./build"#输出的位置
    #     )
    
    # Uncomment the line if you want fastlane to automatically update itself
    #
    
    platform :iOS do
    
        desc "打测试包上传到蒲公英"
        lane :pgy do
            build_app(
                workspace: "XXXXX.xcworkspace",
                scheme: "XXXXX",
                export_method: "ad-hoc",
                output_directory: "/Users/XXXXX/Desktop/IPA"
            )
        
            #蒲公英的配置 替换为自己的api_key和user_key
            pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
        end
        
        desc "打测试包上传到fir.im"
        lane :fir do
            build_app(
                workspace: "XXXXX.xcworkspace",
                scheme: "XXXXX",
                export_method: "ad-hoc",
                output_directory: "/Users/XXXXX/Desktop/IPA",
                silent:"true"
            )
    
            gym(
                output_directory: "/Users/XXXXX/Desktop/IPA",
            )
        
            # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
            firim(firim_api_token: "firim_api_token")  # token 在fir 上查看
        end
    end
    

    关于上述的蒲公英api_key和user_key可以到蒲公英Api网站查看:

    截屏2020-10-23 下午5.14.55.png
    关于fir.im的相关信息可以到fir.imApi网站查看:
    FIR_API
      1. build_app 中主要是编译打包成ipa文件这个过程的相关操作,build_app中的相关参数介绍:
    参数 参数的意义 默认值
    workspace iOS项目的workspace
    project 工程路径
    scheme iOS项目的scheme
    clean fastlane自动打包之前知否clean项目 false
    output_directory 编译App完成后ipa包的存放地址,默认在工程中 .
    output_name ipa包名称
    silent 编译过程中隐藏掉不必要的信息 false
    codesigning_identity 描述文件
    skip_package_ipa 自动跳过ipa打包 false
    skip_package_pkg 自动跳过pkg打包 false
    include_symbols ipa包包含symbols?
    include_bitcode ipa包包含symbolsbitcode?
    export_method 打包导出方式: app-store, ad-hoc, package, enterprise, development, developer-id
    export_options 需要一个export_options plist 文件路径或者export_options ,用 'xcodebuild -help' 查看提供的 options
    skip_build_archive Export ipa from previously built xcarchive. Uses archive_path as source
    skip_archive 跳过打archive包过程
    skip_codesigning Build without codesigning
    catalyst_platform catalyst app的打包平台: ios, macos
    build_path The directory in which the archive should be stored in
    archive_path The path to the created archive
    sdk 应用支持的手机系统版本

    套用fastlane官方的配置例子:

    build_app(
      workspace: "MyApp.xcworkspace",
      configuration: "Debug",
      scheme: "MyApp",
      silent: true,
      clean: true,
      output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
      output_name: "my-app.ipa",       # specify the name of the .ipa file to generate (including file extension)
      sdk: "iOS 11.1"        # use SDK as the name or path of the base SDK when building the project.
    )
    
      1. gym 中主要是编译打包成功后,对导出的IPA包的操作,gym中的相关参数可参考build_app中的参数,因为两者的参数基本一致,最后用一个gym例子:
    platform :iOS do
       desc "打测试包上传到fir.im"
        lane :fir do
            build_app(
                workspace: "XXXXX.xcworkspace",
                scheme: "XXXXX",
                export_method: "ad-hoc",
                output_directory: "/Users/XXXXX/Desktop/IPA",
                silent:"true"
            )
    
            gym(
                workspace: "MyApp.xcworkspace",
                configuration: "Debug",
                scheme: "MyApp",
                silent: true,
                clean: true,
                output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
                output_name: "my-app.ipa",       # specify the name of the .ipa file to         generate (including file extension)
                sdk: "iOS 11.1"        # use SDK as the name or path of the base SDK when building the project.
            )
        end
    end
    
    • 4 蒲公英和fir.im的插件配置
      经过上面的相关配置,我们的配置就差一步:第三方平台的插件配置。
      @1.蒲公英插件的配置:
      执行以下命令来安装蒲公英插件:
    fastlane add_plugin pgyer
    

    出现以下结果表明安装成功:

    截屏2020-10-23 下午5.59.59.png
    @2.fir.im插件的配置:
    执行以下命令来安装fir.im插件:
    fastlane add_plugin firim
    

    出现以下结果表明安装成功:


    截屏2020-10-23 下午6.04.34.png

    <三>. fastlane打包并上传至蒲公英和fir.im

    经过上面的配置,我们就可以愉快的自动打包上传啦,不过最后还有几点跟大家说明一下,首先贴出来笔者打包的配置文件:

    platform :iOS do
    
        desc "打测试包上传到蒲公英"
        lane :pgy do
            build_app(
                workspace: "XXXXX.xcworkspace",
                scheme: "XXXXX",
                export_method: "ad-hoc",
                output_directory: "/Users/XXXXX/Desktop/IPA"
            )
        
            #蒲公英的配置 替换为自己的api_key和user_key
            pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
        end
        
        desc "打测试包上传到fir.im"
        lane :fir do
            build_app(
                workspace: "XXXXX.xcworkspace",
                scheme: "XXXXX",
                export_method: "ad-hoc",
                output_directory: "/Users/XXXXX/Desktop/IPA",
                silent:"true"
            )
        
            # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
            firim(firim_api_token: "firim_api_token")  # token 在fir 上查看
        end
    end
    

    首先lane作为一个单独的任务模块,它是可以自己定义的,例如笔者的例子中platformiOS,下面有两个任务:pgyfir,所以在我们只需要cd 到相关的iOS项目下执行以下命理即可:
    (打包上传至fir.im ios为platform字段中的平台 fir为自己自定义的任务 当然这个名字可以任意取,在我们执行命令的时候对应上即可。)

    fastlane ios fir   
    

    或者

    fastlane ios pgy
    

    出现下面的截图就代表你已经上传成功了:


    截屏2020-10-22 下午6.37.44.png

    附录:

    <1> firim相关参数配置

    参数 参数的意义 默认值
    platform 平台:ios , mac, android ---
    firim_api_url https://www.betaqr.com/apps ---
    firim_api_token firim网站的API token ---
    app_changelog 更新日志 ---
    firim_username 用户名 ---
    app_passwd 安装密码 ---
    ipa ipa包 ---
    apk apk包 ---
    gradle_file --- ---
    icon --- ---
    file --- ---
    app_identifier --- ---
    app_name --- ---
    app_desc --- ---
    app_short --- ---
    app_is_opened --- ---
    app_is_show_plaza --- ---
    app_store_link_visible --- ---
    app_version --- ---
    app_build_version --- ---
    app_release_type --- ---
    app_info_to_file_path --- ---

    <2> 蒲公英相关参数配置

    参数 参数的意义 默认值
    api_key https://www.pgyer.com/account/api ---
    user_key https://www.pgyer.com/account/api ---
    ipa ipa包 ---
    apk apk包 ---
    password 安装包密码 ---
    update_description 更新日志 ---
    install_type --- ---

    写在最后:fastlane的本地打包主题感受是相比之前手工操作省去了不少机械操作,笔者80M左右的项目上传成功大概用了9分左右,还是挺有效率的。当然这也只是开发测试中的一环,弊端就是必须要本地配置好才可以,关于后续的服务器自动化打包测试会继续更新,感谢大家的拜读,如果文中有错误或者理解不对的地方,欢迎大家的批评指正。

    相关文章

      网友评论

        本文标题:iOS--fastlane自动化打包

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