V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
micyng
V2EX  ›  macOS

问个pkgbuild的问题,postintall拷贝文件到/Applications/XX失败

  •  
  •   micyng · 2014-01-16 11:42:03 +08:00 · 3109 次点击
    这是一个创建于 3993 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序用PyQt开发
    由于Qt共享库太大,遂单独把xx.app中的Qt库做成安装包,其他部分做成一个安装包,结构类似于:

    * qt_share.pkg
    * xx.pkg

    并且先安装qt_share.pkg,后安装xx.pkg
    在安装xx.pkg的postinstall脚本中,拷贝qt共享库到指定目录,例如/Applications/XX/yy.app/Contents下,虽然脚本成功执行了,但是最终整个yy.app目录是个灰色的图标,见图

    https://skydrive.live.com/redir?resid=3396C5538FD15158!19671&authkey=!APEVXHaX90dsdpU&v=3&ithint=photo%2c.png

    --------------
    但这个现象也不是一开始就有,是因为我手动删除过/Applications/XX/yy.app目录,自此之后就出现了上述的现象

    请问是什么原因?
    第 1 条附言  ·  2014-03-06 11:57:22 +08:00
    自己回答一下

    首先,跟postinstall脚本无关

    根本原因在于pkgbuild默认行为会将其打包的app文件重定向
    因此如果刚好另外一个目录中也有个app文件,就会随机重定向,导致当前pkgbuild设置的install-location下不会写入文件(至于mac依据什么规则重定向,未知也木有兴趣去了解了)

    解决方案是:
    1. pkgbuild添加参数 --component-plist <fn>.plist
    2. 在plist文件中关闭重定向选项

    举个栗子

    <plist version="1.0">
    <array>
    <dict>
    <key>BundleHasStrictIdentifier</key>
    <true/>
    <key>BundleIsRelocatable</key>
    <!--设置为false-->
    <false/>
    <key>BundleIsVersionChecked</key>
    <false/>
    <key>BundleOverwriteAction</key>
    <string>upgrade</string>
    <key>RootRelativeBundlePath</key>
    <string>xxx.app</string>
    </dict>
    </array>
    </plist>
    1 条回复    1970-01-01 08:00:00 +08:00
    hewigovens
        1
    hewigovens  
       2014-01-18 15:06:06 +08:00
    变成灰色那种图标是系统认为程序可能损坏了, 我个人觉得你分开打包意义不大
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:36 · PVG 08:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.