封装 iOS 移动应用程序

  • 本文介绍 Citrix Endpoint Management™ 管理员如何封装第三方企业应用程序以及开发人员如何封装 ISV 应用程序。要封装 iOS 移动应用程序:

  • 使用 MDX Service。有关详细信息,请参阅MDX Service
  • 使用 MDX Toolkit,其中包括 macOS 图形界面工具和 macOS 命令行工具。macOS 命令行工具具有自定义选项,可从自动化应用程序封装过程的脚本中引用,并允许您预设一些 MDX 策略。

封装应用程序的文件类型为 .mdx。您将 .mdx 文件上载到 Endpoint Management 控制台,在该控制台中配置特定的应用程序详细信息和策略设置,这些设置由 Endpoint Management Store 强制执行。当用户登录时,应用程序将显示在应用商店中。然后,用户可以在其设备上订阅、下载和安装应用程序。

重要:

请确保用户设备已更新到与用于封装应用程序的 MDX Toolkit 版本兼容的 Secure Hub 版本。否则,用户会看到有关不兼容性的错误消息。有关详细信息,请参阅 Endpoint Management 兼容性

通过 Apple DEP 部署 iOS 设备

注册 Apple 部署计划以利用 Apple 设备注册计划 (DEP)。您可以使用 Apple DEP 在 Citrix Endpoint Management 中部署和管理 iOS 和 macOS 设备。有关详细信息,包括如何注册 Apple 部署计划,请参阅通过 Apple DEP 部署 iOS 和 macOS 设备

创建预配配置文件

在物理 iOS 设备上运行的应用程序(Apple App Store 中的应用程序除外)必须使用预配配置文件和相应的分发证书进行签名。分发有两种开发人员计划:

  • iOS Developer Program (Ad Hoc)
  • iOS Developer Enterprise Program。要封装应用程序,Citrix 建议使用 Enterprise 计划。您可以从 Apple 网站注册该计划。

  • Enterprise 配置文件允许您在无限数量的设备上运行应用程序。Ad Hoc 配置文件允许您在最多约 100 台设备上运行应用程序。

Apple 不再支持新企业帐户使用通配符 App ID。如果您的企业帐户不支持通配符 App ID,则必须创建多个显式 App ID 和预配配置文件,如下所示。

  1. 验证您是否拥有有效的 iOS 分发证书。

  2. 在 Apple Enterprise Developer 门户中,为您计划使用 MDX Toolkit 封装的每个应用程序创建一个显式 App ID。可接受的 App ID 示例为:com.CompanyName.ProductName。

  3. 在 Apple Enterprise Developer 门户中,转到 Provisioning Profiles > Distribution(预配配置文件 > 分发)并创建内部预配配置文件。对上一步中创建的每个 App ID 重复此步骤。

  4. 下载所有预配配置文件。

如果您的 Apple 企业帐户支持通配符 App ID,您可以继续使用通配符预配配置文件来封装应用程序。但是,如果您在 Secure Mail 在后台运行时使用 Apple 推送通知服务 (APNs) 进行通知,则必须使用显式预配配置文件和 App ID。

您要安装 MDX 应用程序的任何设备都需要在设备上具有预配配置文件。您可以通过电子邮件附件将配置文件分发给用户设备。用户可以通过单击附件在其 iOS 设备上添加配置文件。

有关预配配置文件和分发证书的详细信息,请参阅 Apple Developer Account Help

有关将预配配置文件部署到 iOS 设备以及处理过期配置文件的更多信息,请参阅 Endpoint Management 文章中关于预配配置文件设备策略的内容。

应用程序升级

重要:

在升级应用程序之前,请注意 App ID 的更改或使用部分通配符 App ID 预配配置文件如何影响应用程序升级。

  • 除非 App ID 已更改,否则以前封装的应用程序会就地升级。例如,如果您将 bundle ID 从 com.citrix.mail 更改为 com.example.mail,则没有升级路径。用户必须重新安装应用程序。设备会将该应用程序视为新应用程序。新版本和旧版本的应用程序都可以驻留在设备上。
  • 如果您使用部分预配配置文件(例如 com.xxxx)来封装包含 com.citrix 的 bundle ID 的应用程序,我们建议如下:删除已安装的 MDX 封装应用程序,并安装使用最新 MDX Toolkit 封装的应用程序。由于 bundle ID 从 com.citrix.mail 更改为 com.example,用户必须重新安装应用程序。
  • 当满足以下条件时,就地升级成功:如果应用程序使用完整通配符 App ID 封装,并且应用程序的新版本具有与已安装应用程序匹配的 App ID。

策略和移动生产力应用程序

注意:

MDX 10.7.5 版本是支持封装移动生产力应用程序的最终版本。您不能使用 MDX 10.7.10 及更高版本或 MDX Service 来封装 10.7.5 或更高版本的移动生产力应用程序。您必须从公共应用商店访问移动生产力应用程序。

Citrix 提供了一组通用默认策略,适用于所有移动生产力应用程序,并为某些移动生产力应用程序提供了一组特定策略。策略文件名基于捆绑包 ID。默认情况下,Citrix Endpoint Management 应用程序的策略文件名采用 com.citrix.app_policy_metadata.xml 形式,其中 app 是一个名称,例如“mail”。

如果您拥有不支持通配符应用程序 ID 的 Apple Enterprise 帐户,请执行以下操作:在打包 Endpoint Management 应用程序时,更改捆绑包 ID 中的公司标识符。例如,Secure Mail 的捆绑包 ID 为 com.citrix.mail。将该标识符中的“citrix”替换为您的公司标识符。如果您的公司标识符是“example”,则捆绑包 ID 为 com.example.mail。当您打包该应用程序时,策略文件名将是 com.example.mail_policy_metadata.xml。

为确定要应用于应用程序的策略文件,MDX Toolkit 按以下顺序查找文件,并使用找到的第一个文件:

  1. 与您的捆绑包 ID 匹配的文件名,例如 com.example.mail_policy_metadata.xml,如上例所述。
  2. 与原始捆绑包 ID 匹配的文件名,例如 com.citrix.mail_policy_metadata.xml。
  3. 与通用默认策略文件 policy_metadata.xml 匹配的文件名。

通过修改与您的捆绑包 ID 或原始捆绑包 ID 匹配的文件,为特定的 Citrix Endpoint Management 应用程序创建您自己的一组默认策略。

使用图形界面打包企业应用程序

以下步骤介绍了打包从 Endpoint Management 部署的企业应用程序的一般过程。ISV 应用程序打包的一般过程在使用图形界面打包 ISV 应用程序中进行了描述。

重要提示:

在使用图形界面打包 iOS 应用程序之前,私钥和证书都必须安装在 Mac 的“钥匙串访问”中。如果关联的分发证书未将私钥安装到“钥匙串访问”中,则图形界面不会预填充 iOS 分发证书列表。有关详细信息,请参阅本文后面的“当工具包找不到分发证书时修复您的钥匙串”。

  1. 在使用工具包打包应用程序之前,请务必备份这些应用程序的原始版本,以便在需要时可以恢复。

  2. 从 iOS 应用程序文件夹启动 MDX Toolkit,选择 For IT administrators,然后单击 Next

    MDX Toolkit Deployment options

  3. 单击 Browse,选择文件,然后单击 Next

    MDX Toolkit Choose file for deployment

  4. Verify App Details(验证应用程序详细信息)屏幕显示从应用程序获取的信息。根据需要更改预填充的信息。您可以选择指定最低和最高操作系统版本,并列出不允许运行该应用程序的设备类型。您还可以在将应用程序上载到 Citrix Endpoint Management 后更改应用程序详细信息。

  • MDX Toolkit app details

    1. Create Citrix Mobile App(创建 Citrix 移动应用程序)屏幕中,单击 Browse,选择预配配置文件,然后选择分发证书。如果 iOS 证书列表为空,请修复运行 MDX Toolkit 的计算机上的钥匙串。有关详细信息,请参阅本文后面的“当工具包找不到分发证书时修复您的钥匙串”。
    1. 如果您选择了具有显式应用程序 ID 的预配配置文件,该工具会提示您确认应用程序 ID。例如,Citrix Endpoint Management 应用程序的捆绑包 ID 为 com.citrix.ProductName。您使用的预配配置文件必须包含您的公司标识符而不是“citrix”。
  • 单击 Yes 后,单击 Create

  • MDX Toolkit app ID prompt

    1. 如果您选择了具有通配符应用程序 ID 的预配配置文件,该工具会显示可用应用程序 ID 的列表。如果您要使用的应用程序 ID 未列出,请选择其他预配配置文件。选择应用程序 ID 后,单击 Create
  • MDX Toolkit app ID prompt for wildcard

    1. 工具包会在 MDX 包创建完成后通知您。要打包另一个应用程序,请单击 Start Over
  • MDX Toolkit success message

    工具包会在打包的 iOS 应用程序的文件名末尾附加 _iOS。

  • 使用命令行打包企业 iOS 应用程序

  • 注意:

  • 请务必直接从应用程序供应商处获取第三方应用程序。从 Apple Store 下载的 iOS 应用程序已加密,无法打包。

  • 在使用工具包打包应用程序之前,请务必备份这些应用程序的原始版本,以便在需要时可以恢复。

  • 以下示例显示了一个使用默认设置的基本应用程序打包命令。请根据您的特定系统修改粗体信息。尾随的反斜杠表示命令延续到下一行。在运行命令之前,请删除这些符号。

  • 要执行这些命令,请在命令行中导航到 /Applications/Citrix/MDXToolkit/ 目录。

  • 基本的 iOS 打包命令行如下。
./CGAppCLPrepTool \
Wrap \
–Cert CERTIFICATE \
–Profile PROFILE \
-bundleID ID \
–in INPUT_FILE \
–out OUTPUT_FILE
<!--NeedCopy-->

以下是此命令行选项的示例。

./CGAppCLPrepTool \
Wrap \
–Cert “iPhone Developer: Joe Admin (12MMA4ASQB)” \
–Profile “team_profile.mobileprovision” \
-  -bundleID “com.CompanyABC.Sample” \
-  –in “~/Desktop/SampleApps/Sample.ipa” \
-  –out “~/Desktop/SampleApps/Sample.mdx”
<!--NeedCopy-->

您可以添加到上述命令的选项示例包括:

-appName “Wrapped Sample app”

-appDesc “This is my newly wrapped iOS application.”

如果可能,这两个选项都默认为从应用程序读取的值。

有关这些选项的详细信息,请参阅下一节中的“命令选项”。有关内联文档,请使用 -help 选项。

命令选项

Wrap 命令

  • Help: 显示此命令的帮助。
  • In: 必需。您正在封装的应用程序的路径和文件名。
  • Out: 可选。生成的 .mdx 文件的路径和文件名。如果省略此选项,则该文件具有与输入文件相同的路径和文件名,并具有 .mdx 扩展名。
  • outBundle: 为上传到 Intune 生成 .ipa 文件时必需。生成的 .ipa 文件的路径和文件名。
  • Cert: 必需。用于签署应用程序的证书名称。
  • Profile: 必需。用于签署应用程序的预配配置文件名称。
  • bundleID: 对于不支持通配符应用程序 ID 的企业帐户是必需的。此值是您的 Apple 捆绑包 ID。MDX Toolkit 会验证捆绑包 ID 和预配配置文件是否兼容。
  • Upgrade: 此选项适用于旧版应用程序,并将被弃用。当您使用部分通配符预配配置文件时,用于就地升级。此选项可确保新二进制文件使用与先前版本相同的授权进行签名。如果授权不匹配,用户尝试从 Secure Hub 安装升级将失败。
  • AppName: 可选。应用程序名称,如果可能,从应用程序中获取。
  • AppDesc: 可选。应用程序描述,如果可能,从应用程序中获取。
    • MinPlatform: 可选。支持的最低平台版本。默认为空白。
    • MaxPlatform: 可选。支持的最高平台版本。默认为空白。
  • ExcludedDevices: 可选。不允许运行应用程序的设备类型列表。默认为空白。
  • PolicyXML: 可选。替换 XML 策略定义文件和路径。默认为内置策略定义。示例:-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml。有关详细信息,请参阅下一节中的“为 iOS 应用程序预设 MDX 策略”。
  • useNetworkOnlylib: 此选项使用仅限网络的轻量级 MDX 动态库版本封装应用程序。使用此选项封装的应用程序只能由 Intune 管理或以非托管方式运行。它不能由 MDX 管理。
  • LogFile: 可选。日志文件的名称。
  • LogWriteLevel: 可选。日志级别,1 到 4。
  • LogDisplayLevel: 可选。标准输出的日志级别,0 到 4。

Sign 命令

  • Help: 显示此命令的帮助。
  • In: 必需。您正在封装的应用程序的路径和文件名。
  • Out: 可选。生成的 .mdx 文件的路径和文件名。如果省略此选项,则该文件具有与输入文件相同的路径和文件名,并具有 .mdx 扩展名。
  • Cert: 必需。用于签署应用程序的证书名称。
  • Profile: 必需。用于签署应用程序的预配配置文件名称。

setinfo 命令

  • Help: 显示此命令的帮助。
  • In: 必需。要修改的应用程序的路径和文件名。
  • Out: 对于 setinfo,输出路径或文件名必须与原始文件不同。
  • AppDesc: 可选。应用程序描述。如果未指定,则保持不变。
  • MinPlatform: 可选。支持的最低 SDK 级别。如果未指定,则保持不变。
  • MaxPlatform: 可选。支持的最高 SDK 级别。如果未指定,则保持不变。
  • ExcludedDevices: 可选。不允许运行应用程序的设备类型列表。如果未指定,则保持不变。
  • StoreURL: 可选。应用程序在应用商店中的 URL。如果未指定,则保持不变。
  • PolicyXML: 可选。替换 XML 策略定义文件和路径。默认为内置策略定义。示例:-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml。有关详细信息,请参阅下一节中的“为 iOS 应用程序预设 MDX 策略”。

为 iOS 应用程序预设 MDX 策略

对于您使用 MDX Toolkit 命令行工具封装的应用程序,您可以预设一些 MDX 策略。您还可以在添加应用程序时在 Citrix Endpoint Management 控制台中配置策略。

  1. 更新策略 XML 文件中的策略值。

    MDX Toolkit 安装程序会创建此策略文件:Applications/Citrix/MDXToolkit/data/policy_metadata.xml

    Note:

    iOS 和 Android 的策略文件不同。要为这两个平台预设策略,您必须更新各自的策略 XML 文件。

  2. 当您使用命令行封装应用程序时,请包含

    -policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml

识别 iOS 应用程序封装错误

如果您在封装 iOS 应用程序时遇到错误,可以使用 MDX Toolkit 日志来识别错误。您必须具有管理员权限才能查看 MDX Toolkit 日志。

当您运行 MDX Toolkit 时,该工具会将日志文件保存到以下位置:Applications > Citrix > MDXToolkit > Logs > Citrix.log。默认情况下,该工具会在日志中保存警告和错误。

如果 iOS 应用程序发生错误,日志末尾会显示带有参数的命令行。您可以复制该命令行并在“终端”中运行它。为此,请在 Applications > Utilities 中,单击 Terminal,并使用 Mac 命令行界面评估该命令。您可能需要参考应用程序要求来评估错误。

当您使用命令行工具运行封装过程时,可以在命令行中指定以下信息:日志文件位置、日志显示级别和日志写入级别。您还可以在命令行中指定详细日志记录级别和不同的日志文件。

选择正确的预配配置文件

当您封装移动 iOS 应用程序时,可能会收到一条警告,指示应用程序已成功封装,但可能包含错误。如果选择的预配配置文件与应用程序最初使用的预配配置文件不同,则可能会发生错误。

MDX Toolkit 可以就某些预配配置文件问题向您发出警报。例如,您的应用程序可能需要以下一个或多个功能:

  • iCloud 应用程序,可为您的 iOS 应用程序启用 iCloud 数据存储
  • 推送通知,使用 Apple 推送通知服务向 iOS 设备发送消息
  • 特殊的 Keychain Access Groups Entitlement,用于访问另一个应用程序的钥匙串项目

日志会显示应用程序缺少的键值对。对于每个键值对,您可以决定是否要修复错误。如果不修复错误,应用程序可能无法正常运行。此外,根据键值对,您需要检查是否可以修复您的预配配置文件。有时,您可能无法修复预配配置文件,并且可以发布带有缺陷的应用程序。

有关配置文件详情,请参阅 Apple 开发者网站

当 Toolkit 找不到分发证书时修复您的钥匙串

如果 MDX Toolkit 无法识别您的 iOS 分发证书,则您的 iCloud 钥匙串与运行 MDX Toolkit 的计算机上的钥匙串之间可能存在问题。要修复您的本地钥匙串,请按照以下步骤操作。

  1. 在您的 Mac 上,在“系统偏好设置”中,轻按 iCloud

  2. 清除“钥匙串”复选框。

    此步骤会从 iCloud 中移除您的本地同步的钥匙串。

  3. 打开钥匙串访问,它位于“应用程序”文件夹中的“实用工具”文件夹中。

  4. 删除用于签署您的封装应用程序的 iOS 开发者证书。此证书通常是“iPhone Distribution: Company Name”证书,并附带关联的私钥。

  5. 从“钥匙串访问”菜单中,选择“钥匙串急救”。

  6. 在“钥匙串急救”对话框中,轻按修复,然后轻按开始

  7. 修复完成后,轻按验证,然后轻按开始

  8. 如果修复成功,请将您的 iOS 分发证书再次导入到“钥匙串访问”应用程序中。

  9. 启动 MDX Toolkit。 “iOS 分发配置文件”和“iOS 分发证书”字段应包含您的信息。

  10. 如有需要,将您的钥匙串重新同步到 iCloud:在“系统偏好设置”中,轻按 iCloud,然后选中“钥匙串”复选框。

重新签署包含 MDX App SDK 的应用程序

如果您的应用程序已包含使用 Xcode 内置的 MDX App SDK,则您需要使用您的企业证书或配置文件重新签署该应用程序。以下是 Sign 命令的示例。

$ /Applications/Citrix/MDXToolkit/CGAppCLPrepTool Sign -help

Command Line Interface for MDX Toolkit, version 10.4.1.290 (Env:Test)

2016-09-29 15:21:45.284 CGAppCLPrepTool[88453:5477658]

---------------------------------------------------------

Sign Command

---------------------------------------------------------

CGAppCLPrepTool Sign -in INPUTFILE -out OUTPUTFILE -Cert CERTIFICATE -Profile PROFILE

-Cert CERTIFICATE        ==> (Required)Name of the certificate to sign the app with

-Profile PROFILE         ==> (Required)Name of the provisioning profile to sign the app with

-in INPUTFILE            ==> (Required)Name of the input app file, ipa/mdx file

-out OUTPUTFILE          ==> (Optional)Name of the output app, ipa(if ipa is input)/mdx file

-upgrade                 ==> (Optional)Preserve in-place upgrade capabilty (not recommended for new apps)

---------------EXAMPLE--------------------

Sign -Cert "iPhone Distribution: Company Name" -Profile "distributionprovisioanl.mobileprovision" -in "/Users/user1/Archives/citrix.ipa"
<!--NeedCopy-->

在 iOS 设备上收集系统日志

您可以使用 iPhone Configuration Utility 工具或 Xcode 在 iOS 设备上收集系统日志。然后您可以将文件通过电子邮件发送给 Citrix 支持,以帮助排查应用程序问题。

使用配置实用工具在 iOS 设备上收集系统日志

  1. Apple 下载并安装 Apple Configurator(以前称为 iPhone Configuration Utility)工具。您可以在 iPhone 和 iPad 上使用此工具。
  2. 确保您的设备符合系统要求和支持的语言。
  3. 运行安装程序并按照提示操作,完成向导。
  4. 打开 Configurator 工具。
  5. 在“设备”下,单击您的设备。
  6. 单击控制台,然后单击清除以清除现有日志。
  7. 重现问题,单击将控制台另存为,然后将日志附加并通过电子邮件发送给支持人员。

使用 Xcode 在 iOS 设备上收集日志

  1. 在 Mac 上,单击访达,单击前往,然后单击实用工具

  2. 在“实用工具”文件夹中,双击控制台

  3. 在“控制台”中,在“设备”下,单击您要从中获取控制台日志的 iOS 设备。

  4. 重现问题。

  5. 在“控制台”中,执行以下操作之一:
    • 在主窗口中,选择最近的错误消息。
    • 在“控制台”菜单栏上,单击编辑,然后单击全选
  6. 单击编辑,然后单击拷贝

  7. 打开 TextEdit,然后将您拷贝的日志粘贴到新文件中。

  8. 将文件附加到您的电子邮件中发送给支持人员。