Tag: 持续集成

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选项卡。 […]

构建Foursquare克隆iOS应用-第3部分:持续集成

第1部分:简介和设置 第2部分:位置数据和管理依赖项 第三部分:持续集成 第4部分:流媒体位置 第5部分:网络层 第六部分:国家管理 我们将在项目中使用持续集成(CI),通过每次推送到存储库的提交自动检查应用程序的质量。 CI还可以用于自动构建应用程序并将其部署到App Store,但这不在此介绍。 您可以随时查看Github存储库以供参考。 Travis最初将负责克隆最新的存储库提交,安装其依赖项,然后将尝试构建和运行我们在上一篇文章中编写的测试。 运行CI脚本后,如果构建或测试失败,它将把您的提交/ PR标记为无效。 我选择Travis CI作为CI平台是因为我过去有一些经验。 它在开源社区中得到了很好的采用,因此它也得到了StackOverflow的良好支持。 开始使用Travis 首先,使用您的Github帐户登录TravisCI页面,并在配置文件页面中轻按开关以添加存储库。 Travis已经在听您的提交了。 然后,您需要在每次推送提交时指示Travis您想要什么。 这些说明在您需要在存储库的根文件夹中创建的.travis.yml配置文件中传递。 这是我们项目最初的文件外观: 上面的状态表示我们的应用程序已成功编译,但是使用TravisCI可以实现更多目标。 在下一步中,我们将使用TravisCI的另一个免费工具来显示我们应用程序测试的代码覆盖率。 Codecov是用于集中存储库的代码覆盖历史记录的工具。 在运行上一篇文章中描述的测试之后,将Travis配置为将代码覆盖率报告上载到Codecov。 要启用此功能,首先您需要配置Xcode项目以生成coverage数据,以便稍后上传:选择方案并点击“ Edit Scheme …”,选择“ Test”并启用“ Gather coverage data”。 要在您的存储库中启用Codecov,请首先使用您的Github帐户注册,然后在此处添加您的存储库。 完成此操作后,您就可以通过配置travis.yml开始上传覆盖率数据: 危险是另一个在代码检查期间强制执行约定的CI工具。 在这个项目中,我们将使用默认配置以及SwiftLint验证。 要使其正常工作,您基本上需要: 在项目的根目录中添加.swiftlint.yml文件,以排除外部依赖项。 在此文件中,您还可以添加自定义棉绒规则: 将个人令牌添加到存储库的TravisCI设置页面上的DANGER_GITHUB_API_TOKEN环境变量中: 指示TravisCI使用bundle exec danger运行Danger: 在CI工具上设置存储库肯定需要花费一些时间,但是,如果您的项目具有一定的复杂性,那是值得的,因为它可以节省代码检查时间并避免错误。 在项目开始时,您可能还需要为每个应用程序执行一次操作。 通过自动执行本文中描述的无聊的重复任务,您还将改善开发人员的体验。 下一部分:流媒体位置

约定

一旦有多个开发人员从事一个项目,您就会遇到麻烦。 沟通是开发人员工作的100%。 我们使用自己的语言(在会议,一对一,聊天等),肢体语言甚至我们的代码进行交流。 有趣的是,我们传达的是意图,而不是言语本身。 事实证明,接收方可以决定消息的含义,而不是发送方。 因此,我们必须尽力确保接收端能够理解我们试图传输的意图。 改善通信的一种选择是通过约定。 它们以许多不同的方式提供帮助,但最常见的是在相同情况下具有相同含义。 开始于其他项目? 如果结构具有约定,则可以更快地找到访问方式。 使用相同的术语传达对功能的更改会有所帮助。 在本文中,我们将介绍几种类型的约定,这些约定将成为您日常生活的一部分。 代码约定 每个人都听说过代码约定。 它们帮助开发人员找到进入项目的方式或更快地了解代码。 如果所有内容都以相同的样式编写,则突然之间与您之前阅读的代码或您昨天编写的代码没有太大不同。 有很多不同的代码约定和意见,所以我不建议使用特定的约定和意见。 只需选择一个并坚持下去即可。 确保团队中的每个人都遵守他们。 最好的方法是使用自动格式化程序。 关于Swift,有swiftformat。 遗憾的是,它还没有配置文件,必须通过命令行参数启动。 但是它工作得很好。 强制执行代码约定的另一个工具是swiftlint。 它只有几个自动格式选项,但是它提供了其他有趣的配置来强制一种代码风格。 提交约定 确保不丢失任何代码,并确保我们使用版本控制系统的团队合作。 这些工具试图通过锁定文件以进行更改或显示合并冲突来限制错误,以防多个开发人员更改同一文件。 提交我们的代码后,我们给其他开发人员留下了一条信息,供他们快速了解我们所做的事情,而他不必阅读更改就是代码。 提交消息比大多数开发人员认为的重要。 如果您搜索了几个小时的更改,您将欣赏到结构良好且有意义的提交消息。 由于提交消息又有不计其数的不同约定,所以我不建议您这样做。 但是我倾向于使用这个: : 这似乎包含一些开销,并且我的同事鄙视诸如更改类型之类的信息。 但是,让我们仔细看看我的建议。 票证:这是此更改影响的票证名称。 它不一定是此票证的唯一更改,但是如果我们要查找的是确切的要求,则需要该票证。 类型:我想知道此更改是由于功能,错误修正,某种必要的工作还是任何其他原因引起的。 您可以在“角度提交消息格式”中找到一些有关类型的建议。 不少人可能会对这种类型的误导性感到担忧。 如果开发人员没有分开提交,情况就是这样。 在我看来,这甚至可以帮助他学会这样做。 简介:这包含更改的意图,而不是开发人员所做的精确更改。 因此,与其编写“添加一些文件并将其更改为执行此操作或那样操作”,不如编写“此添加功能1”或“这将在注销后解决崩溃问题”。 使用这种消息,将改善您的意图交流。 结论 如您所见,有很多方法可以通过约定改善我们的沟通。 明确的意图有很长的路要走。 对于我们的项目,默认情况下,我们将遵循swiftlint建议的代码约定。 此外,将使用上述提交消息格式。 下一个:Git Hooks 上一篇:开发者机器

XCUITests课程入门复习

我已经在http://testautomationu.applitools.com/上学习了一段时间,当出现了来自Shashikant的有关iOS XCUITests的新课程时,我全力以赴并完成了工作,并获得了第一份证书! 我从事XCUItests已经有好几年了,而错误的想法课程将是多余的,但是男孩我已经学到了很多东西,可以直接帮助我工作。 页面对象的枚举是个绝招,很想看看如何将其扩展到多个屏幕和对象。 XCTContext是一个很好的小技巧,可以提供清晰的报告并分组测试块 Eyes SDK非常简单,可以在几分钟内添加视觉检查,并与组织良好的项目很好地集成。 Travis CI甚至没有Mac版本的付费墙! xcodebuild -list是简洁易用的命令,它总结了所有方案,并在您的项目中构建。 可以删除该测试,而不是删除或最差劲地评论一个不稳定的测试(我认为它会添加到-skip-testing选项中) 我不喜欢的一些东西: 在入门课程中使用BDD样式似乎不合适,特别是因为稍后引入了屏幕对象。 尽管某些项目/团队可能喜欢BDD,但这并不是所有自动化项目的事实。 有一个测验问题答案错误,这影响了我的学分 我们可以从xcodebuild或fastlane中运行BDD或任何其他xcuitest,如本课程后面所述。

拥有Fastlane的Easy CI:我们如何从运行测试到分发构建的所有iOS自动化

你好! 我是Aaptiv的iOS工程师Andrew Lection。 最近,我们为用户推出了一些很棒的新功能,例如Apple Watch应用程序和培训计划。 我们还长期认真地研究了“过去的工作方式”,以确保我们除了建立出色的新功能之外,还在构建有效,可持续的流程。 在本文中,我将与Ivan Lee(我们的首席测试工程师)合作,展示我们如何通过快速通道解决CI难题并分享经验教训,最佳实践和故障排除技巧。 这是我们团队开发过程中令人兴奋的新篇章,这仅仅是开始! 开发人员在本地运行单元测试。 PR的审阅者看不到单元测试的结果或其他代码质量信息。 工程师需要添加新的测试设备才能在Apple Developer Portal周围单击。 很多。 测试人员不知道新版本何时准备就绪-有时需要使用Diawi等外部工具来安装版本。 由于手动更新配置文件时出现问题,内部用户无法使用狗粮版本。 我们认为,我们的首要任务是专注于为iOS和Apple Watch应用程序实施持续集成(以及为最终为我们的Android应用程序实施CI奠定基础)。 由于以下原因,我们选择fastlane作为我们选择的CI工具: 这是一个开放源代码工具集,具有强大而出色的支持。 它非常灵活 ,可以让我们自动执行iOS特定任务,例如证书管理,自动增加内部版本号和设备配置。 它是便携式的,因此我们不会锁定供应商。 fastlane并未与特定的CI平台耦合,因此我们可以轻松地将fastlane实施迁移到其他SaaS提供商或我们自己的自托管CI。 您将需要整理一小部分(但很重要!)所需的东西。 这将使您的快速通道实施尽可能地顺畅无阻-而且还可以确保CI流程在很长一段时间内都可维护。 你需要: 电子邮件帐户-我们将创建一堆帐户(如果您也处理Android CI,那么还会更多!)。 一封不错的电子邮件(例如ios-ci@yourcompany.com)有助于使事情井井有条。 具有SSH密钥对的Github(或[INSERT SCM HERE])帐户-您的CI系统将需要此帐户。 如果要自动增加内部版本号,则SSH密钥对还将自动提交更改。 一个Apple Developer Admin帐户-fastlane Match为您处理所有杂乱的预配业务-您只需要为其提供一个帐户即可! 密码管理-完成后,您将拥有三个帐户,一个SSH密钥对和一个匹配存储库密码。 要为本地开发设置快速通道,您需要访问Apple Developer帐户和匹配存储库密码。 我们可以使用Lastpass Enterprise与团队安全地共享密码,尽管您也可以使用免费替代方案甚至安全的消息传递平台。 SaaS与设备实验室 fastlane正在开发以移动设备为重点的开源CI工具。 这是令人振奋的消息,我们很高兴在2018年末将fastlane.ci带出一堂。 同时,您需要在内部运行移动CI(使用Jenkins或Atlassian Bamboo)或与基于云的SaaS提供商(例如CircleCI,TravisCI或Gitlab)之间进行选择。 自托管 优点 超级灵活! 您可以控制移动CI实验室如何插入公司其余基础结构中-如果您在一个受到严格监管的行业中工作,这一点尤其重要。 您可以将所有(所有)构建集中在一个位置。 移动不一定非得是雪花! […]

使Linux上的Swift测试保持同步

如果您的Swift项目在Linux上使用swift test ,则您知道需要运行swift test –generate-linuxmain才能免费获得在Apple平台上获得的东西,即。 让XCTest知道它运行哪个测试。 该命令会生成几个仅在Linux上使用的文件,如果要在CI中的Linux上测试产品,则必须将这些文件提交到存储库中。 毫无疑问,Swift的早期生活中有一个痛点,但现在仅仅是多余的样板。 差不多了,由于每次添加新测试时都必须重新运行该命令,因此很容易忘记,然后就无法在Linux上正确地进行测试。 因此,让我们添加一个CI挂钩即可。 使用Travis的构建阶段,很容易添加一个所有测试都依赖的阶段: #使用这些默认值,除非我们在各个作业中覆盖它们 操作系统:osx 语言:迅捷 osx_image:xcode10.1 工作: 包括: -阶段:预测试 名称:检查Linux测试是否已同步 安装:快速测试–generate-linuxmain 脚本:git diff-退出代码 -阶段:测试 名称:macOS / Swift 4.2.1 脚本:快速测试–parallel -信封:SWIFT_VERSION = 4.2.1 操作系统:Linux 名称:Linux / Swift 4.2.1 语言:通用 安装: 评估“ $(curl -sL https://swiftenv.fuller.li/install.sh)” 脚本:快速测试–parallel 预测试很简单,我们运行swift test –generate-linuxmain ,然后询问git是否存在差异。 如果存在任何差异,那么我们(或贡献者) swift test –generate-linuxmain在提交之前忘记运行swift test –generate-linuxmain 。 自动化运行swift […]

如何设置Bitrise来构建通用的iOS框架并部署到Cocoapods

今天,我想分享我的管道,以使用Bitrise构建和部署iOS框架。 Bitrise是适用于iOS和Android应用程序的持续集成和交付(CI / CD)服务,可帮助自动完成应用程序的运输过程,包括测试,构建,配置和提交。 实际上,它可以交付应用程序,但是仍然可以使用Bitrise交付框架或库。 建立通用框架 构建框架时,它仅包含用于构建框架的平台的符号。 这意味着,如果您为iPhone设备进行构建,则它将仅包含armv7s / arm64体系结构的符号。 同样,如果您的框架是为iPhone模拟器构建的,则仅包含X86_64 / i386的符号,并且在用于设备构建时会产生undefined symbols错误。 为了提供可在模拟器和设备上运行的iOS框架,您需要通过以下两个步骤将其构建为通用框架。 为每个平台构建两个单独的框架(iphoneos / iphonesimulator) 使用lipo命令将两者合并为一个框架。 这是制作通用框架的示例脚本,可以在Bitrise工作流程的“ 脚本”步骤中执行该脚本 。 #为设备构建 xcodebuild -workspace MyFramework.xcworkspace -scheme $ target -configuration Release -derivedDataPath $ BITRISE_DEPLOY_DIR / iphoneos -sdk iphoneos ENABLE_BITCODE = YES BITCODE_GENERATION_MODE = bitcode OTHER_CFLAGS =“-fembed-bitcode”干净的版本 #为模拟器构建 xcodebuild -workspace MyFramework.xcworkspace -scheme $ target -configuration Release […]

吉特·胡克斯

当git在2005年推出时,它不仅改变了Linux社区,而且改变了许多开发过程。 突然之间,您不必再在一个分支机构工作了。 相反,您将为每个功能创建一堆分支,甚至更改一个分支并在以后合并它们。 它是如此的简单和快捷,没有理由不再这样做。 即使在创建新项目时,Xcode也会为您设置一个git存储库。 我记得与Perforce一起工作,与git相比,这是一个很大的麻烦。 检出文件,使它们不再受到写保护,检查哪些文件已更改,忽略本地用户相关文件(尤其是有关.xcodeproj文件的文件),并尝试在创建后合并几个月。 拥有两个不同的开发分支并没有真正帮助。 由于git是一个很好的工具和事实上的标准,我不会详细介绍如何使用它,但是有一个很好的功能,并不是每个人都知道。 钩子 Git可以选择向每个提交添加钩子。 根据您添加的钩子,将执行不同的用户定义脚本。 一些可用的挂钩是: Applypatch-msg 预先贴布 申请后 预先提交 准备提交消息 提交消息 准备提交消息 prepare-commit-msg挂钩将执行一个脚本,该脚本获取作为第一个参数$ 1传递的提交消息。 有了这个,我们现在可以根据需要任意更改消息。 在讨论有关提交消息的约定时,让我们检查容易忘记的内容以及可以自动化的部分: :以现在时的描述 由于我们为分支机构指定了票证名称,因此很容易提取: $(git branch | grep ‘*’ | sed ‘s/* //’) 此外,我们可以通过提取消息的第一部分并将其与我们拥有的不同类型进行比较来检查提交的类型: value=`cat $1` type=”$( cut -d ‘:’ -f 1 <<< "$value" )" contains=$(echo ${typeList[@]} | grep -o type | wc […]

Travis CI继续进行iOS集成流程

使用Travis CI for iOS应用程序构建持续集成管道。 meguid / travis-ci-pipeline 使用Travis CI for iOS应用程序构建持续集成管道。 – meguid / travis-ci-pipeline github.com GitHub帐户。 GitHub上托管的项目的所有者权限。 转到Travis并使用Gi​​tHub注册 接受Travis CI的授权。 您将被重定向到GitHub。 单击绿色的激活按钮,然后选择要用于Travis CI的存储库。 将一个.travis.yml文件添加到您的存储库中,以告诉Travis CI该怎么做。 将.travis.yml文件添加到git中,提交并推送,以触发Travis CI构建。 检查构建状态页面以查看构建是否通过。 你做到了!! 您已经建立了第一个婴儿CI管道 笔记: 用您的值替换WORKSPACEPATH , SCHEME和BUILDPATH 。 最好将osx_image设置为本地计算机上安装的相同xcode版本,以实现兼容性。 我更喜欢设置自定义derivedDataPath以便以后可以访问它以获取覆盖率。 使用osx_image值设置模拟器OS版本的数学设置(例如xcode10和12.0) 您可以将Swift更改为objective-c 。 通过选择产品→方案→管理方案…菜单选项,打开“管理方案”表。 在列表中找到要用于测试的目标。 确保已选中工作表最右边一栏中的“共享”复选框。 如果您的目标包括跨项目依赖项(例如CocoaPods),则需要确保已将它们配置为显式依赖项。 为此: 突出显示您的应用程序目标,然后单击“编辑…”按钮以打开“方案”编辑表。 单击方案编辑器左侧面板中的“构建”选项卡。 单击+按钮,然后将每个依赖项添加到项目中。 CocoaPods将显示为名为Pods的静态库。 将依赖项拖到测试目标上方,以便首先构建它。 现在,您的Xcode项目下面的xcshareddata / xcschemes目录中将有一个新文件。 这是您刚配置的共享方案。 […]

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

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