You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac OS PKG安装器自定义Summary页面的问题咨询

Mac OS PKG安装器自定义Summary页面的问题咨询

我完全懂你想替换PKG安装器默认Summary(也就是FinishUp)页面的需求,之前折腾自定义安装器页面的时候也踩过一模一样的坑——明明注释掉了FinishUp,结果默认页面和自定义页面一起冒出来,太闹心了。咱们来一步步拆解问题出在哪,以及怎么解决:

为什么你的现有配置没生效?

Apple的Installer框架有个“小脾气”:如果它检测到你的安装流程里没有一个标记为Finish类型的页面,就会自动追加默认的FinishUp页面。你的MyFinishUp.bundle只是被当成了一个普通的额外页面,所以安装器就同时加载了它和默认的Summary页面,这就是两个页面都显示的原因。

解决步骤

1. 给自定义Bundle标记正确的类型

首先要让Installer知道你的MyFinishUp.bundle是用来替换默认FinishUp的,这需要在bundle的Info.plist里添加一个关键配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!-- 其他必填的Bundle配置 -->
    <key>CFBundleIdentifier</key>
    <string>com.yourcompany.MyFinishUp</string>
    <key>CFBundleName</key>
    <string>MyFinishUp</string>
    <key>NSPrincipalClass</key>
    <string>MyFinishUpViewController</string> <!-- 你的页面控制器类 -->
    
    <!-- 关键:标记为Finish类型 -->
    <key>InstallerSectionType</key>
    <string>Finish</string>
</dict>
</plist>

这个InstallerSectionType = Finish是核心,告诉安装器“这个页面就是最终的Summary/Finish页面,别再加载默认的了”。

2. 修正InstallerSections.plist配置

你不需要注释掉FinishUp(反正安装器也会自动补),只要确保你的自定义bundle在SectionOrder里的正确位置即可,修正后的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>SectionOrder</key>
    <array>
        <string>Introduction</string>
        <string>ReadMe</string>
        <string>License</string>
        <string>Target</string>
        <string>PackageSelection</string>
        <string>Install</string>
        <string>MyFinishUp.bundle</string>
    </array>
</dict>
</plist>

把这个plist放在你分发包的Resources/[你的语言目录,比如English.lproj]下。

3. 用productbuild正确打包

如果是用productbuild生成安装包,要确保你的自定义bundle和InstallerSections.plist都被包含进去,推荐用--resources参数指定资源目录:

productbuild --distribution distribution.xml --resources ./path/to/your/resources --package-path ./packages YourAppInstaller.pkg

如果你还没有distribution.xml,可以先用productbuild --synthesize --package ./YourApp.pkg distribution.xml生成基础版本,再修改。

(可选)用distribution.xml直接配置Sections

如果觉得单独维护InstallerSections.plist麻烦,也可以直接在distribution.xml里定义页面顺序,这样更直观:

<installer-gui-script minSpecVersion="1.0">
    <title>Your App Installer</title>
    
    <!-- 注册自定义section -->
    <section id="myFinishUp" path="./Resources/MyFinishUp.bundle"/>
    
    <!-- 指定页面顺序 -->
    <sections>
        <section id="introduction"/>
        <section id="readme"/>
        <section id="license"/>
        <section id="target"/>
        <section id="packageselection"/>
        <section id="install"/>
        <section id="myFinishUp"/>
    </sections>
    
    <!-- 其他配置:packages、choices等 -->
    <choice id="default" title="Your App">
        <pkg-ref id="com.yourcompany.yourapp.pkg"/>
    </choice>
    <pkg-ref id="com.yourcompany.yourapp.pkg">YourApp.pkg</pkg-ref>
</installer-gui-script>

最后验证

打包完成后,用Installer.app打开你的PKG,或者用命令行测试:

open YourAppInstaller.pkg

这时候应该只会显示你的自定义Summary页面,默认的FinishUp就不会再冒出来了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:53:00