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

以前一直做持续发布使用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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容