{"id":21283260,"url":"https://github.com/mythkiven/ad_fastlane","last_synced_at":"2025-04-09T13:08:03.593Z","repository":{"id":263710272,"uuid":"81299795","full_name":"mythkiven/AD_Fastlane","owner":"mythkiven","description":"iOS App 自动化上传 AppStore ,一键部署 App。自动上传蒲公英","archived":false,"fork":false,"pushed_at":"2019-07-25T06:34:11.000Z","size":347,"stargazers_count":317,"open_issues_count":4,"forks_count":66,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-02T06:51:24.143Z","etag":null,"topics":["appstore","fastlane","fastlane-ios"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mythkiven.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-08T07:17:33.000Z","updated_at":"2025-01-26T08:41:37.000Z","dependencies_parsed_at":"2024-11-20T02:53:36.689Z","dependency_job_id":"4b637c40-3529-4a31-909c-780d4c94b209","html_url":"https://github.com/mythkiven/AD_Fastlane","commit_stats":null,"previous_names":["mythkiven/ad_fastlane"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mythkiven%2FAD_Fastlane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mythkiven%2FAD_Fastlane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mythkiven%2FAD_Fastlane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mythkiven%2FAD_Fastlane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mythkiven","download_url":"https://codeload.github.com/mythkiven/AD_Fastlane/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045233,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appstore","fastlane","fastlane-ios"],"created_at":"2024-11-21T11:07:37.651Z","updated_at":"2025-04-09T13:08:03.572Z","avatar_url":"https://github.com/mythkiven.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## Fastlane 入门实战教程\n\n\u003e有关神器 Fastlane 持续集成\\部署的文章网上挺多,本文定位是入门教程,针对 iOS 应用的持续部署,**只需一条命令就可实现从 Xcode 项目到 编译\\打包\\构建\\提交审核**\n\u003e\n\u003e文章稍微有点长,涵盖内容为:fastlane 简介\\安装\\配置 + Snapshot 截图 + XCTest + 一键上传App Store\n\u003e\n\u003e说明:本文将 Apple Dev Center 简称为 ADC; iTunes Connect 简称为 ITC \n\u003e\n\n先放图看 fastlane 实现自动上传功能:\n\n提交进度:\n\n![](https://ooo.0o0.ooo/2017/02/08/589a9ef7823dc.png)\n\n提交成功,等待审核\n![](https://ooo.0o0.ooo/2017/02/08/589aaed07d991.png)\n\n\n## Fastlane 简介\n\nfastlane 是一个完全开源的项目,包含一组 Ruby 实现的工具集,能完成 iOS 和 Android 工程 的自动化构建\\测试和发布等功能,[现被Twitter收购,是Fabric的一部分](https://krausefx.com/blog/fastlane-is-now-part-of-fabric).fastlane 强大之处就在于其提供的工具全,基本可以覆盖打包测试发布的所有流程,如下图:\n\n![](https://ooo.0o0.ooo/2017/02/08/589ace59a6210.png)\n\n\nfastlane 的每一个工具都对应一个 Ruby 脚本,用来执行某一特定的任务,而最妙的是可以通过配置文件将不同的工具灵活的结合在一起,从而形成一个完整的自动化流程,实现一键上传 ITC,从而缩短用于构建发布的时间.\n\n\n##### 1.主要使用场:\n\n- 提交时执行测试（包括单元测试和集成测试）\n- 构建并分发内部测试\\公开测试版本\n- 构建生产版本并上传至 ITC（包括更新配置文件,创建新的屏幕截图,上传应用并提交审核）\n- ...\n\n##### 2.工具集\n\nfastlane 将如下的工具套件有机地结合起来,从管理证书到单元测试,从编译打包到上传发布,都能通过命令行轻松完成.该套件支持与 Jenkins 和 CocoaPods,xctools 等其他第三方工具的集成,并且能够定义多个通道（lanes）以支持不同的部署目标.\n\n- deliver: 将应用在 ITC 上所需数据提交至 ITC (包括:截图,配置文件,ipa包)\n- snapshot: 依靠 UI Test 完成截图\n- frameit: 快速地把应用截图放入设备框里\n- pem: 可以自动化地生成和更新应用推送通知描述文件\n- sigh: 创建\\更新\\下载和修复 provisioning profiles,支持App Store, Ad Hoc, Development和企业profiles\n- gym: 编译\\打包iOS app,生成签名的ipa文件\n- ...\n\n##### 3.常见命令\n\nfastlane 命令中,个人觉得下面两个较为常用:\n\n- 列出所有的 fastlane 的 actions:\n\n```\n$ fastlane actions\n```\n\n- fastlane action [action_name]: 显示某一个 action 的详细配置\n\n```\n$  fastlane action match\n```\n\n\n## fastlane 入门实战\n\n\n### 1.安装 fastlane\n\n##### 1.1 创建App ID\\描述文件\n\n- 本教程目标是上传 ITC ,因此需要提前在 ADC 和 ITC 中创建 App ID\\描述文件\\App\n- 这里使用的项目是 AD Demo,代码见 [GitHub](https://github.com/mythkiven/AD_Fastlane)\n\n![](https://ooo.0o0.ooo/2017/02/06/589845eaa299d.png)\n![](https://ooo.0o0.ooo/2017/02/06/589847204b77a.png)\n\n##### 1.2 安装 \n\n查看 Ruby 版本,低于2.0最好升级\n\n``` \n$ ruby -v\n```\n\n检查 Xcode CLT 是否安装\n\n``` \n$ xcode-select --install\n```\n\n安装 fastlane\n\n``` \n$ sudo gem install -n /usr/local/bin fastlane\n```\n\n检查版本 fastlane\n\n``` \n$ fastlane --version\nfastlane installation at path:\n/Library/Ruby/Gems/2.0.0/gems/fastlane-2.14.2/bin/fastlane\n-----------------------------\nfastlane 2.14.2\n```\n\nOK,安装完成\n\n##### 1.3 为项目配置 fastlane\n\n``` \n$ cd 项目目录\n$ fastlane init\n```\n\n如果期间报错 `Connection reset by peer - SSL_Connect`,就需要执行:\n\n``` \n$ brew update \u0026\u0026 brew install ruby\n// 重装\n$ sudo gem install -n /usr/local/bin fastlane\n```\n\n然后重新执行 \n```\n$ fastlane init\n```\n\n- 期间会让你输入 Apple ID 账号密码(这个信息会存在钥匙串中,后续使用无需再输入密码)\n- 会检测当前的 app identifier 是否在  ADC 中\n- 会检测当前 app 是否在 ITC 中 \n- 如果已经在 ADC 和 ITC 中创建相应的信息,那么过程会很顺利,如下图:\n\n![](https://ooo.0o0.ooo/2017/02/07/58992aea708c6.png)\n\n并在 Xcode 项目目录中生成如下文件:\n\n![](https://ooo.0o0.ooo/2017/02/07/58992b1016443.png)\n\n注意:如果没有在 ITC 中创建 App ,也就不会创建上述两个文件夹;当然也可以后续创建,执行如下操作即可:\n\n``` \n$ fastlane produce init\n```\n\n### 2.fastlane 文件配置\n\nfastlane 的各文件解释如下:\n\n- Appfile:用于存储应用程序标识符和Apple ID 等信息\n- Fastfile:配置管理 lane\n- Deliverfile:将应用在 ITC 中的信息,统一配置在一个Deliverfile文件中，详见2.1\n- metadata:功能同上也是配置应用在ITC中的信息,只不过是独立文本的形式配置的\n- screenshots:包含截图数据\n\n需要注意的是,metadata 和 Deliverfile,都可以配置 ITC 的数据,但后者优先级高.正如下图:\n\n![](https://ooo.0o0.ooo/2017/02/08/589aba7c0b998.png)\n\n![](https://ooo.0o0.ooo/2017/02/08/589aba7c1d252.png)\n\n下文先在 metadata 文件夹中进行配置用于演示,在文末会删除 metadata 中的配置文本,全部配置在 Deliverfile 中.\n\n##### 2.1 配置 metadata 文件夹\n\n修改 App 描述:\n\n``` \n$ cd metadata \n$ cd zh-Hans\n$ vim description.txt\n```\n\n修改关键字:\n\n``` \n$ vim keywords.txt\n```\n\n修改 support_url:\n\n``` \n$ vim support_url.txt\n```\n\n修改 copyright:\n\n``` \n$ vim copyright.txt\n```\n\n等等,其他信息的修改类似.\n\n然后创建分级文件:itunes_rating_config.json\n\n``` json\n{\"CARTOON_FANTASY_VIOLENCE\": 0,\n\"REALISTIC_VIOLENCE\": 0, \n\"PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE\": 0,\n\"PROFANITY_CRUDE_HUMOR\": 0,\n\"MATURE_SUGGESTIVE\": 0, \n\"HORROR\": 2,\n\"MEDICAL_TREATMENT_INFO\": 0,\n\"ALCOHOL_TOBACCO_DRUGS\": 0, \n\"GAMBLING\": 0, \n\"SEXUAL_CONTENT_NUDITY\": 0,\n\"GRAPHIC_SEXUAL_CONTENT_NUDITY\": 0, \n\"UNRESTRICTED_WEB_ACCESS\": 0,\n\"GAMBLING_CONTESTS\": 0\n}\n```\n\n此处配置参见[官方文档](https://github.com/fastlane/fastlane/blob/master/deliver/Reference.md)\n\n然后将 App 图标添加至文件夹中,接下来要创建证书:\n\n##### 2.2 配置证书\n\n修改 Fastfile:\n\n``` \n$ vim Fastfile\n```\n\n修改内容如下:\n\n```\nfastlane_version \"2.14.2\"\n\ndefault_platform :ios\n\nplatform :ios do\n \n  # 当前任务的描述\n  desc \"Creating a code signing certificate and provisioning profile\"\n  # 任务名称\n  lane :provision do\n    # 创建 ITC 中的 App 信息\n    produce(\n      app_name: 'AD_Demo',\n      language: 'zh-Hans',\n      app_version: '1.0',\n      sku: 'com.3code.ADDemo.Test'\n    )\n    # 使用证书创建私钥及签名\n    cert\n    # 每次运行时创建新的配置文件\n    sigh(force: true)\n  end\n \n  error do |lane, exception|\n  \n  end\n  \nend\n```\n\n如果想创建 ad hoc 配置文件,需要指定sigh(adhoc: true).更多的信息参见:\n\n- [官方文档](https://github.com/fastlane/fastlane/tree/master/fastlane/docs)\n- [fastlane actions](https://docs.fastlane.tools/actions/)\n\n##### 2.3 将 fastlane 本地配置上传至 ITC \n\n重新进入项目目录,执行如下操作:\n\n```  \n$ fastlane provision\n```\n\n等待一小会儿,终端提示成功创建证书配置:\n\n```\nfastlane.tools finished successfully 🎉\n```\n\n打开 ITC 网页,会发现本地的配置,已经成功上传.\n\n### 3.Xcode 配置\n\nxcode 配置也简单,只需要将项目修改至生产状态即可(描述文件).其它像构建版本号之类的不用理会, fastlane 会处理的. \n\n### 4.Snapshot 截图和 XCTest \n\nsnapshot 需要和 XCTest 配合使用,关于 XCTest,我的博客中[有一篇文章](www.3code.info/2017/01/23/AD-XCTest/)做了简单介绍.\n\n``` \n$ fastlane snapshot init\n```\n\n目录中会生成一个 Snapfile 文件,用于配置截图信息,修改内容如下:\n\n``` \n# 图片尺寸\ndevices([\n  \"iPhone 5\",\n  \"iPhone 6\",\n  \"iPhone 6 Plus\"\n])\n \n# 支持语言\nlanguages([\n  'zh-Hans'\n])\n \n# 储存位置\noutput_directory \"./fastlane/screenshots\"\n \n# 删除之前图片\nclear_previous_screenshots true\n```\n\n然后打开 Xcode 工程,添加截图设置(需要增加 UI Test, 因为截图是在 UI Test 时截取的):\n\n``` \n\\\\ 1）在项目添加UI测试,已经添加略过\n\\\\ 2）将./fastlane/SnapshotHelper.swift 添加到UI测试中\n\\\\ 3）打开 AD_DemoUITests.swift ,删除setUp和tearDown方法，然后在其中添加以下代码testExample：\n \n  let app = XCUIApplication()\n  setupSnapshot(app)\n  app.launch()\n  \n  app.buttons[\"next\"].tap()\n  snapshot(\"01firstPage\") // 此处截图\n  \n  app.buttons[\"back\"].tap()\n  snapshot(\"02secondPage\") // 此处截图\n\n```\n\n打开 Fastfile ,并添加如下信息,用于配置截图\n\n```\n  desc \"Take screenshots\"\n  lane :screenshot do\n    snapshot\n  end\n```\n\n执行 `$ fastlane screenshot`, fastlane 会自动调用模拟器,执行测试并生成快照,可能会由于模拟器启动慢而导致时间稍微有点长.\n\n成功截图的提示:\n\n![](https://ooo.0o0.ooo/2017/02/07/58995745a83cd.png)\n\n### 5.创建 IPA 文件\n\n打开 fastfile,加入如下代码,配置创建 ipa \n\n``` \ndesc \"Create ipa\"\n  lane :build do\n    increment_build_number\n    gym\n  end\n```\n\n保存并执行如下操作,将自动创建 IPA 包\n\n``` \n$ fastlane build\n```\n\n\n如果出现错误: `There does not seem to be a CURRENT_PROJECT_VERSION key set for this project.  Add this key to your target's expert build settings.`\n[请查阅此处](https://developer.apple.com/library/content/qa/qa1827/_index.html)\n\n这是一个自动增加构建版本号的设置,需要手动修改.\n\n### 6.上传 IPA 文件到 ITC \n\n打开 Fastfile ,添加如下代码:\n\n``` \ndesc \"Upload to App Store\"\n  lane :upload do\n    deliver\n  end\n```\n\n然后执行命令,上传到 ITC :\n\n``` \n$ fastlane upload\n```\n\n期间,会创建一个 html 形式的预览文件,确认没问题输入 y;\n\n当然最有可能的错误就是网络链接的问题: `Please use diagnostic mode to check connectivity. You need to have outbound access to TCP port 443.` 重新配置代理即可.\n\n### 7.配置 Deliverfile\n\n其实上传 ITC 最主要的文件是 Deliverfile,配置好 Deliverfile 后,可以删除 metadata 文件夹中的文本配置.最终配置如下图:\n\n![](https://ooo.0o0.ooo/2017/02/08/589ac0ac8d172.png)\n\n以下是主要的配置,更多更详细的[请戳文件](https://github.com/mythkiven/AD_Fastlane/blob/master/AD_Demo/fastlane/Deliverfile),里面有详细的注释,拿来即可使用\n\n``` \n\n# 1 app_identifier\napp_identifier \"com.3code.ADDemo\"\n\n# 2 用户名,Apple ID电子邮件地址\nusername \"Apple ID电子邮件地址\"  \n\n# 3 支持语言\nsupportedLanguages = {\n  \"cmn-Hans\" =\u003e \"zh-Hans\"\n}\n\n# 4 app 名称\nname({\n'zh-Hans' =\u003e \"ADDemo\"\n})\n\n# 5 描述\ndescription({\n  'zh-Hans' =\u003e \"简体中文版\"\n})\n\n# 6 提交审核信息\nsubmission_information({    \n    export_compliance_encryption_updated: false,\n    export_compliance_uses_encryption: false,\n    content_rights_contains_third_party_content: false,\n    add_id_info_uses_idfa: false\n})\n\n# 7 应用审核小组的联系信息 app 审核信息\napp_review_information(\n  first_name: \"name\",\n  last_name: \"name\",\n  phone_number: \"手机号\",\n  email_address: \"email\",\n  demo_user: \"测试账号用户名\",\n  demo_password: \"测试账号密码\",\n  notes: \"noting\"\n)\n\n# 8 copyright \ncopyright \"#{Time.now.year} 3code\"\n\n# \n```\n\n\n### 8.提交 AppStore 审核\n\n继续打开 Fastfile,修改如下代码:\n\n``` \ndesc \"Upload to App Store and submit for review\"\n  lane :upload do\n    deliver(\n      submit_for_review: true\n    )\n  end\n```\n\n然后执行命令,提交审核 :\n\n``` \n$ fastlane upload\n```\n\n\n### 9.使用一键命令\n\n添加如下的代码,可以一步搞定所有的操作:\n\n``` \ndesc \"Provision, take screenshots, build and upload to App Store\"\n  lane :do_everything do\n    provision\n    screenshot\n    build\n    upload\n  end\n```\n\n对应的命令是:\n\n``` \n$ fastlane do_everything\n```\n\n- 代码下载之后是不能直接执行一键上传 ITC ,需要自行在 ADC 配置 App ID\\证书\\描述文件,ITC 增加 App, 然后方可一键上传 App\n\n- 本文只是简单的介绍了 fastlane 的使用,更多的资料还请参考文末的链接\n\n- 如果你对 ITC 不了解,或者很少发布 App ,建议看看官方文档,要知道发布 App 也有[官方指南哦](https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide_SCh/Appendices/Properties.html)\n\n- 本文是系列文章,后续文章会陆续在这里以及我的[博客](http://3code.info)中发布,喜欢请给个✨吧\n\n### 10.参考\n\n\n- [官网](https://fastlane.tools/)\n- [github](https://github.com/fastlane/fastlane)\n- [文档](https://docs.fastlane.tools/getting-started/ios/setup/)\n\n最后给点小建议:如果遇到错误首选就是查 issues,你遇到的问题,基本前人都遇到过了.我能在2天里快速入门 fastlane 全靠看 issues 😁😁\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmythkiven%2Fad_fastlane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmythkiven%2Fad_fastlane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmythkiven%2Fad_fastlane/lists"}