测试MacOS应用程序

本文档描述了如何为macOS应用UI测试配置CircleCI。

概述

CircleCI支持在macOS执行器上测试macOS应用程序,通过使用Fastlane和macOS权限orb,可以快速轻松地设置。

通过在Circleci上设置自动麦斯科斯应用程序测试,您可以轻松地针对不同版本的宏测试应用程序,并为您的开发管道添加自动化。

概念

为了测试macOS应用程序,Xcode Runner需要能够控制被测试应用程序,以允许它欺骗用户交互。随着时间的推移,苹果已经提高了macOS的安全性,现在触发macOS应用UI测试将导致一个弹出的权限对话框,询问你是否希望允许控制。但是,在本地开发机器上这不是问题,在无头CI环境中,不可能与UI交互。

Apple不提供基于替代命令行的工具,用于授予权限,但存在解决方法。通过手动修改权限数据库,我们可以插入新的权限,这将允许Xcode帮助程序与Apps进行交互。此文件,调用TCC.DB.,负责保存有关已请求和授予或拒绝的权限的信息。

有两个独特的TCC.DB.文件在使用。第一个副本位于主目录中〜/库/应用程序支持/ com.apple.tcc / tcc.db第二个是/图书馆/应用支持/ com.apple.TCC / TCC.db。添加或修改,我们需要编辑两个文件以确保运行时可用的权限。

虽然可以写入位于主目录中的副本,但不可能写入/图书馆/应用支持/ com.apple.TCC / TCC.db启用系统完整性保护(自macOS Mojave)。在CircleCI上,所有来自Xcode 11.7及以上的图像都禁用了系统完整性保护。试图写信给TCC.DB.在具有系统完整性保护的图像上,启用将导致作业失败。

添加权限时可以用CirCleci配置手动编写sqlite3.命令,Circleci提供了一个ORB为了简化这个问题。

支持的Xcode和MacOS版本

测试macOS应用程序只支持Xcode 11.7图像和更新版本,因为它需要禁用系统完整性保护(SIP)。较旧的图像没有禁用SIP,因此不适合测试macOS应用程序。

如需更多资料,请参阅支持的Xcode版本列表。

设置MacOS UI测试项目

配置Circleci以运行MacOS应用程序的UI测试发生在两部分。首先,Circleci配置需要添加正确的权限并设置环境以运行测试。其次,需要配置Fastlane以执行测试。

配置Circleci.

在circleciconfig.yml我们需要包括circleci / macos.orb并打电话给MacOS / Add-Mac-Uitest权限的一步。这一步确保添加了正确的权限来在macOS应用程序上运行Xcode UI测试。

如果需要其他权限,您可以了解如何将这些设置在其中麦斯科斯许可证ORB文档

样本config.yml用于测试MacOS应用程序:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-运行回声'Chruby Ruby-2.7'>>〜/ .bash_profile-mac-permissions / add-mac-uitest-permissions-运行捆绑安装-运行Bundle Exec Fastlane TestandBuild工作流程验证职位-建立测试

配置Fastlane.

FastLane允许您避免手动调用冗长的Xcode命令,然后编写一个简单的配置文件以启动MacOS应用程序测试。使用Fastlane您可以构建,签名(用于测试)并测试麦斯科座应用程序。

下面可以找到一个简单的配置。注意,此配置依赖于被配置为“Sign to Run local”的项目,因此您不需要设置Fastlane Match。如果您的应用程序需要签名才能测试,请遵循代码签名文档(代码签名文档会谈论iOS,但它也适用于麦克斯)。

# fastlane / Fastfiledefault_platform.:苹果平台:苹果before_allsetup_circle_ci结束desc“测试运行”车道:TestandBuild.扫描结束结束

可以找到完全配置的示例项目在GitHub上

使用MacOS Orb

TCC.DB.文件只是一个SQLite数据库,因此这使得这使得在作业期间可以轻松注入新的权限,或修改现有权限。

同时也可以手动将其写入sqlite3.命令,我们鼓励使用麦斯卡斯山为了简化这个问题。本节中的示例都基于orb的使用。

列出当前权限

要列出用户和系统数据库中的当前定义的权限,请调用列表权限由ORB提供的命令,例如在此示例中:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-MAC权限/列表权限

样例输出:

客户服务允许-----------------------------------------------------------COM.APPLE.TERMINAL KTCCSERVICESYSTEMPOLICEALLFILES 1 COM.APPLE.TERMINAL KTCCServiceDevelopertool 1 / USR / SBIN / SSHD KTCCServiceAccessibility 1 Com.Apple.SESTEMEV KTCCServiceacisibility 1 Com.Apple.Terminal KTCCServiceAccesibility 1

该命令生成两个步骤;一种是列出用户的内容TCC.DB.一个列出了系统TCC.DB.

上市许可类型

要授予权限,需要传递权限类型的正确类型的密钥。苹果公司没有清楚地记录这些,但可以通过运行来找到列表权限类型命令,正如此示例所示:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-mac-permissions / list-permission-types

样例输出:

中文大意:图书馆网址:http://www.ktccservicesiri网址:kTCCServiceSpeechRecognition

为macOS应用程序测试授予默认权限

对于大多数开发人员118金宝博娱乐城来说,只需要几个终端和Xcode Helper的标准权限来为MacOS应用UI测试设置环境。这些可以通过调用来设置add-uitest-permissions命令,例如在这个例子中:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-MAC-PREMISSIONS / ADD-UITEST-权限

授予新的权限

ORB可用于添加自定义权限添加许可命令。下面的示例将屏幕捕获权限授予终端。Bundle ID和允许类型都是必需的参数:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-MAC-PREMISSIONS /添加权限捆绑id.com.apple.Terminal”权限类型ktccservicescreencapture“

删除许可

如果在作业期间不太可能需要删除权限,则使用删除权限命令。在下面的示例中,我们将从终端删除屏幕捕获权限。Bundle ID和允许类型都是必需的参数:

2.1绿色原子MAC权限circleci / macos.职位建立测试苹果系统Xcode.11.7.0.脚步-结帐-MAC权限/删除权限捆绑id.com.apple.Terminal”权限类型ktccservicescreencapture“