Tag: 持续集成

使用TeamCity进行Xcode项目持续集成的技巧

以下是TeamCity中Xcode项目的一些技巧。 (需要基本的Xcode项目和TeamCity知识) 确保Build Agent与macOS一起运行 在“ 版本控制设置”部分中附加源代码存储库 始终启用“ 版本控制设置 ”中“在build之前先删除checkout目录中的所有文件 ”选项,以避免输出产品出现意外结果。 Xcode项目运行器类型 我们可以在构建步骤中使用Xcode项目运行程序类型来轻松设置Xcode项目。 TeamCity 9.x和10.x支持Xcode Project Build Runner。 (构建配置>构建步骤>流道类型) 这可用于构建基于目标和基于模式的项目。 单元测试选项将与此流道类型一起提供。 这是一个复选框。 如果我们勾选框(构建操作>运行测试)。 单元测试和UI测试将与项目构建一起运行。 可以提供其他构建参数。 其他命令行参数:部分。 在这里,我们可以指定配置,sdk,enableCodeCoverage等。 如果我们有多个构建代理和具有不同版本(Xcode 9,Xcode 10等)的多个Xcode。 在构建设置下的“ Xcode路径:”部分中提供正确的路径是一个好主意。 其他构建步骤 我们可以在TeamCity中针对不同目的进行许多构建步骤。 几个有用的步骤是: 版本更新 使用Runner类型的“命令行”(mac终端)和命令“ PlistBuddy”,我们可以更新Xcode项目的plist版本(可以在以下网址找到一个不错的教程:https://marcosantadev.com/manage-plist-files-plistbuddy /) 将IPA上载到分发门户,例如testflight或hockeyapp(appcenter) 这通常是构建后的步骤,您可以在其中处理输出工件(IPA)。 您可以将其用作构建的最后步骤,也可以创建另一个依赖项配置,该配置仅在成功完成Xcode构建后才运行。 请记住,这里我们需要将artefact(IPA)传递给dependecy配置。

Bitrise上漂亮而智能的Xcode存档步骤日志

标准日志中包含最后10行经过修饰的Xcode日志,以使在 Bitrise 上的调试更加流畅 。 在我们的Xcode构建步骤中,我们使用xcpretty修饰原始Xcode构建日志的输出。 原始日志存储在一个临时目录中,因此,如果要详细检查故障,则可以找到原始输出。 尽管xcpretty产生了更多易于消化的输出,但是很常见的是,您无法从经过修饰的输出中分辨出确切的错误,但是它包含在原始Xcode构建日志的末尾。 因此,我们更新了Xcode步骤,以在步骤失败且输出工具为xcpretty时,将构建日志的最后10行打印到标准输出中。 这与完整日志无关,该文件仍然可用。 新的日志看起来很漂亮。 😉 ▸ Check Dependencies ❌ Code signing is required for product type ‘Application’ in SDK ‘iOS 10.3’ ❌ Code signing is required for product type ‘Application’ in SDK ‘iOS 10.3’ [33;1mIf you can’t find the reason of the error in the log, please check the […]

Bitrise上的Whitelabel应用

使用相同的代码库创建几个不同的应用程序,并在Bitrise上自动化其构建,测试和部署。 自由软件开发人员 Felipe Oliveira 分享了他在Bitrise上处理whitelabel应用程序的经验,他过去使用Bitrise成功地实现了以下两种方法。 通过这种方法,大约可以生成30个应用程序。 即使需要维护很多应用程序,它仍然是可管理的。 在此工作流程中,我们具有用于构建多个不同iOS目标 的相同项目 。 每个目标都有自己的Info.plist,图标和图像,但是所有对象的主要代码都相同。 每个目标都有一个Bitrise应用程序 。 工作流程设置了一些环境变量,例如目标名称,目标应用程序ID和iTunes凭据。 之后,我们从存储库中运行常见步骤。 所有目标的bitrise.yml文件都是相同的,并且这些步骤使用环境变量来构建应用程序并将其提交到商店。 也有 我们用于处理内部版本号的Web服务 。 我们有一个脚本步骤,调用我们的服务,发送目标ID,并接收我们注入目标Info.plist文件中的版本号。 这使我们可以从服务器单独控制每个Target的版本。 还有一个重要步骤: 签名和证书。 我们使用“ Bitrise Certificate Install步骤安装分发证书,但不安装配置文件。 我们的每个目标都有一个主要的iOS应用,一个Watch应用和一个Notification Extension,这意味着我们需要为每个目标维护6个配置文件。 我没有将它们全部6个上传到每个Bitrise应用程序中,而是将它们全部压缩并添加到存储库中。 我们有一个脚本步骤,用于解压缩该文件并复制/安装构建当前目标所需的文件。 这是我们的工作流程: – Set environment variables for the target; – Run the Bitrise.yml from the repo; – Get Build Version Number from the servers; – […]

Xcode服务器和机器人

自从Xcode 5推出以来,我一直对Apple的持续集成产品感到非常好奇。当时,我发现它不适合我从事的项目。 虽然我一直在关注它的进展,但自上次尝试以来已经过去了将近五年。 我有机会使用许多CI系统:Jenkins,Cruise Control,TeamCity,TravisCI和CircleCI。 其中,我更喜欢TravisCI。 特别地,我真的很喜欢将所有配置都保留在仓库本身中的模型。 我还发现他们的系统既可靠又有能力。 但是,对于封闭源项目,TravisCI相当昂贵。 因此,我配备了新的Mac mini,以为我会再次尝试Xcode Bots。 安装 安装Xcode Server非常简单。 只需下载Xcode,启动它,然后单击“开关”即可。 完成此操作后,将引导您设置用户以供服务器使用。 我喜欢为CI系统使用专用用户帐户的想法,这是一种常见的方法。 虽然我确实是在单独的机器上进行设置的,但我认为这对于单机设置也可以正常工作。 创建一个机器人 “ Bot”一词有点奇怪,但在其他系统中大致对应于“ job”或“ project”。 Xcode有一个向导,它将指导您完成该过程。 我有种感觉,尽管这个向导在第一次尝试时,即使是适度的复杂性,大多数项目也无法实现。 在让我的第一个Bot成功工作之前,我经历了许多错误的开始。 公平地讲,这是我几乎已经完成的所有CI工作的经验。 也许我运气不好… 我遇到了两个问题。 首先是我的Bot无法访问所需的git存储库。 第二个是设置和安装构建所需的依赖项。 解决这些问题并不需要太多工作。 Git仓库和SSH 毫不奇怪,Bot需要能够检出您的代码,然后才能执行其工作。 Bot配置有一些不同的选项可用于检出其存储库。 您可以在Bot创建UI中配置许多不同的基于SSH密钥的设置。 我选择使用“特定于Bot的SSH密钥”选项。 这提供了一个公共密钥,我使用该密钥来使机器人访问存储库。 至此,我的Bot已成功签出并构建了我的项目。 但是,由于缺少依赖关系,构建立即失败。 依存关系 我使用迦太基管理项目中的依赖项。 我也不会将任何依赖项源或工件检入源代码控制中。 这意味着仅检查源代码不足以构建项目。 机器人程序有一种机制,被称为“触发器”,可以运行集成前和集成后的脚本。 这些采取由Xcode Server用户帐户执行的bash脚本的形式。 这是安装依赖项并照顾其他环境设置的理想方法。 但是,就我而言,依赖管理器本身需要首先安装。 我通过登录到构建机器并通过自制程序安装Carthage来完成此操作。 这使迦太基对机器的所有用户可用。 但是,这还不够,因为Xcode Server用户仍无法访问Carthage存储库。 事实证明,集成前触发器与签出存储库所使用的每机器人SSH密钥不同。 […]