Tag: fastlane

TeamCity for iOS项目

嗨! 今天的主题将是关于TeamCity以及如何在iOS项目中提供持续集成。 动机 我已经为许多项目配置了很多次TeamCity。 在项目开发过程中使用持续集成系统有很多优点。 此外,TeamCity还有很多替代方案,例如CircleCI,TravisCI等。 但是在这篇文章中,我想与大家分享我在Bright发明公司获得的TeamCity经验。 我们开始的每个项目-我们都从配置持续集成的东西开始,在这种情况下,我们使用TeamCity来处理。 这篇文章更像是一个教程,它将指导您完成iOS项目配置中的所有基本和最重要的步骤。 另外,我假设您已经下载并托管了TeamCity服务。 希望你会喜欢! 步骤1:创建一个根项目 首先,您需要转到托管TeamCity的页面。 登录后,转到“管理”页面,在“ Project-related Settings部分中单击“ Projects选项卡,然后单击“ Create project 之后,您应该看到项目中使用的版本控制的配置屏幕。 我更喜欢手动配置所有内容的方法,但是您当然可以使用预定义的部分,例如: From GitHub 。 From Bitbucket Cloud等。在此步骤中,您要做的就是提供项目的名称,然后点击“ Create 步骤2:添加VCS根目录 当然,为了构建我们的项目,我们需要提供构建源。 我们的TeamCity服务应该能够从存储库中获取更改。 如果您使用的是GitHub,BitBucket或类似的平台,则有两种方法: 向可以访问存储库的帐户提供凭据 要么 生成SSH密钥并使用它在GitHub / Bitbucket中授权TeamCity 在本文中,我将向您展示如何通过上传SSH密钥进行配置。 生成新的SSH密钥 如果您还没有听说过生成SSH密钥,或者您不知道真正的S​​SH密钥是什么,请查看 此链接 要生成新的SSH密钥,可以使用终端命令: 接下来,提供新密钥的名称和可选的密码,然后在运行ssh-keygen -t rsa命令的目录中,应该看到两个文件。 一个是带有.pub扩展名的公共密钥,第二个是私有密钥。 公开的将在github / bitbucket的存储库中使用。 私钥将在TeamCity服务中使用。 在TeamCity中使用生成的密钥 转到已创建的项目的“设置”页面,然后单击“ VCS SSH Keys选项卡。 […]

如何使用Fastlane徽章插件改善您的Beta部署流程

我们本教程的目标是在应用程序图标上覆盖应用程序版本号,内部版本号和发行类型。 希望这将使您的项目经理和测试人员更容易轻松地识别应用程序版本,而无需转到应用程序设置(或放置在任何位置)。 如果这是您第一次听说Fastlane,那么它基本上是一种工具,可让您自动执行iOS和Android应用程序的Beta部署和发布。 有多种安装Fastlane的方法。 您可以使用Homebrew,Rubygems或安装程序脚本进行安装。 任一种都可以。 $〜宝石安装快车道 如果您已经熟悉创建自己的方案和配置,请跳至下一部分 。 安装Fastlane之后,我们将根据上表为构建环境创建新的方案和配置。 要为登台构建创建新的配置,只需复制Debug配置并将其重命名为Debug Staging 。 然后复制Release配置并将其重命名为Release Staging 。 对于应用商店配置,您只需复制Release配置并将其重命名为App Store 。 而已。 然后,编辑方案以使用新创建的配置。 暂存方案将使用“ Debug Staging和Release Staging配置,而App Store方案将使用App Store配置。 对您指定的每个方案重复上述步骤。 请记住,通过选中共享复选框将方案设置为共享方案。 否则,您的方案不能在Xcode之外使用,也不能在git中跟踪。 如果您已经熟悉Fastlane,请跳到下一部分 。 要在项目上初始化Fastlane,请在终端中运行以下命令。 $〜cd / your-project#确保您在项目根目录中 $〜fastlane初始化 Fastlane然后将提示您几个问题,以帮助您快速设置项目Fastfile和Appfile 。 如果您搞砸了,请不要担心,因为稍后可能会对其进行更改。 创建快速通道 Fastlane使用通道定义部署工作流程。 在本教程中,我们将创建三个不同的通道。 用于开发构建的alpha通道,用于暂存构建的beta通道以及用于生产(应用商店)构建的store通道。 通过此设置,您只需运行以下命令即可使用Fastlane。 $〜fastlane alpha#运行Alpha通道 $〜fastlane beta#运行beta通道 $〜fastlane store#运行商店通道 要自动增加内部版本号和版本号,我们必须确保您的项目正在使用Apple Generic版本控制系统。 您可以阅读Apple的官方文档以了解更多详细信息。 我们的计划是根据git […]

Fastlane:简化iOS部署

Fastlane是一款适用于iOS和Android开发人员的工具,可自动完成繁琐的任务,例如生成屏幕截图,处理配置文件和发布应用程序。 它还支持CircleCI,Jenkings或Travis CI等CI服务器,因此您可以自定义部署工作流。 即使Fastlane在Android上完美运行,在本文中,我们也将重点关注它的iOS部分。 Fastlane可以帮助您创建脚本(使用ruby),并逐步指示如何自动将内部版本发送到Fabric,HockeyApp,TestFairy,TestFlight或App Store。 以及更多类似的内容: 轻松创建,更新,下载和修复配置文件(使用一个命令) 生成并更新您的推送通知配置文件 释放内部版本号,并在发布内部版本后将更改提交给git 车道和快车道动作 车道和快车道动作 在lane中将其视为具有一组构建“步骤”的方法,其中每个步骤代表一个快速通道动作。 通道及其构建步骤在Fastfile文件中定义,我们将在下面看到。 您可以在此处查看所有操作的详细文档。 如果您一直在存档您的应用程序并将其“手动”发送到Fabric,那么……这将会改变 假设 : 我假设您 在项目上配置了 Fabric / Crashlytics ,并且已将其链接到Fabric控制台上的组织。 安装Fastlane 有几种安装Fastlane的方法,但是在这种情况下,我们将使用Homebrew。 打开终端运行: 酿造桶安装fastlane 2.然后,导航到我们的项目目录并运行: fastlane init 之后,您应该会看到类似以下内容的内容: 3.确保输入4 ,然后按Enter,然后按照说明进行操作。 在这种情况下,我们将使用4,因为我们的意图是将Beta版本发送到Fabric Beta 您将得到如下所示的新文件夹: 将构建发送到Fabric 现在,让我们只关注fastlane目录中的Fastfile文件。 在您喜欢的文本编辑器中,打开Fastfile并执行以下操作: 哇! 您已经创建了一个基本lane来剪切构建并将其发送到Fabric Beta组织。 看看crashlytics Action文档,您可以知道可以使用哪些其他参数来crashlytics生活。 Fastlane文件 Fastlane动作 Chuck Norris可以使用盲文进行编码。 谢谢阅读! 并随时留下任何反馈。 另外,您是否想浪费一些时间阅读rant和其他更新,请在twitter @guerrix上关注我

Flutter Fastlane和iTunesConnect

安装Flutter 创建Flutter应用 运行Flutter应用 为iOS构建 初始化Fastlane 使用Fastlane创建图标 为iOS构建Flutter应用 部署到iTunesconnect 1.安装Flutter $> git clone -b beta https://github.com/flutter/flutter.git到fluttersdk $> cd fluttersdk / bin $> ./flutter医生 要将Flutter永久添加到您的路径,请添加到$ HOME / .bash_profile 导出PATH = $ HOME / fluttersdk / bin:$ PATH 2.创建Flutter应用 $> flutter创建fluttertraining 3.运行Flutter App $>打开-a模拟器 $>扑动 4.为iOS构建 $> Flutter构建iOS 5.初始化Fastlane 安装fastlane:https://docs.fastlane.tools/getting-started/ios/setup/ $>光盘ios $> fastlane初始化 6.使用Fastlane创建ios App图标 首先安装appicon插件 $> fastlane […]

教程:与Xcode 9和Fastlane的持续集成

服务器上的Xcode 下载并运行Xcode 9 打开Xcode Preferences,选择Server&Bots选项卡,然后将切换开关更改为on。 您到达“选择集成用户”的地步。 对于更简单的教程,我将选择具有登录用户权限的同一用户帐户, 具有admin特权 。我的用户为“ jenkins”。 另外,对于本教程,请为任何安全提示选择“始终允许”。 您可能会收到一条消息“为Xcode Server集成用户启用了屏幕锁定”。 您应该在System Preferences > Security & Privacy 中将其禁用 。 如果一切顺利,您应该看到类似下图的内容。

快车道

目前在用的:release desc“将新版本部署到App Store” 车道:release do crement_build_number #封存 体育馆(方案:“应用”) #提交 交付( 力量:是的, automatic_release:是的, ) crashlytics( api_token:“令牌”, build_secret:“秘密”, 组:[“ ALL”], 注意:“使用快速通道分发”, 通知:假 ) #获取版本和内部版本号 版本= get_version_number() build = get_build_number() 标签=版本+“ b” +版本 #提交 commit_version_bump(xcodeproj:“ ./app.xcodeproj”,force:true) #添加标签 add_git_tag(标签:标签) # 推 push_to_git_remote 结束 crement_build_number 要去建立设置设这两个例如:当前项目versino = 1跟Apple Generic 参考:使用agvtool自动版本和内部版本号

重新启动失败的XCTests

UI测试是相当不稳定的事情,这对任何人都不是秘密。 通常,在实践中,我们必须想出各种方法使它们尽可能稳定。 一种这样的方法是重新启动失败的测试。 如果在此类情况下的JUnit中我们有TestNG中的RetryTestHelper — IretryAnalyzer,那么为了在XCTest中测试iOS应用程序,我们没有开箱即用的东西。 经过一番谷歌搜索之后,我们找到的第一个解决方案— setup_fragile_tests_for_rescan —这是Fastlane插件。 Fastlane是一款华丽而优雅的工具,可用于自动完成移动应用程序周围的所有操作(签名,生成,测试,屏幕截图,交付等)。 该插件目前已被弃用,但取而代之的是改进的新版本。 我真的很喜欢Fastlane,但是我坚信主版本中没有包含插件。 虽然,这是一个现成的解决方案,但您的选择很可能落在它上面。 如果您不想要其他依赖项,并且准备进行少量编码,那么我们将继续。 我将告诉您,如何使用相同的Fastlane通过自写解决方案实现失败的测试的重启。 从理论上讲,不用Fastlane就可以做同样的事情,但是有了它,一切看起来都会变得更加优雅,而且整个过程真的很愉快。 安装Fastlane以运行我们的测试: $宝石安装fastlane 安装Nokogiri来解析测试结果: $ gem install nokogiri 在我们开始之前,我想添加一些理论上的补充。 由于Fastlane是Ruby上的一种DSL,因此其语法将非常接近Ruby爱好者。 要配置可运行命令及其参数,我们将使用Fastfile。 在.xcodeproj的附近,我们创建了一个隐藏的Fastlane文件夹和一个Fastfile配置,在其中将保留运行测试的整个逻辑: $ mkdir -p .fastlane $ touch ./fastlane/Fastfile $打开./fastlane/Fastfile 要运行测试,我们需要创建自己的Fastlane通道,并在其中调用名为scan的Fastlane操作: 现在,让我们编写一个Fastlane通道,它将重新启动测试指定次数。 为此,我们需要以易于解析的格式(例如.junit)生成测试报告。 运行测试一次并生成报告后,我们检查报告中是否有任何失败的测试。 如果存在,那么我们将测试循环预定次数,直到获得成功: 现在,要检查我们的重启,让我们编写两个测试: 首先,那将永远是绿色的 第二个总是红色 之后,与我们的测试运行程序一起运行Fastlane: $ fastlane测试 该解决方案的唯一可能的缺点是,在最终的测试报告中,我们将仅看到上次重启时运行的测试。 失败的测试试图通过@test_retries时间,但是在我们的示例中,它注定要失败。 但是,应该注意的是,虽然强制执行了重新启动测试的操作,但这并不是维持稳定性的最佳方法,因为您的应用程序已成为海森堡的目标。 因此,重新启动测试,减少重新启动它们的频率。 到此为止。 谢谢大家,在接下来的笔记中见(

模拟器的快速通道

询问任何经验丰富的iOS开发人员,他们会告诉您应用签名是散发大多数屁味的部分。 它不会杀死您,您可以度过难关,但是却充满了不便,愤怒和一点神秘感。 因此,Apple一直在努力实现流程自动化,因此对于产品开发人员而言,只需勾选一个复选框即可。 当无法选中该框时,还有其他工具可以帮助减轻痛苦。 因为这只是最糟糕的情况,所以我们懒惰的工程师已经制作了足够的工具,可以容忍完整的应用程序签名。 但是中间的步骤呢? 仅仅因为我们可以从纽约飞往洛杉矶,就不能更轻松地开车前往费城。 模拟器 人们不时喜欢在发送代码之前对其进行测试。 这可能是最佳做法,我不知道,我是工程师,所以提起诉讼。 有些人甚至喜欢自动化他们的测试。 如果您想在iOS上自动化测试,则意味着您将在模拟器中进行测试。 现在,您将如何在要分发到实际设备的构建中执行此操作? 您知道吗,我们早先谈论过的那些花哨的建筑? 这些将不适用于模拟器。 不,现在您需要一个新的过程。 这可能看起来很神秘,但实际上只是在做您之前所做的事情,但是大约停止了四分之一。 实际上,每次您运行针对模拟器设备的应用程序的调试版本时,Xcode都会创建有效的模拟器版本。 运行针对模拟器的构建后,您可以在派生数据文件夹中找到模拟器构建本身。 外观类似于: ~/Library/Developer/Xcode/DerivedData/{App GUID}/Build/Products/Debug-iphonesimulator 。 但这不好。 什么,您将在每次测试时调试您的应用程序,拔出模拟器应用程序进行像非利士汀一样的测试吗? 不,你比那更好。 您应该得到比这更好的东西。 您应该得到自动化的东西。 也许还有一个饼干。 Fastlane自动构建仿真器 我会说TLDR,但为时已晚。 这是使用Fastlane创建模拟器版本的方法。 xcodebuild(workspace:“#{workspace}”, 方案:“#{scheme}”, xcargs:“-configuration#{configuration} -sdk’iphonesimulator11.3′-destination’generic / platform = iOS Simulator’” )zip(路径:“ ./ simulator / Build / Products / Debug-iphonesimulator /#{app-name}”, output_path:“ ./ build /#{build-name} […]

CircleCI 2.0和iOS代码签名

没有Fastlane比赛 在TechOps中,我们使用CircleCI来测试和部署iOS应用。 最初的CircleCI 1.0很好,但是他们推出了2.0版,并停止了对1.0版以后的Xcode版本的支持。 当我开始迁移到2.0时,我遇到了以下注意事项: 在CircleCI 2.0上,唯一支持代码签名的方法是使用上述文档中所述的Fastlane Match。 我很惊讶。 你惊喜吗? 我喜欢Fastlane。 这是iOS开发工具发生的一件好事。 但是我不想在CI上使用Match,因为: 它需要带有加密证书的单独回购。 好。 但是密码仍然应该存储在CI环境变量设置中。 那么为什么身份不应该呢? 依靠互联网连接的不必要步骤 这是对Google产品的不可预测的依赖; 我们不知道它将活多久 可以说,如果我们转向Match,那么我们将不再依赖CI提供者。 但是事实并非如此,迁移文档建议使用特殊操作: 尽管其他快速通道操作可以轻松地与一组xcodebuild命令互换,但“匹配”步骤提供了一种处理签名身份和配置文件的概念,这些概念有时可能会过时。 无论如何,我已经弄清楚了如何在不使用Match的情况下使用代码签名。 解 TL; DR:很难说,但是您必须将证书和配置文件编码为base64表示形式,将其设置为env,然后将其解码回文件。 macOS钥匙串 将证书和私钥导出为p12文件,设置证书密码。 从Apple Dev Center获取配置文件(使用该身份签名)。 编码文件 在macOS Terminal中,将Certificates.p12编码为base64,然后将结果复制到剪贴板: $ base64 -i Certificates.p12 | pbcopy 并使用相同的命令来解码.mobileprovision文件。 CircleCI上下文 要在2.0中存储环境值,我们必须使用上下文。 转到组织设置→上下文→资源→添加资源。 添加具有某些名称的变量(例如Certificates ),然后将先前复制的值粘贴到Value字段中。 CircleCI配置YAML 现在,我们需要取回这些文件。 在.circleci/config.yml使用以下步骤: 现在,我们将证书和个人资料放在正确的位置。 进口证明书 现在,我们需要将签名身份添加到CI钥匙串中,CircleCI上不再存在。 我提到了setup_circle_ci特殊操作,我们将使用它来创建钥匙串,正如我们从其源代码中知道的那样。 我们必须添加以下before_all通道: […]

Xcode Server 8提示和技巧

Xcode Server —苹果公司用于自动化软件静态分析,单元测试和构建归档的连续集成系统已经存在了一段时间,但它从未得到应有的重视。 从历史上看,设置Xcode Server是一个相当繁琐且耗时的过程。 这使得一些人放弃了与Xcode IDE无缝集成的所有强大功能,并可以替代现有的CI服务器。 今年在WWDC的高级测试和持续集成会议上,Apple宣布了令人兴奋的功能和Xcode Server 8的改进。这些新的增强功能使Xcode Server 8成为您应该考虑在团队中设置的重要工具。 在此博客文章中,我想分享一些在我们团队中设置Xcode Server时学到的技巧。 我希望这些技巧将帮助您使Xcode Server成为开发团队可以依赖并从中受益的强大CI服务器。 免责声明 这篇博文不是分步教程,而是我在设置Xcode Server时学到的最佳实践的全面摘要。 如果您正在寻找详细的分步教程,请查看Honza Dvorsky撰写的大量Xcode Server教程。 另外,如果您仍然不确定自行托管自己的构建服务器以及为什么要在那里使用Xcode Server而不是其他CI服务器(云服务器或自行托管),请查看我之前的文章iOS / Mac开发的自行托管CI。 。 TL; DR 专用于Xcode Server的分离机 为集成用户创建专用用户帐户 为集成用户创建专用的GitHub / Bitbucket帐户 在项目中使用Bundler安装确切的Ruby gem和版本 在Xcode Server上使用Ruby版本管理器来管理Ruby gem 始终在集成前触发器中安装和更新Ruby gems和CocoaPods 使用Buildasaur macOS应用进行拉取请求测试 使用Fastlane部署在集成前触发器中执行的应用 入门 Xcode Server是一项在macOS Server应用程序中运行的服务,其中包括FTP,Wiki,缓存等其他有用的服务。 它可以从Mac App Store下载,价格为$ 19.99。 但是,如果您已在Apple Developer […]