首页 文章

直接分发Mac应用程序需要“验证”和“分发”步骤吗?

提问于
浏览
3

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

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

我目前的流程如下:

  • 从xCode的“产品”菜单中选择"Archive" .

  • 打开管理器并按"Validate"按钮 .

  • 按"Distribute"并选择"Export Developer ID-signed Application",然后按"Next" .

  • 选择我的开发者ID代码签名证书 .

  • 按"Export"保存MyApp.app文件 .

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

1 回答

  • 4

    是的,可以完全自动化应用程序发布过程,而无需通过Xcode的管理器来“验证”和“分发”直接分发的应用程序 . 它需要将几个Run Script Build Phases添加到XCode中的目标 . 这就是我最终做的......

    1)第一步是对所有框架和应用程序包进行编码签名,以便在appcast自动化脚本运行时,获得压缩的应用程序已经过代码签名 . 这省略了通过管理器导出应用程序的需要 . 在所有“复制”构建阶段之后立即添加此运行脚本 .

    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文件和一个.xml文件,用于通过Sparkle进行appcast分发 . 原始脚本来自这里: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中的Run Scripts和自动化文件列表如下所示:

    enter image description here

    因此,只需在Xcode中选择“Archive”,我就会得到:.zip文件和.xml文件,用于通过Sparkle自动更新,以及.dmg文件,用于首次(新)下载 . 最终结果就是......

    Final results

    所有内容都经过代码签名并可以部署 . 剩下要做的唯一事情是将文件上传到服务器,这可以自动化,但我更喜欢手动执行该部分 .

    如果时间允许,如果我被允许,我会在github存储库中发布我修改过的 appcast_automation.rb 副本,并从此处添加一个链接 .

    希望这有助于其他人!

相关问题