美文网首页自动化iOS知识点iOS调试技巧
iOS打包发布工具fastlane初级攻略

iOS打包发布工具fastlane初级攻略

作者: 炸鸡叔 | 来源:发表于2016-12-05 01:04 被阅读5083次

    以前一直做持续发布使用xcbuild和xctool这些工作进行打包,但是经常遇到证书相关的问题,各种Provising Profile文件匹配不上,然后又证书不匹配等等。于是开始寻求新的解决方案,找到了新的神器fastlane。

    相关信息

    fastlane是一整套的工具帮助开发者主要是iOS开发者,打包App上传App到App store或着TestFlight。
    fastlane的官方repo地址:
    https://github.com/fastlane/fastlane
    fastlane的快速上手文档:
    https://docs.fastlane.tools/
    fastlane支持的action文档
    https://docs.fastlane.tools/actions/

    安装fastlane

    1.确保xcode命令行工具已经安装
    ```xcode-select --install`
    ``
    2.参考官方文档有三种安装方式任选一种进行安装

    Paste_Image.png

    使用fastlane进行打包

    1.初始化项目 fastlane init
    使用fastlane必须要先对项目进行初始化fastlane init
    a.使用命令行工具进入项目目录执行fastlane init命令

    Paste_Image.png

    初始化的过程中会需要填写一些项目信息包括scheme name和你的Apple id等等。同时会在项目中生成一个fastlane的文件夹。

    2.查看fastlane文件夹中的内容
    上面已经说到初始化之后,在项目根目录会生成一个fastlane的文件夹,接着打开文件夹看一看

    Paste_Image.png

    文件夹里一共有4个文件

    1. Appfile里面存放了App的基本信息包括app_identifier、apple_id、team_id等等。如果在第一步init的时候你输入了正确的appId账号和密码会在这里生成正确的team_id信息。
    2. Fastfile是最重要的一个文件,可以编写和定制我们打包脚本的一个文件,我们自定义的一些功能就写在这里。
    3. README.md里面是一些帮助说明信息
    4. report.xml就不用管了

    Fastfile

    下面贴一下Fastfile中的内容

    Paste_Image.png
    前面几行记录了fastlane的版本信息
    platform :ios do开始下面的就是fastlane可以执行的任务
    第一个
    before_all do
        cocoapods
    end
    

    这个点意思是在执行每一个lane之前都先执行这个功能,它里面其实就跑了一个fastlane的action这个action叫cocoapods
    3.1查看fastlane的action以及action的用法
    上面提到before_all中其实就是执行了一个action那么让我们来看看fastlane一共有哪些action,以及action怎么用
    在命令行中使用fastlane actions可以列出所有的action,使用fastlane action [action的名字]可以查看该action的相关信息,最重要的是在帮助文档中的这里可以查看具体action的使用方法和示列https://docs.fastlane.tools/actions/.
    列出所有action

    Paste_Image.png

    查看某个action的说明


    Paste_Image.png

    网页文档中关于cocoapods这个action的说明:

    屏幕快照 2016-12-05 上午1.11.49.png

    3.编写自己的lane

    知道了action和lane之后,我们回到Fastfile文件中,看看其实在生成的文件中已经帮我们写了好几个lane了

      desc "Runs all the tests"
      lane :test do
        scan
      end
    
      desc "Submit a new Beta Build to 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 # Build your app - more options available
        pilot
    
        # sh "your_script.sh"
        # You can also use other beta testing services here (run `fastlane actions`)
      end
    

    上面有2个lane,一个叫test 一个叫beta,test中执行了scan这个action,这就是用来运行单元测试的一个action,具体信息可以使用fastlane action scan查看,然后beta这个lane执行了gym和pilot,gym是打包,pilot是把应用发到TestFlight,具体使用方法一定要去查看文档哦。
    但是生成的这些lane可能不满足我们的需求,下面以一个企业版应用打包为例我们自己新建一个lane:

      desc "打包成企业版ipa"
      lane :inhouse do |options|
        #更新info plist文件 ENV["key"]表示从环境变量中读取值,也可以直接写死,如果要在打包时改变某些参数,可以把它们设置成环境变量
        update_info_plist(
            plist_path: "GoodFolks/info.plist",
            display_name: "新App名字",
          )
        #更新urlType 具体用法查询action文件update_info_plist的说明
        update_info_plist(
            xcodeproj: "GoodFolks.xcodeproj",
            plist_path: "GoodFolks/info.plist",
            block: lambda { |plist|
              #这里我在更新微信的urlType 这个action还可以更新app的bundleid 具体可以查阅文档
              urlScheme = plist["CFBundleURLTypes"].find{|scheme| scheme["CFBundleURLName"] == "weixin"}
              urlScheme[:CFBundleURLSchemes] = ENV["app_urlschems_weixin"]
            }
          )
        #设置版本号
        increment_version_number(
          version_number: ENV["app_versionName"]
          )
        #设置build号,这些都可以写死,也可以不要这些action,也可以从环境变量中获取值
        increment_build_number(
          build_number: ENV["app_versionCode"]
          )
        #这个action很重要cert就是下载和安装匹配的Provision Profile文件,不用你去管那些证书不匹配的事情啦,下载的文件会存在项目根目录的build文件夹下
        cert(output_path:"build")
        #这一步就是签名了
        sigh(
          app_identifier: ENV["app_applicationId"],
          team_id:"9M8CTWAV8P",
          output_path: "build"
          )
        #最后就是打包,企业版打包,打包完成后会在项目根目录的build文件夹下生成ipa文件
        gym(
          scheme: "GoodFolks",
          export_method: "enterprise",
          output_directory: "build",
          include_bitcode: false
          )
    
        # do some other stuff here
    end
    

    4.起飞
    上面说了这么多,但是怎么运行呢?
    很简单在你的项目根目录执行fastlane [lane的名字]比如我们上面自己写的一个fastlane inhouse,fastlane就会执行指定的任务了,然后你就可以去喝咖啡啦。

    Tips
    fastlane在打包的时候可能需要交互比如输入你的Apple id的密码,但是很明显在做持续发布的时候都是自动化的,不是交互式的shell,没办法人工去输入密码,这个只需要把你的Appleid的密码设置成一个环境变量即可,环境变量的key为FASTLANE_PASSWORD。

    相关文章

      网友评论

      • H_Cynic:我根据你的步骤走完了 ipa包也打出来了 发布到蒲公英显示也是正常的企业版 可是我再用手机去下载 手机会弹出提示 此时无法安装 是为什么啊
        然后我又用xcode手动archive出来放到蒲公英下载是ok的 不知道是哪里出问题了:cry:
        H_Cynic:我发现只是测试demo有这个问题 正常项目是ok的。。。好奇怪。。。。
        感谢分享:+1:
      • Mr_Chen_df25:写的太凌乱,不清晰,应该从安装到打包发布提交审核的全套流程贴出来.打包分为两种,一种是测试包,一种是发布包.
        Mr_Chen_df25:@炸鸡叔 共同学习。发现网上关于这个工具的基本都一样,没有完整的介绍。好多都是复制来的。
        炸鸡叔:@Mr_Chen_df25 哈哈 谢谢建议,可能当时我也不算特别了解,只是对发布企业版比较熟悉,争取找时间,完善一下,弄一个完整详细的教程。
      • 会疼的白痴:你好,我想问一下,就是ENV是什么东西啊 ,打包的时候,只需要fastlane inhouse就可以了吗
        炸鸡叔:@会疼的白痴 ENV是fastlane 从环境变量中读取值,如果你不是从环境变量里面取值,直接写死你的配置就可以了
      • 孤独感爆棚:我们也是打包企业版,不过我打包的时候有一个警告,导致生成ipa一直不成功
        RVM detected, forcing to use system ruby
        Warning! PATH is not properly set up, '/Users/caoyunxiao/.rvm/gems/ruby-2.4.0/bin' is not at first place.
        Usually this is caused by shell initialization files. Search for 'PATH=...' entries.
        You can also re-add RVM to your profile by running: 'rvm get stable --auto-dotfiles'.
        To fix it temporarily in this shell session run: 'rvm use ruby-2.4.0'.
        To ignore this error add rvm_silence_path_mismatch_check_flag=1 to your ~/.rvmrc file.
        Now using system ruby.
        你能看看是什么原因吗
        炸鸡叔:试试 把PATH的内容添加到你到环境变量
        在命令行里执行`echo $PATH`
        然后去你的打包工具里设置环境变量jenkins或者其他的,不知道你用什么做的CI,添加一个 PATH='echo 输出的内容'
      • feepees:弱弱的文艺怎么设置成环境变量
        炸鸡叔:看你用的什么ci工具了,如果是linux或者mac os本地设置环境变量 直接 `export key=value ` 就可以了,如果是gitlab-ci或者gocd或者jenkins都有个地方设置 environment variable的地方,你找找。
      • 缭雾:👍 写的很好

      本文标题:iOS打包发布工具fastlane初级攻略

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