V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
micyng
V2EX  ›  macOS

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

  •  
  •   micyng · Jan 16, 2014 · 3810 views
    This topic created in 4487 days ago, the information mentioned may be changed or developed.
    程序用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目录,自此之后就出现了上述的现象

    请问是什么原因?
    Supplement 1  ·  Mar 6, 2014
    自己回答一下

    首先,跟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 replies    1970-01-01 08:00:00 +08:00
    hewigovens
        1
    hewigovens  
       Jan 18, 2014
    变成灰色那种图标是系统认为程序可能损坏了, 我个人觉得你分开打包意义不大
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   885 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:29 · PVG 03:29 · LAX 12:29 · JFK 15:29
    ♥ Do have faith in what you're doing.