【问题标题】:Are "Validate" and "Distribute" steps necessary for Direct Distribution of a Mac app?直接分发 Mac 应用程序是否需要“验证”和“分发”步骤?
【发布时间】:2014-03-24 03:20:40
【问题描述】:

我正在努力使用 xCode 5 自动化发布 Mac 应用程序的过程。该应用程序仅在 Mac App Store 之外分发(直接分发)。我知道我可以添加一个在构建阶段执行的运行脚本来自动化这个过程。我目前正在使用 Craig Williams 的 ruby​​ 脚本来实现 appcast 自动化。脚本在这里:https://github.com/CraigWilliams/appcastautomation/blob/SnowLeopard/appcast_automation.rb

我的问题是:验证和分发步骤是否必要?如果代码签名已完成,我是否可以简单地运行自动化脚本并使用脚本生成的 .zip 文件,还是必须执行下面概述的步骤,然后使用脚本处理“导出”应用程序?

我目前的流程如下:

  1. 从 xCode 的产品菜单中选择“存档”。
  2. 打开管理器并按“验证”按钮。
  3. 按“分发”并选择“导出开发人员 ID 签名 申请”,然后按“下一步”。
  4. 选择我的开发者 ID 代码签名证书。
  5. 按“导出”保存 MyApp.app 文件。

获得“导出”的 .app 文件后,我将通过终端手动运行脚本以创建 Sparkle appcast 所需的 .zip 文件。作为实现自动化分发的第一步,我希望跳过 xCode 导出过程。

【问题讨论】:

    标签: xcode sparkle


    【解决方案1】:

    是的,可以完全自动化应用程序发布过程,而无需通过 Xcode 的 Organizer 来“验证”和“分发”应用程序以进行直接分发。它需要将多个运行脚本构建阶段添加到 XCode 中的目标。这就是我最终做的......

    1) 第一步是对所有框架和应用程序包进行代码签名,这样当 appcast 自动化脚本运行时,被压缩的应用程序已经经过代码签名。这省去了通过 Organizer 导出应用程序的需要。此运行脚本会在所有“复制”构建阶段之后立即添加。

    IDENTITY="Developer ID Application: My Great Company."
    FRAMEWORK_LOC="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
    codesign --verbose --force --sign "$IDENTITY" "$FRAMEWORK_LOC/Growl.framework/Versions/A"
    codesign --verbose --force --sign "$IDENTITY" "$FRAMEWORK_LOC/Sparkle.framework/Versions/A"
    codesign --verbose --force --sign "$IDENTITY" "$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME"
    

    2) 第二次运行脚本执行一个 Ruby 脚本,该脚本创建一个应用程序的 .zip 文件和一个用于通过 Sparkle 分发 appcast 的 .xml 文件。原始脚本来自这里:https://github.com/CraigWilliams/appcastautomation/blob/SnowLeopard/appcast_automation.rb

    我已经自定义了脚本,将解压后的应用程序也复制到另一个文件夹,稍后用于自动创建 .dmg 文件。

    第二次运行脚本很简单:

    script_file="appcast_automation.rb"
    $SRCROOT/$PRODUCT_NAME/${script_file}
    

    3) 第三次运行脚本创建一个带有自定义图标、背景、版本、许可协议等的 .dmg 文件...我使用 DropDMG 的命令行工具 (http://c-command.com/dropdmg/) 创建 .dmg 文件。我已将wm_licensewm_layout 目录添加到Xcode 项目中,因此脚本可以访问它们并使用git 对其进行版本控制。

    此运行脚本设置为“仅在安装时运行脚本”。

    VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
    layout_folder="${PROJECT_DIR}/${PROJECT_NAME}/wm_layout"
    license_folder="${PROJECT_DIR}/${PROJECT_NAME}/wm_license"
    dmg_folder="/Users/username/Desktop/WindowMizer/${PROJECT_NAME}_$VERSIONNUM/${PROJECT_NAME}"
    dropdmg --custom-icon --license-folder=$license_folder --layout-folder=$layout_folder $dmg_folder
    

    Xcode 中的运行脚本和自动化文件列表如下所示:

    因此,只需在 Xcode 中选择“存档”,我最终会得到:一个 .zip 文件和一个 .xml 文件,用于通过 Sparkle 进行自动更新,一个 .dmg 文件用于首次(新)下载。最终的结果是这样的……

    一切都经过代码签名并准备好部署。剩下要做的就是将文件上传到服务器,这可以自动完成,但我更喜欢手动完成。

    如果时间允许,如果允许,我会将修改后的 appcast_automation.rb 副本发布到 github 存储库中,并从此处添加指向它的链接。

    希望这对其他人有帮助!

    【讨论】:

    • 嘿!感谢您的步骤,它看起来很棒。最后,您是否在某处发布了您的 appcast_automation.rb
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2017-07-07
    相关资源
    最近更新 更多