2012-08-03 2 views
12

Mac PackageMaker 명령 행 빌드를 pkgbuild 및 productbuild로 이식하려고 시도했지만 멈추었습니다. 불행히도 나는이 새로운 프로그램이 어떻게 작동하는지 문서화하는 것을 발견하지 못했다. StackOverflow postpkgbuildproductbuild 맨 페이지를 제외하고는.PackageMaker 명령 행 빌드 설치 프로그램을 pkgbuild로 이식하십시오.

여기 내 문제가 있습니다. 다음 파일이 포함 된 루트 설치 디렉토리를 만들었습니다.

/some_path/Applications 
         /MyProgram.app 
      /Library 
        /Frameworks 
          /MyFramework.framework 
                /[library files...] 

아래 명령 줄 호출은 PackageMaker에서 유용합니다. 위의 모든 파일을 설치 한 설치 프로그램을 만들었습니다.

$ /Developer/usr/bin/packagemaker \ 
    --title "My Program" \ 
    --root /some_path \ 
    --version 1.0.0 \ 
    --filter "\.DS_Store" \ 
    --resources ./resources/ \ 
    --scripts ./scripts/ \ 
    --root-volume-only \ 
    --domain system \ 
    --verbose \ 
    --no-relocate \ 
    --target 10.5 \ 
    --id com.my_company.pkg \ 
    --out MyProgram.pkg 

이제 이것을 pkgbuild와 함께 작성하고 큰 문제가 있습니다. 이 명령을 복사/라이브러리/프레임 워크에 MyProgram.framework 디렉토리를 설치 프로그램을 빌드

$ pkgbuild \ 
    --root /some_path \ 
    --version 1.0.0 \ 
    --install-location "/" \ 
    --scripts "./scripts/" \ 
    --identifier "com.my_company.pkg" \ 
    MyProgram.pkg 

: 나는 다음과 같은 호출을 사용합니다. 그러나 MyProgram.app 파일은/Applications 디렉토리에 설치되지 않습니다. 내가 설치 로그를 볼 때 나는이 메시지가 표시 :

응용 프로그램/MyProgram.app가

은 다른 사람이 되거 수 /some_path/Applications/MyProgram.app

로 이전을 왜 ISN ' PackageMaker처럼/Applications 디렉토리에 MyProgram.app 파일을 추가하지 않았습니까?

답변

4

불행히도이 질문에 대한 대답은 내가 찾고있는 것이 아니 었습니다. 프로세스에서 PackageMaker를 제거하는 방법을 알 수 없었습니다. 그러나 PackageMaker와 함께 pkgutil을 포함하는 솔루션이있어 사용자 정의 환영 메시지, 라이센스 및 배경 이미지를 명령 줄에 완전히 포함하는 설치 프로그램을 만듭니다. PackageMaker GUI는 이 아니며이 필요합니다. 단계는 다음과 같습니다.

  1. 특수 디렉토리 구조에서 packagemaker command line 실행 파일을 실행하십시오. 이 디렉토리 구조는 Mac 파일 시스템을 반영합니다. 이전이지만 신뢰할 수있는 "PackageMaker How-to" tutorial에서 더 많은 것을 읽으십시오.
  2. 패키지 내용물을 추출하려면 pkgutil (pkgutil --expand)을 실행하십시오.
  3. 변경할 내용을 확인하십시오. 환영 메시지, 라이센스 및 배경 이미지가 있습니다.
  4. 명령 줄을 통해 이러한 파일을 변경하는 명령을 추가하십시오. 자세한 내용은 "Automating Apple's PackageMaker" tutorial을 검토하십시오. 가장 쉬운 방법은 echo '<background file="your_background.png">'과 같은 것을 실행하는 것입니다.
  5. 패키지를 다시 작성하려면 pkgutil (pkgutil --flatten)을 실행하십시오.
1

우선 설치 프로그램이 필요합니까? 프레임 워크를 응용 프로그램 안에 넣을 수 있습니다. 설치 프로그램과 pkgbuild는 조금이라도 말쑥합니다.

재배치는 사용자가 응용 프로그램을/응용 프로그램에서/WorkApplications/PrivateApplications로 이동시킬 수 있다는 사실과 관련이 있습니다. 귀하의 경우 설치 프로그램은 아마도 응용 프로그램을 빌드 폴더에 찾아서이 폴더 위에 설치합니다.

설치 프로그램이 응용 프로그램 번들 식별자와 스포트라이트를 사용하여 재배치를한다고 생각합니다. 따라서 테스트를 위해 빌드 폴더를 스포트라이트 무시 목록에 추가 할 수 있습니다.

Component Property ListBundleIsRelocatable에 정의 할 수 있습니다. 실제로 프레임 워크 전역을 설치해야하는 경우 BundleIsRelocatable을 false로 설정하려는 번들입니다.

1

The question you reference에는 패키지 작성기를 완전히 제거하는 데 필요한 모든 것이 있습니다. 내가 추가 한 한 가지는 productbuild --synthesize ... 호출 후에 sed을 사용하여 배포 파일에 행을 삽입하는 것입니다. 예를 들어, 여기에 내가 이미 구성 요소 패키지를 구축 한 후 사용하는 일부 터미널 명령은 다음과 같습니다

productbuild --synthesize --package "components/SubPackage.pkg" "distribution.xml" 
sed -i "" \ 
-e '$ i\ 
\ <title>Installer Title</title>' \ 
-e '$ i\ 
\ <background file="background.png" alignment="left" scaling="proportional" />' \ 
-e '$ i\ 
\ <welcome file="welcome.rtf" />' \ 
"distribution.xml" 
productbuild --distribution "distribution.xml" --resources "resources/" --package-path "components/" "Installer.pkg" 

pkgutil --expandpkgutil --flatten 설치 프로그램을 수정하는 데 사용하는 것을 피한다.

관련 문제