使用Fastlane实现iOS项目自动打包

有的公司分工比较细,诸如项目打包、发布这些工作,都会有专门的测试人员去负责,这就为开发人员省去了大部分时间。当然,当你看到这篇文章时,就证明你所在的公司并不是这样。


不过不要担心,既然你找到了我,我就将Fastlane的使用技巧传授给你。

Fastlane是麻省理工学院批准的开源项目,可以将Mac、iOS、android项目的自动打包、发布等一系列繁琐的任务自动化。

Fastlane安装

  • 打开终端输入xcode-select --install,若提示如下图,则说明已经安装了Xcode命令行工具;否则会弹出对话框,选择安装即可。


  • 输入ruby -v查看ruby版本,要求2.0及以上版本。可以通过gem管理ruby版本,这里需要注意的是,ruby的镜像文件路径已经改为https://gems.ruby-china.org/
  • 输入sudo gem install fastlane -NV ,通过gem安转fastlane。最近因为Xcode 9的问题,升级了fastlane。


Fastlane配置

  • 打开终端,切换目录到包含xxx.xcodeproj的项目目录下输入fastlane init,期间会让输入Apple ID(开发者账号)及app_identifier等信息,可以根据需要自行选择填写。最后会在当前目录下生成fastlane文件夹。
  • 进入fastlane文件夹,打开Appfile文件,里面是刚刚填写的一些信息。可以在里面配置多个app_identifier、apple_id信息。


  • 打开Fastfile文件,里面便是自动生成的fastlane使用方法,当然,需要根据需要进行修改。

在编写fastfile文件之前,需要说明一下,Fastlane着实太强大,因此本文只介绍其中的一种方法:本机已经安装Signing Certificate及其对应的Provisioning Profile,也就是说打开Xcode,将Automatically manage signing选项去掉,手动进行选择,且能编译运行。


Fastfile文件的编写

  • App Store版本
    # You can define as many lanes as you want
    desc "Deploy a new version to the App Store"
    lane :release do |op|
    increment_version_number(version_number: op[:version]) #根据入参version获取app版本号
    increment_build_number(build_number: op[:version]) #将build号设置与app版本号相同

        # 设置app的info.plist文件项
        set_info_plist_value(path: "./xxx/Info.plist",  #info.plist文件目录
                            key: "UIFileSharingEnabled",  # key,将plist文件以Source Code形式打开可查询对应的key
                            value: false)  # value
    
        # 设置自定义plist文件项,用于给app配置不同的服务器URL
        set_info_plist_value(path: "./xxx/hostAddress.plist",
                            key: "host",
                            value: "https:/zhengshiServer:xx/xxx/xxx")
    
        # 设置某些服务是否有效
        # 还可以使用modify_services,具体参考官网相关文档
        produce(
            enable_services:{
                push_notification: "on",
           }
        )
    
        # 更新Provisioning Profile
        # 在项目当前目录下创建provisions文件夹,并将App Store版本的.mobileprovision文件保存在里面,名称随意。
        update_project_provisioning(profile: "./provisions/appstore.mobileprovision")
    
        # 更新项目团队
        update_project_team(path: "xxx.xcodeproj",
                      teamid: "5JC8GZ432G")
    
        # 开始打包
        gym(# use_legacy_build_api: true,  # Xcode 9之后,需要去掉
            output_name: "appstore",  # 输出的ipa名称
            silent: true,  # 隐藏没有必要的信息
            clean: true,  # 在构建前先clean
            configuration: "Release",  # 配置为Release版本
            codesigning_identity: "iPhone Distribution: xxx Co.,Ltd. (5JC8GZ432G)",  # 代码签名证书
            buildlog_path: "./fastlanelog",  # fastlane构建ipa的日志输出目录
            export_method: "app-store", # Xcode 9增加export_method标签
            output_directory: "/Users/xxx/Desktop")  # ipa输出目录
    
    end
    
  • Development版本
    desc "Build a new version use the ceshi"
    lane :ceshi do |op|
    increment_version_number(version_number: op[:version])
    increment_build_number(build_number: op[:version])

        set_info_plist_value(path: "./xxx/Info.plist",
                            key: "UIFileSharingEnabled",
                            value: true)
    
        set_info_plist_value(path: "./xxx/hostAddress.plist",
                            key: "host",
                            value: "https:/ceshiServer:xx/xxx/xxx")
    
        # 设置某些服务是否有效
        # 还可以使用modify_services,具体参考官网相关文档
        produce(
            enable_services:{
                push_notification: "off",
            }
        )
    
        # 将Development版本的.mobileprovision文件保存在里面,名称随意。
        update_project_provisioning(profile: "./provisions/development.mobileprovision")
    
        update_project_team(path: "xxx.xcodeproj",
                      teamid: "5JC8GZ432G")
    
        gym(# use_legacy_build_api: true,
            output_name: "ceshi",
            silent: true,
            clean: true,
            configuration: "Debug",
            buildlog_path: "./fastlanelog",
            codesigning_identity: "iPhone Developer: xxx (xxxxxxxxxx)",
            export_method: "development", # Xcode 9增加export_method标签
            output_directory: "/Users/xxx/Desktop"
      )
    end
    
  • 其他版本类似,此处不在给出。其中export_method标签对应的值有:

    1. export_method: "development"
    2. export_method: "enterprise"
    3. export_method: "app-store"
  • 批量处理
    desc "build all version ipa"
    lane :all do |op|
    t = op[:version]
    ceshi version:t
    release version:t
    end

Fastlane使用

最后,只需在终端(相关项目目录下)轻轻敲入:
fastlane ceshi version:1.0.0 // 打包ceshi环境ipa,app版本号为1.0.0
fastlane release version:1.0.0 // 打包App Store版本ipa,app版本号为1.0.0
fastlane all version:1.0.0 // 打包ceshi、App Store版本ipa,app版本号为1.0.0

我们便可以去喝咖啡了,执行打包过程就交给fastlane去完成,是不是很爽?



Fastlane还有很多的功能供大家使用,比如match(能够使团队通过git同步证书和配置文件)、sigh(生成配置文件)、snapshot(生成截图)以及git的一些相关操作等等。大家可以到GitHub或者官网进行相关知识的学习。

授人以鱼不如授人以渔,传送门献上:
GitHub_Fastlane工具文档
Fastlane官网


关注微信公众号CodingArtist,可以第一时间得到文章更新通知! _

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

推荐阅读更多精彩内容