开发 iOS 应用程序
您可以使用 MDX API 为您的移动应用程序启用 Citrix Endpoint Management。本文介绍了如何将 MDX App SDK 集成到您的应用程序库中,以及测试、认证和发布应用程序所需的步骤。
-
如何使用 MDX App SDK
-
以下是一些您可能使用 API 的示例。
-
对应用程序施加限制
您可以根据 API 调用是否指示应用程序已受管理或已封装,来控制应用程序何时允许访问某些功能或操作。例如,如果应用程序未受管理或未封装,您可能允许用户访问所有功能和操作。如果应用程序已封装但未受管理,您可能会限制某些功能或操作。如果应用程序已封装并受管理,您可能会对应用程序施加额外的限制。
- 根据 Citrix Endpoint Management 策略设置执行操作
假设您希望在 Citrix Endpoint Management 管理员将“需要 Wi-Fi”策略设置为“开”时向用户显示通知。这意味着应用程序只允许在您组织的内部网络中运行。您可以使用 API 查找策略设置,然后根据策略值更改代码。
- 根据自定义策略执行操作
您可以使用 API 在应用程序中读取自定义策略。例如,假设您希望 Citrix Endpoint Management 管理员能够在应用程序中显示通知。为此,请创建一个空自定义策略,或包含由 Citrix Endpoint Management 控制台中的管理员提供的系统消息。如果您的应用程序受管理,它可以在 Citrix Endpoint Management 管理员更改策略值时检测到。如果策略值包含消息,您的应用程序将显示通知。
有关 API 定义,请参阅适用于 iOS 的 API。
将 SDK 集成到您的应用程序库中
要将 MDX App SDK 添加到您的 iOS 应用程序中,请按照本节所述将 SDK 框架链接到您的应用程序中。适用于 iOS 的 MDX App SDK 基于 Objective-C,是头文件和静态库的集合。
-
如果您尚未安装最新的 MDX Toolkit,请立即安装。
-
展开 XenMobile® Apps and MDX Toolkit。
-
找到您要安装的 MDX Toolkit 版本,然后单击链接开始下载。
-
在 macOS 10.9.4 或更高版本以及 Xcode 7 或更高版本上,使用 macOS Finder 工具打开 MDXToolkit.mpkg。
对于 Xcode 8 及更高版本,存在一个已知问题,即在将应用程序推送到设备之前必须清理项目文件。
安装路径为 Applications/Citrix/MDXToolkit。

MDX App SDK 文件位于 Applications/Citrix/MDXToolkit/data/MDXSDK 中。
在计算机上安装 MDX Toolkit 后,将 MDX Framework 集成到您的 Xcode 项目中。
-
将 data/MDXSDK 文件夹添加到 Apple Xcode 项目。为此,您可以将该文件夹拖到 Xcode 项目中。
-
修改应用程序项目中预编译头文件中的一行代码,以从 MDX.framework 导入 MDX.h,如以下示例所示。
#ifdef__OBJC__ _ //import MDX extensions #import <AVFoundation/AVFoundation.h> #import <SystemConfiguration/SCNetworkReachability.h> #import <MDX/MDX.h> #endif <!--NeedCopy-->如果您只包含 MDX 框架的“仅限网络”版本,则应替换
#import <MDX/MDX.h.> <!--NeedCopy-->为
#import <MDXNetworkOnly/MDXNetworkOnly.h> <!--NeedCopy-->如果封装的应用程序显式调用了 MDX SDK 框架公开的 API,则 MDX.h 和 MDXNetworkOnly.h 行是可选的。
如果应用程序显式发出 MDX SDK API 调用,则在构建应用程序时必须链接并嵌入 MDX.framework 或 MDXNetworkOnly.framework 二进制文件。
- 由 MDX Toolkit 封装的预构建第三方企业应用程序不需要进行任何构建修改,因为它不进行任何显式 MDX SDK API 调用。
在计算机上安装 MDX Toolkit 后,将 MDX Framework 集成到您的 Xcode 项目中。
-
将 data/MDXSDK/MDX.framework(或 data/MDXSDK/MDXNetworkOnly.framework)拖到应用程序工作区的“General”(通用)属性面板的“Embedded Binaries”(嵌入式二进制文件)部分。通过这样做,您将该动态框架添加到随应用程序安装的应用程序包中包含的框架中。此外,该框架会自动添加到链接到应用程序的框架列表中。
您只能添加一个 MDX 框架。
-
将 data/MDXSDK/CitrixLogger.framework 拖到应用程序工作区的“General”(通用)属性面板的“Embedded Binaries”(嵌入式二进制文件)部分。
-
添加一个运行脚本,以从嵌入式框架中删除未出现在 Xcode 有效架构列表中的架构。这解决了 Apple 的要求,即嵌入式框架不能包含用于 Apple Store 应用程序构建的 iOS 模拟器架构。此脚本将自动处理所有构建目标,包括非 Apple Store 和 Apple Store 类型的构建。
echo "Strip unnecessary archs from Embedded Frameworks" cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}" for file in $(find . -type f -perm +111); do if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then continue fi # Get architectures for current file archs="$(lipo -info "${file}" | rev | cut -d ':' -f1 | rev)" # Strip any archs from frameworks not valid for current app build for arch in $archs; do if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then lipo -remove "$arch" -output "$file" "$file" || exit 1 fi done done <!--NeedCopy-->-
- 添加一个运行脚本以添加 SDKPrep 命令行。
- 在 Xcode 中选择您的项目,然后选择 Build Phases(构建阶段)选项卡。单击左上角的加号 (+) 图标,然后单击 New Run Script Phase(新建运行脚本阶段)。
- 打开新的“Run Script”(运行脚本),然后在 Script(脚本)字段中键入以下文本。请务必将 PACKAGEID、APPTYPE、STOREURL 和 POLICYFILE 变量更改为适用于您的应用程序的值。PACKAGEID 是您的应用程序的唯一标识符,通常是 UUID。这不是强制性的,因为 MDX Toolkit 在每次构建应用程序时都会生成唯一的 packageID。如果您提供 packageID,请确保您使用此命令封装的每个新应用程序版本都具有唯一的 packageID。如果此应用程序是企业应用程序,请使用参数 -Apptype Enterprise,这是默认值。对于 ISV 应用程序,您可以使用 Premium 或 General 值。
注意:
APPTYPE 支持的关键字是 Enterprise、Premium 和 General。
export PACKAGEID="your-project-PackageID" export APPTYPE="keyword" export STOREURL="http://your-store-URL" export DATE=`date +%Y-%m-%d_%H-%M-%S` export POLICYFILE=${SRCROOT}/${EXECUTABLE_NAME}/${EXECUTABLE_NAME}_policy_metadata.xml /Applications/Citrix/MDXToolkit/CGAppCLPrepTool SdkPrep -in "${CODESIGNING_FOLDER_PATH}" -out "/Users/<UserName>/Downloads/${EXECUTABLE_NAME}_${DATE}.mdx" -storeUrl "${STOREURL}" -appIdPrefix "ABCDEFGH" -packageId "${PACKAGEID}" -policyXML "${POLICYFILE}" -appType "${APPTYPE}" -entitlements "${CODE_SIGN_ENTITLEMENTS}" <!--NeedCopy-->示例:
export PACKAGEID="a96d6ed5-6632-4739-b9b6-9ad9d5600732" export APPTYPE="Enterprise export STOREURL="http://example.com/12345" export DATE=`date +%Y-%m-%d_%H-%M-%S` export POLICYFILE=${SRCROOT}/${EXECUTABLE_NAME}/${EXECUTABLE_NAME}_policy_metadata.xml /Applications/Citrix/MDXToolkit/CGAppCLPrepTool SdkPrep -in "${CODESIGNING_FOLDER_PATH}" -out "/Users/<UserName>/Downloads/${EXECUTABLE_NAME}_${DATE}.mdx" -storeUrl "${STOREURL}" -appIdPrefix "ABCDEFGH" -packageId "${PACKAGEID}" -policyXML "${POLICYFILE}" -appType "${APPTYPE}" -entitlements "${CODE_SIGN_ENTITLEMENTS}" <!--NeedCopy-->参数 描述 -in file name Xcode 生成的 .app 文件的路径。MDX Toolkit 将 MDX 特定资源嵌入到此文件中。 -out file name .mdx 文件的目标路径。使用此文件在 Citrix Endpoint Management 服务器上发布应用程序。 -storeURl URL 应用程序的 App Store URL,嵌入到 .mdx 文件中。不能将此参数与 -StoreURL 一起使用。 -appType keyword 关键字为“Enterprise”、“Premium”和“General”。 -packageId UUID 此应用程序的唯一包 ID,通常是 UUID。这不是强制性的,因为 MDX Toolkit 在每次构建应用程序时都会生成唯一的 packageID。如果您提供 packageID,请确保您使用此命令封装的每个新应用程序版本都具有唯一的 packageID。每个预配配置文件都关联一个唯一 ID。如果您在文本编辑器中打开预配配置文件 (.mobileprovision),您将看到以下带有 UUID 的 XML 标签。 <key>UUID</key> <string>4e38fb18-88b0-4806-acfa-e08bf38ec48d</string>-policyXML file name 您的应用程序的 MDX 策略模板文件的路径。 -entitlements file name 强制性(在版本 10.3.10 中引入)。应用程序的权利文件的路径。MDX Toolkit 会将 com.citrix.mdx 的密钥链访问组条目添加到此文件中。您的应用程序需要它才能使用 iOS 密钥链与其他使用相同证书签名的 MDX 应用程序共享机密。 -appIdPrefix prefix 应用程序标识符前缀 - 与您的 Apple Developer 帐户关联的团队 ID。 -
-
编译您的项目并生成应用程序二进制文件。
- 在 Xcode 中构建您的应用程序,验证它是否正确构建。
- 通过选择 Product > Archive(产品 > 归档)来归档您的应用程序。
- Xcode Organizer 会在您的应用归档后自动打开。
- 在 Organizer 中选择您归档的构建版本,然后单击导出。
- 选择适用的导出方法,然后单击下一步。
按照提示将您的应用导出为 IPA 文件。
-
编译并归档项目以生成包含嵌入式 MDX 框架的应用程序包,即 .ipa 包。Xcode 会生成一个相应的 MDX 文件,您可以将其上传到 Citrix Endpoint Management 服务器。在 Xcode 构建和归档步骤创建 IPA 包后,对 MDX 文件运行 SetInfo 命令。同时运行 -embedBundle 选项命令,将最终的 IPA 文件插入到 MDX 文件中。之后,您可以将应用程序上传到 Citrix Endpoint Management。
/Applications/Citrix/MDXToolkit/CGAppCLPrepTool SdkPrep -in "${CODESIGNING_FOLDER_PATH}" -out "/Users/<UserName>/Downloads/${EXECUTABLE_NAME}_${DATE}.mdx" " -embedBundle "/Users/deva/Desktop/{EXECUTABLE_NAME}.ipa" <!--NeedCopy--> -
如果您已通过 iTunes Connect 网站配置了应用分发,也可以直接提交到应用商店或 TestFlight。
升级应用程序的注意事项
Citrix Endpoint Management 软件在不同版本之间可能会发生显著变化。为了利用最新功能和错误修复,您必须使用最新版本的 MDX Toolkit 来封装您的应用程序。请务必封装您的原始 .ipa 或 .apk 文件,而不是之前由 MDX Toolkit 生成的修改文件。
请务必使用相应版本的 MDX App SDK。