iOS打包 fastlane多个target同时打包

前言

突然接手了一个许久未曾更新的项目,项目中几乎全国每个城市都建了一个target,而手动打包的话需要很大的耐心,且浪费非常多的时间。鉴于此,在网上搜索了如何使用多target打包,这篇文章讲解的很详细,但是涉及的其它内容太多,研究这些内容也有点费力。于是自己就编写测试、边改边测,终于花费了一个多小时,成功实现了一个傻瓜式教程T_T.

第一步

编写Fastfile文件,关于fastlane的安装就不作叙述。

default_platform(:ios)

HOME_PATH = ENV["HOME"] #home 路径 取系统环境变量 HOME
IPA_BASE_PATH = "#{HOME_PATH}/Desktop/IPA/" # ipa基础路径
FIR_IM_API_TOKEN = "填写fir token" #fir.im api_token

def archive(schemeName, verStr, method)

    verArray = verStr.split(".")
        build = verArray.pop()
        version = verArray.join(".")

    if !schemeName
        notification(subtitle: "参数错误", message: "错误信息:请输入 schemeName")
        return
    end

    if !version
        notification(subtitle:"参数错误", message: "错误信息:请输入 version")
        return
    end
    
    if !build
        notification(subtitle: "参数错误", message: "错误信息:请输入 build")
        return
    end

    puts "开始打包 #{schemeName} #{verStr}"

    floderName = "v" + version + "Build" + build
    if method == "ad-hoc"
        dir_name = "AdHoc"
    elsif method == "app-store"
        dir_name = "AppStore"
    elsif method == "development"
        dir_name = "Develop"
    else
        dir_name = "unknown"
    end
    time = Time.new.strftime("%Y%m%d_%H%M")
    output_directory = "#{IPA_BASE_PATH}/#{schemeName}_#{time}/" + floderName + "/" + dir_name
    #编译 ipa
    gym(
        # 指定scheme名字
        scheme: "#{schemeName}",
        # 输出的ipa名称
        output_name: "#{schemeName}",
        # 是否清空以前的编译信息 true是
        clean: true,
        # 指定输出文件夹,这里会保存我们最后生成的ipa文件
        output_directory: output_directory,
        # 指定打包所使用的的输出方式,目前支持 app-store, package, ad-hoc, enterprise, development
        export_method: method
        )
    return output_directory
end

def eachArchive(options, method, upload)
    string = options[:v]

    tmpArray = string.split("+")
    puts "====: #{options}, #{tmpArray}"
    for tmp in tmpArray do 
        array = tmp.split("_")
        verStr = array.pop()
        name = array.first()
        output_directory = archive(name, verStr, method)
        if !output_directory
            next
        end

        if upload != true
            next
        end
        # 上传fir
        fir_im_upload_path = output_directory + "/#{name}.ipa"
        puts "上传FIR 路径为:" + fir_im_upload_path
        sh("fir publish #{fir_im_upload_path} -T #{FIR_IM_API_TOKEN}")
        result_message = "内测版本 #{name}.ipa 版本号" + verStr + "上传 fir.im 成功"
        notification(subtitle:"🎉🎉 #{method} 操作成功", message:"#{result_message}")
        sh("say #{result_message}")
    end
end

platform :ios do
  desc "Description of what the lane does"
  lane :adhoc do |options|
    eachArchive(options, "ad-hoc", true)
  end

  lane :reipa do |options|
    eachArchive(options, "app-store", false)
  end
end

第二步

因为是傻瓜式教程,必然还是有些手动工程操作的,那就是在打不同类型的包时,需要手动在工程中改变描述文件的选择,比如打Adhoc包,就需要在工程中选择Adhoc的描述文件,其它亦如是。

第三步

用法
单个target使用 fastlane adhoc v:TestOne_1.2.3.45
多个target使用 fastlane adhoc v:TestOne_1.2.3.45+TestTwo_1.2.34
总之就是根据自己需要打哪些target,就在后面拼上对应的格式,这还真是一看就会的傻瓜式方式。
+_.这些符号都是为了方便区分的,当然,这个格式是可以自己手动改的,也可以直接在Fastfile文件中定义一个数组,而不用在命令行每次都手动拼。

错误

xcodebuild: error: The workspace named "CITY" does not contain a scheme named "CITY". The "-list" option can be used to find the names of the schemes in the workspace.
解决方案是把工程中scheme对应的project改为对应的Workspace,如果不是Workspace工程的不必理会这一步。

QQ20211209-101443.png

结尾

目前没有发现其它错误信息,虽然是傻瓜式的方式,不过也节约了不少时间,而且配置简单,一看就懂。缺点就是如果拼接格式中间有错误,就会从错误的target停止,但是前面已经打包好的是不受影响,可以从错误的位置再次拼接后执行。

如果你有方便的方法可以去除手动更新描述文件这一步,敬请留言🤗

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

推荐阅读更多精彩内容