2013-03-27 2 views
5

4 개의 하위 패키지가 포함 된 Mac OS X 용 설치 패키지를 작성하려고합니다. 하위 패키지는 pkgbuild로 빌드됩니다. 마지막 패키지는 welcome 및 license 텍스트와 설치 위치 선택 사항에 대해 Distribution.xml을 사용하여 productbuild로 빌드됩니다.Mac에서 pkgbuild 및 productbuild를 사용하여 postflight 스크립트를 실행하는 방법 설치 패키지 빌드

이제 설치가 완료된 후 스크립트를 실행하고 싶습니다. 특히 모든 패키지의 영수증이 설치자에 의해 작성된 후에.

필자가 맨 페이지와 문서 및 기타 유용한 링크를 이해하기 위해서는 포스트 스크립트 스크립트를 사용해야합니다. 불행히도 나는 그것을 작동시킬 수 없다. 포스트 스크립트라는 이름을 붙이고 --script 옵션을 사용하여 pkgbuild를 사용하여 하위 패키지에 추가했지만 pkgbuild는 포스트 플라이트 스크립트를 지원하지 않습니다. postinstall라고 이름을 정하면 영수증을 적기 전에 불행히도 실행됩니다.

pkgutil 도구를 사용하여 다른 패키지의 설치 위치를 지정하는 Xcode 용 xcconfig 파일을 작성하고 싶기 때문에 영수증을 작성한 후에 실행해야합니다.

확장 된 flatten 해킹을 이미 확장 된 pkg에 Scripts/폴더를 추가하여 사용하려고 시도했지만이를 플랫 화하면 무시 된 것으로 보입니다.

내 필요를 성취 할 수있는 방법이 있습니까? (내 패키지의 선택된 설치 위치를 하위 패키지의 설치 위치에있는 파일에 작성)

가능하면 더 좋은 방법이 있다면 적어도 권장되지 않는 패키지 작성 도구를 사용하지 않는 것이 좋습니다. 나는 마침내 발견했다으로 영수증이 작성되기 전에 미리

답변

1

에서

덕분에, postflight 스크립트도 실행됩니다. 그래서이 문제에 대한 내 솔루션은 이제 다음

echo "${DSTROOT}" > "${SHARED_INSTALLER_TEMP}/my_install_location" 
을 :

내가 맥 OS 설치가 설정 한 DSTROOT 환경 변수를 읽고 공유 임시 폴더에있는 파일에 기록 내 패키지에 사전 설치 스크립트를 추가

내 패키지에이 정보가 필요합니다. postinstall 스크립트를 통해 이전 영수증을 읽습니다 (하위 패키지가 이미 설치되어 있고 사용자가 일부 하위 패키지를 제외하고 "재설치")하고 임시 파일 다른 패키지에서.

패키지가 이미 설치되어 다시 설치되지 않으면 현재 설치 위치를 사용하고 그렇지 않은 경우 임시 파일을 통해 새 설치 위치를 사용합니다. 아무것도 필요한 패키지가 너무 설치되지 않은가없는 경우 나 기본값을 사용하고 (아마 작동하지 않습니다)에 xcconfig 파일에 기록 :

pkgutil --pkg-info-plist my.package.bundle > "${SHARED_INSTALLER_TEMP}/tmp.plist" 
if [ -e "${SHARED_INSTALLER_TEMP}/tmp.plist" ]; 
then 
    MY_PACKAGE_VOL=`/usr/libexec/PlistBuddy -c "Print :volume" "${SHARED_INSTALLER_TEMP}/tmp.plist"` 
    MY_PACKAGE_DIR=`/usr/libexec/PlistBuddy -c "Print :install-location" "${SHARED_INSTALLER_TEMP}/tmp.plist"`  
    MY_PACKAGE_DIR="${MY_PACKAGE_VOL}${MY_PACKAGE_DIR}" 
fi 

을 "이전"을 읽은 후 설치 위치, 나는 있는지 확인

if [ -e "${SHARED_INSTALLER_TEMP}/my_install_location" ]; 
then 
    MY_PACKAGE_DIR=`cat "${SHARED_INSTALLER_TEMP}/my_install_location"` 
fi 

... 
Write the xcconfig file... 
... 

사람이 더 나은 솔루션이 알려 경우 : 나는 새로운 다른 패키지에서 이전에 작성된 임시 파일을 사용하여 설치 위치를 가지고있다.