jjzjj

iOS fastlane 自动打包,上传蒲公英

孤雁_南飞 2023-03-28 原文

前言

在开发中经常需要打测试包,然后上传至蒲公英等三方平台,这其中需要经历的操作为:

  • 设置项目的打包环境
  • 利用 xcode 进行打包
  • 上传至蒲公英等三方平台

每一次打包上面的过程必不可少,而且都是手工的,本篇文章我们采用CD(Continuous Delivery)持续交付和CI(Continuous Integration)持续集成来进行自动化打包一键操作,解放双手,拒绝手动的重复低效率劳动。

本篇文章讲解如何使用 fastlane 自动打包

1. 安装环境

1.1 安装 Homebrew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装成功,查看版本


1-2.png

1.2 安装 fastlane

brew install fastlane

安装成功,查看版本

1-1.png

2. fastlane 配置

2.1 进入到工程目录 .xcworkspace 下面

打开终端 cd 到工程目录下,如下图


2-1.png

2.2 初始化 fastlane

fastlane init
2-2.png

终端里面让您选择,我这边是选择了 4;
中间会有很多 Continue by pressing Enter ⏎ ,需要你敲几次回车键
然后就会看到生成 fastlane 文件,如下图所示


2-21.png

2.3 加入蒲公英插件

 fastlane add_plugin pgyer  或者 bundle exec fastlane add_plugin pgyer 

具体查看蒲公英官方文档 使用 Fastlane 上传 App 到蒲公英
中间有一个需要 按 y 回车确认,这是第二次按照截图了,可能有些不一样

image.png

安装后 Gemfile 信息增加如下

plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

2.4 编辑 Fastfile 脚本文件

打开刚刚生成的 fastlane/Fastfile 文件,默认生成文本如下


2-3.png

2.4.1最终 的 Fastfile 脚本文件内容

蒲公英账号需要自己配置,如果1.3 未执行,或者没有账号,请注释或删除掉, 2.4.2 有如何获取蒲公英账号key的截图,

default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  # 打包时候用的名称   例如 fastlane app
  lane :app do 
    # add actions here: https://docs.fastlane.tools/actions
    gym(
    # 每次打包之前clean一下
    clean: true,    
    # 打包出 ipa 文件的路径,我放到了桌面文件夹,你自行更改文件夹
    output_directory: '/Users/hengqianjin/Desktop/APP', 
    # 打包的名称,可任意取 
    output_name: 'myApp.ipa', 
    # 项目的 scheme,自己项目名   .xcworkspace 前面的项目名就是
    scheme: "Farm",      
    # 默认 Release,Release or Debug     
    configuration: 'Debug', 
    # 是否包含 bitcode  
    include_bitcode: false,  
    # 是否包含 symbols 
    include_symbols: true, 
    # 打包导出方式,包含 app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application   
    export_method: 'development',  
    # 这个设置是为了设置 xcode 自动配置证书和配置文件,当然也可以手动配置,可以参考文档
    export_xcargs: '-allowProvisioningUpdates' 
    )
    # mac上的通知弹窗,通知打包完毕
    notification(app_icon: "./fastlane/icon.png", title: "manager", subtitle: "打包成功,已导出安装包", message: "准备发布到蒲公英中……")
    #配置上传蒲公英账号  蒲公英的 api_key和 user_key  用自己蒲公英账号的,别用我的!!!如果没有可删除
    pgyer(api_key:'fbf25d2a525e12d5084b0ae09098ab7b', user_key: '12bba6204bd7c3e26375f653f8086358', update_description: "测试fastlane自动打包")
  end
end

2.4.2蒲公英的 key 获取

去自己的蒲公英账号好复制即可


image.png

3. fastlane 自动打包上传

3.1 运行脚本,进行自动化打包

fastlane XXX 或者 bundle exec fastlane xxx
这个 XXX,就是 Fastfile 文件里面,lane:后面的文字,我的名称是 app,就是 fastlane app


3-1.png

3.2 打包成功,生成.ipa文件、上传至蒲公英发布、 mac 上发送通知

成功提示


3-2.png

mac 上成功通知


3-21.png

蒲公英上上传成功


3-22.png

你output_directory 设置的文件夹中的 myApp.ipa


3-23.png

4.问题or总结

4.1 fastlane 上面打包步骤支持 OC 和Swift

我分别使用了OC创建的项目和Swift创建的项目,均能打包发布成功

4.2 使用之前请确保证书齐全

请使用之前保证 Xcode 能正常打包没问题,否则会导致打包失败,亲测Swift项目无证书打包失败

4.3 fastlane init 问题

由于 https://rubygems.org 部署在国外,有时候可能因为网络原因导致失败!(可能,这里是可能失败,网络好可以无视)
失败时候终端提示 bundle update,同时Gemfile不会生成Gemfile.lock文件,而且会导致后续打包失败

4.3 问题解决办法

打开Gemfile, 进行替换源 https://rubygems.org/ 替换为 https://gems.ruby-china.com/

#source "https://rubygems.org"
https://gems.ruby-china.com/

替换后执行 bundle update

4.4 自动打包耗时问题

此处只是自动打包,但是依旧需要时间的,项目越大越耗时,只是节省了手动操作步骤

参考文章
最简单安装 brew 的方法
iOS 自动化打包(fastlane),真香定律
iOS 基于 fastlane 和 jenkins 的自动化打包
iOS 自动化打包发布(Fastlane + 蒲公英)

有关iOS fastlane 自动打包,上传蒲公英的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  5. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  6. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  7. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  8. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  9. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  10. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

随机推荐