美文网首页自动化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