开发 iOS 应用程序

可以使用 MDX API 为 Citrix Endpoint Management 启用移动应用程序。本文介绍如何将 MDX 应用程序 SDK 集成到您的应用程序库,以及用于测试、认证和发布应用程序的步骤。

如何使用 MDX 应用程序 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 应用程序 SDK 添加到您的 iOS 应用程序,需将 SDK 框架链接到此应用程序,如本节中所述。适用于 iOS 的 MDX 应用程序 SDK 基于 Objective-C,其中包含一些头文件和一个静态库。

  1. 如果您尚未安装最新的 MDX Toolkit,请立即进行安装。

    1. 登录 Citrix Endpoint Management 下载页面。

    2. 展开 XenMobile Apps 和 MDX Toolkit

    3. 找到您要安装的 MDX Toolkit 版本,并单击链接开始下载。

    4. 在 macOS 10.9.4 或更高版本以及 Xcode 7 或更高版本上,通过 macOS Finder 工具打开 MDXToolkit.mpkg。

      在 Xcode 8 及更高版本中存在一个已知问题,即,必须在将应用程序推送到设备之前对项目文件进行清理。

      安装路径为 Applications/Citrix/MDXToolkit。

      安装位置

    MDX 应用程序 SDK 文件位于 Applications/Citrix/MDXToolkit/data/MDXSDK。

    在计算机上安装 MDX Toolkit 后,将 MDX 框架集成到您的 Xcode 项目。

  2. 向 Apple Xcode 项目添加数据/MDXSDK 文件夹。为此,可以将该文件夹拖放到 Xcode 项目。

  3. 修改应用程序项目的预编译的头文件中的一个代码行,以从 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 框架集成到您的 Xcode 项目。

  4. 将 data/MDXSDK/MDX.framework(或 data/MDXSDK/MDXNetworkOnly.framework)拖动到应用程序工作区的“General properties”(常规属性)面板的“Embedded Binaries”(嵌入式二进制文件)部分。这样您可以将该动态框架添加到随应用程序安装的应用程序捆绑包中包含的框架中。此外,框架会自动添加到链接到应用程序的框架列表中。

您仅应添加一个 MDX 框架。

  1. 将 data/MDXSDK/CitrixLogger.framework 拖动到应用程序工作区的“General properties”(常规属性)面板的“Embedded Binaries”(嵌入式二进制文件)部分。

  2. 添加运行脚本以从未显示在 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-->
    
  3. 添加一个运行脚本,以添加 SDKPrep 命令行。

    • 在 Xcode 中选择您的项目,然后选择 Build Phases(构建阶段)选项卡。单击左上角的加号 (+) 图标,然后单击 New Run Script Phase(新建运行脚本阶段)。
    • 打开新的运行脚本,然后将以下文本键入 Script(脚本)字段。请务必将 PACKAGEID、APPTYPE、STOREURL 和 POLICYFILE 变量更改为适用于您的应用程序的值。PACKAGEID 是您的应用程序的唯一标识符,通常为 UUID。这不是必需的,因为无论何时构建应用程序,MDX Toolkit 都会生成一个唯一的 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 应用程序所对应的应用商店 URL,已嵌入 .mdx 文件。不能将此参数与 -StoreURL 一起使用。
    -appType keyword 关键字包括“Enterprise”、“Premium”和“General”。
    -packageId UUID 此应用程序的唯一软件包 ID,通常为 UUID。非必需,因为无论何时构建应用程序,MDX Toolkit 都会生成一个唯一的 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 的钥匙串访问组条目。您的应用程序要与使用相同证书签名的其他 MDX 应用程序共享机密信息时,需要使用该条目。
    -appIdPrefix prefix 应用程序标识符前缀 - 与您的 Apple 开发者帐户相关联的团队 ID。
  4. 编译项目,并生成应用程序二进制文件。

    • 在 Xcode 中构建您的应用程序,验证其是否正确构建。
    • 通过选择 Product(产品)> Archive(存档)来存档您的应用程序。
    • 在存档应用程序后,Xcode Organizer 将自动打开。
    • 在 Organizer 中选择已存档的内部版本,然后单击 Export(导出)。
    • 选择适当的导出方法,然后单击 Next(下一步)。

    按照提示执行操作,将应用程序导出到 IPA 文件。

  5. 编译并存档项目,以生成其中包含嵌入式 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-->
    
  6. 如果已配置了通过 iTunes Connect Web 站点分发应用程序,也可以直接提交到应用商店或 TestFlight。

升级应用程序时的注意事项

各个 Citrix Endpoint Management 软件版本之间的变化会很大。必须使用最新版本的 MDX Toolkit 封装您的应用程序,才能利用最新功能和缺陷修复。请务必封装您的初始 .ipa 或 .apk 文件,而非经过修改的以前通过 MDX Toolkit 生成的文件。

务必使用相应的 MDX 应用程序 SDK 版本。

开发 iOS 应用程序