封装 iOS 移动应用程序
本文描述 Citrix Endpoint Management 管理员如何封装第三方企业应用程序,以及开发者如何封装 ISV 应用程序。要封装 iOS 移动应用程序,请执行以下操作:
- 使用 MDX Service。有关详细信息,请参阅MDX Service。
- 使用 MDX Toolkit,其中包括一个 macOS 图形界面工具和一个 macOS 命令行工具。macOS 命令行工具具有一些自定义选项,可从用于自动化应用程序封装过程的脚本中引用,并允许您预设一些 MDX 策略。
封装的应用程序的文件类型为 .mdx。可将 .mdx 文件上载到 Endpoint Management 控制台,然后在其中配置特定的应用程序详细信息以及由 Endpoint Management 应用商店强制执行的策略设置。用户登录时,应用程序将显示在商店中。用户之后可以订阅、下载该应用程序以及在其用户设备上安装。
下图概述了应用程序封装过程的各个步骤(从安装 MDX Toolkit 到测试移动生产力应用程序)。图下方列出了相关主题。
有关数字 1 的详细信息,请参阅:
有关数字 2 的详细信息,请参阅:
- 创建预配配置文件
- 应用程序升级
- 策略和移动生产力应用程序
- 使用图形界面进行企业应用程序封装
- 使用命令行封装企业 iOS 应用程序
- 命令选项
- 预设 iOS 应用程序的 MDX 策略
- 识别 iOS 应用程序封装错误
- 在 iOS 设备上收集系统日志
- 将 MDX 应用程序添加到 Citrix Endpoint Management
重要:
请务必使用与封装应用程序时使用的 MDX Toolkit 版本兼容的 Secure Hub 版本更新用户设备。否则,系统将显示与不兼容性有关的错误消息。有关详细信息,请参阅Endpoint Management 兼容性。
通过 Apple DEP 部署 iOS 设备
在“苹果部署计划“中注册,以利用苹果设备注册计划(DEP)。可以使用苹果DEP 在 Citrix Endpoint Management 中部署及管理 iOS 和 macOS 设备。有关详细信息,包括如何在 Apple 部署计划中注册,请参阅通过 Apple DEP 部署 iOS 和 macOS 设备。
创建预配配置文件
在物理 iOS 设备上运行的应用程序(Apple App Store 中的应用程序除外)必须通过预配配置文件和相应的分发证书进行签名。有两种类型的开发者计划可供分发:
- iOS 开发者计划(临时)
- iOS 开发者企业计划。要封装应用程序,Citrix 建议使用 Enterprise 程序。可以从Apple Web 站点中注册程序。
Enterprise 描述文件允许您在数量不受限制的设备上运行应用程序。Ad Hoc 配置文件允许您最多在 100 台设备上运行应用程序。
Apple 不再支持对新 Enterprise 帐户使用通配符应用程序 ID。如果您的 Enterprise 帐户不支持通配符应用程序 ID,则必须创建多个显式应用程序 ID 和预配配置文件,如下所示。
确认您具有有效的 iOS 分发证书。
从 Apple 企业开发人员门户中,为您计划用 MDX Toolkit 封装的每个应用程序创建一个显式应用程序 ID。可接受的应用程序 ID 示例:com.CompanyName.ProductName。
从 Apple 企业开发人员门户中,转到Provisioning Profiles(预配配置文件)> Distribution(分发),并创建一个内部预配配置文件。对在上一步中创建的每个应用程序 ID 重复此步骤。
下载所有预配配置文件。
如果您的 Apple Enterprise 帐户支持通配符应用程序 ID,您可以继续使用通配符预配配置文件来封装应用程序。但是,当 Secure Mail 在后台运行期间,如果您将 Apple 推送通知服务 (APNs) 用于通知,则必须使用显式预配配置文件和应用程序 ID。
要安装 MDX 应用程序的任何设备都需要在设备上包含预配配置文件。可以通过电子邮件附件将该描述文件分发到用户设备。用户可以通过单击该附件在其 iOS 设备上添加该描述文件。
有关预配配置文件和分发证书的详细信息,请参阅Apple Developer Account Help(Apple 开发者帐户帮助)。
有关将预配配置文件部署到 iOS 设备以及处理过期的配置文件的详细信息,请参阅预配配置文件设备策略上的“Endpoint Management”文章。
应用程序升级
重要:
在升级应用程序前,应了解一下更改应用程序 ID 或使用部分通配符应用程序 ID 预配配置文件会对应用程序升级产生何种影响。
- 先前已封装的应用程序将原位升级,除非更改了应用程序 ID。例如,如果将捆绑包 ID 从 com.citrix.mail 更改为 com.example.mail,则没有相应的升级路径。用户必须重新安装应用程序。设备将该应用程序视为新应用程序。应用程序的新版本和先前版本可以同时驻留在设备上。
- 如果您使用部分预配配置文件(例如 com.xxx)来封装某个应用程序,而该应用程序的捆绑包 ID 包含 com.citrix,我们建议您执行以下操作:删除由 MDX 封装的已安装应用程序,然后安装使用最新 MDX Toolkit 封装的应用程序。由于捆绑包 ID 从 com.citrix.mail 更改为 com.example,用户必须重新安装该应用程序。
- 如果满足以下条件,原位升级将成功:如果应用程序是使用完整通配符应用程序 ID 封装的,并且新版本的应用程序与已安装的应用程序的应用程序 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 将按以下顺序查找文件,并使用它找到的第一个文件︰
- 与您的捆绑包 ID 匹配的文件名,例如 com.example.mail_policy_metadata.xml,如前面的示例中所述。
- 与原始包 ID 匹配的文件名,例如 com.citrix.mail_policy_metadata.xml。
- 与通用默认策略文件 policy_metadata.xml 相匹配的文件名。
通过修改与您的捆绑包 ID 或原始包 ID 匹配的文件,来创建针对特定 Citrix Endpoint Management 应用程序的默认策略集
使用图形界面进行企业应用程序封装
以下步骤描述用于封装您将从 Endpoint Management 中部署的企业应用程序的常规过程。ISV App Wrapping Using the Graphical Interface(使用图形界面封装 ISV 应用程序)中描述了用于封装企业应用程序的常规过程。
重要︰
在使用图形用户界面封装 iOS 应用程序之前,必须在您的 Mac 的“钥匙串访问”应用程序上安装私钥和证书。如果关联的分发证书未在“钥匙串访问”应用程序上安装私钥,则图形界面不会预填充 iOS 分配证书列表。有关详细信息,请参阅本文后面的“在工具包找不到分发证书时修复您的钥匙串”。
在使用工具包封装应用程序之前,请务必备份这些应用程序的原始版本,以便在需要时恢复到这些版本。
从 iOS 应用程序文件夹中启动 MDX Toolkit,选择For IT administrators(适用于 IT 管理员),然后单击Next(下一步)。
单击浏览,选择该文件,然后单击下一步。
Verify Apps Details(验证应用程序详细信息)屏幕将显示从应用程序获得的信息。请根据需要更改预填充的信息。(可选)指定最低和最高操作系统版本,并列出不允许在其中运行应用程序的设备类型。将应用程序上载到 Citrix Endpoint Management 后,还可以更改应用程序详细信息。
在创建 Citrix 移动应用程序屏幕中,单击浏览,选择预配配置文件,然后选择分发证书。如果“iOS Certificate”(iOS 证书)列表为空,请在运行 MDX Toolkit 的计算机上修复钥匙串。有关详细信息,请参阅本文后面的“在工具包找不到分发证书时修复您的钥匙串”。
如果您选择了具有显式应用程序 ID 的预配配置文件,该工具会提示您确认应用程序 ID。例如,Citrix Endpoint Management 应用程序的捆绑包 ID 为 com.citrix.ProductName。您使用的预配配置文件必须包含您公司的标识符,而不是“citrix”。
在单击Yes(是)之后,单击Create(创建)。
如果您选择了具有通配符应用程序 ID 的配置文件,该工具将显示可用应用程序 ID 的列表。如果要使用的应用程序 ID 未列出,则选择另一个预配配置文件。选择应用程序 ID 后,单击创建。
工具包将告知您 MDX 软件包是何时创建的。要封装另一个应用程序,请单击重新开始。
该工具包会将 _iOS 附加到封装的 iOS 应用程序的文件名的末尾。
使用命令行封装企业 iOS 应用程序
注意:
请务必直接从应用程序供应商那里获取第三方应用程序。从 Apple 应用商店下载的 iOS 应用程序已加密且无法封装。
在使用工具包封装应用程序之前,请务必备份这些应用程序的原始版本,以便在需要时恢复到这些版本。
下例显示了使用默认设置的基本应用程序封装命令。修改特定系统的粗体显示的信息。结尾处的反斜杠指示命令将继续执行下一行。运行命令之前,请删除这些符号。
要执行这些命令,请在命令行中导航到 /Applications/Citrix/MDXToolkit/ 目录。
基本iOS封装命令行如下所示。
./CGAppCLPrepTool \ Wrap \ –Cert CERTIFICATE \ –Profile PROFILE \ -bundleID ID \ –in INPUT_FILE \ –out OUTPUT_FILE
下面是此命令行选项的示例。
./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”
可添加到上述命令的选项的示例包括:
-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 的 Enterprise 帐户而言是必需的。此值是您的 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工具包命令行工具封装的应用程序,您可以预设一些MDX策略。也可以在添加应用程序时,在 Citrix Endpoint Management 控制台中配置策略。
在策略 XML 文件中更新策略值。
MDX Toolkit 安装程序将创建此策略文件︰Applications/Citrix/MDXToolkit/data/policy_metadata.xml
注意︰
适用于 iOS 和 Android 的策略文件有所差别。要预设同时适用于这两种平台的策略,您必须更新它们各自的策略 XML 文件。
使用命令行封装应用程序时,包括
-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml
识别 iOS 应用程序封装错误
如果您在封装 iOS 应用程序时遇到错误,可以使用 MDX Toolkit 日志确定该错误。必须具有管理员权限才能查看 MDX Toolkit 日志。
运行 MDX Toolkit 时,工具将日志文件保存到以下位置:应用程序 > Citrix > MDXToolkit > 日志 > Citrix.log。默认情况下,此工具在该日志中保存警告和错误。
如果 iOS 应用程序发生错误,日志结尾处将显示一个带参数的命令行。可以复制命令行并在终端运行该命令。为此,在应用程序 > 实用程序中,单击终端,并使用 Mac 命令行界面评估命令。可能需要参阅应用程序要求来评估错误。
使用命令行工具运行封装过程时,可以在命令行中指定以下信息:日志文件位置、日志显示级别和日志写入级别。还可以在命令行中指定详细日志记录级别和其他日志文件。
选择正确的预配配置文件
封装移动 iOS 应用程序时,您可能会收到一条警告,指出应用程序已成功封装,但可能包含错误。如果所选预设预配配置文件与应用程序最初使用的预设预配配置文件不同,则可能会出现错误。
MDX Toolkit 可以就某些预置描述文件问题向您发出警报。例如,您的应用程序可能需要下面一种或多种功能:
- 允许为 iOS 应用程序使用 iCloud 数据存储的 iCloud 应用程序
- 使用 Apple 推送通知服务向 iOS 设备交付消息的推送通知
- 访问其他应用程序的钥匙串项目所需的特殊钥匙串访问组授权
日志显示应用程序缺少的密钥和值对。对于每个密钥和值对,您可以决定是否需要修复该错误。如果不需要修复该错误,应用程序可能无法正确运行。此外,根据密钥和值对,您需要检查是否能够修复预置描述文件。有时,您可能无法修复预置描述文件,并且能够发布带缺陷的应用程序。
有关置备配置文件的详细信息,请参阅Apple 开发者 Web 站点。
工具箱找不到分发证书时修复您的钥匙串
如果 MDX Toolkit 无法识别您的 iOS 分发证书,则可能表示您的 iCloud 钥匙串和运行 MDX Toolkit 的计算机上的证书链之间存在问题。要修复本地钥匙串,请执行以下步骤。
在 Mac 上,在“系统偏好设置”中,点击iCloud。
清除钥匙串复选框。
此步骤将从 iCloud 中删除您在本地同步的钥匙串。
打开钥匙串访问(位于 Applications 文件夹内的 Utilities 文件夹中)。
删除用于为您的封装应用程序签名的 iOS 开发者证书。此证书通常是具有关联私钥的“iPhone Distribution: Company Name”证书。
从钥匙串访问菜单中,选择钥匙串急救。
在“钥匙串急救”对话框中,点击修复,然后点击开始。
修复完成后,点击验证,然后点击开始。
如果修复成功,将您的 iOS 分发证书再次导入“钥匙串访问”应用程序。
启动 MDX Toolkit。iOS 分发预配配置文件和 iOS 分发证书字段应包含您的信息。
根据需要向 iCloud 重新同步您的钥匙串︰在系统偏好设置中,点击 iCloud,然后选中钥匙串复选框。
为包含 MDX 应用程序 SDK 的应用程序重新签名
如果您的应用程序已包含使用 Xcode 内置的 MDX 应用程序 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"
在 iOS 设备上收集系统日志
可以在 iOS 设备上收集系统日志,方法为使用 iPhone 配置实用工具或 Xcode。然后可通过电子邮件将这些文件发送到 Citrix 支持人员,以帮助排除应用程序故障。
使用配置实用工具在 iOS 设备上收集系统日志
- 从Apple下载并安装 Apple Configurator 工具(以前称为 iPhone Configuration Utility)。该工具在 iPhone 和 IPad 上都可使用。
- 确保您的设备满足系统要求和支持的语言。
- 运行安装程序并按照提示完成向导。
- 打开 Configurator 工具。
- 在设备下,单击自己的设备。
- 单击控制台,然后单击清除以清除现有日志。
- 重现此问题,单击Save Console As(将控制台另存为),然后附加日志并通过电子邮件发送给技术支持。
使用 Xcode 在 iOS 设备上收集日志
在 Mac 上,单击Finder,单击前往,然后单击实用工具。
在实用工具文件夹中,双击控制台。
在“控制台”的设备下,单击控制台要从中记录的 iOS 设备。
重现问题。
- 在“控制台”中,执行以下操作之一:
- 在主窗口中,选择最新的错误消息。
- 在控制台菜单栏上,单击编辑,然后单击全选。
单击编辑,然后单击拷贝。
打开文本编辑器,然后将拷贝的日志粘贴到新文件中。
- 在您的电子邮件中附加文件以发送给技术支持。