2012-08-03 19 views
12

Tôi đã cố gắng để chuyển một dòng lệnh Mac PackageMaker dòng lệnh thành pkgbuild và productbuild nhưng tôi bị kẹt. Rất tiếc, tôi không tìm thấy nhiều tài liệu về cách các chương trình mới này hoạt động trừ các trang StackOverflow postpkgbuildproductbuild người đàn ông này.Porting PackageMaker dòng lệnh xây dựng trình cài đặt để pkgbuild

Đây là vấn đề của tôi. Tôi đã tạo thư mục cài đặt gốc có các tệp sau trong đó:

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

Cuộc gọi dòng lệnh dưới đây hoạt động tốt cho PackageMaker. Nó tạo ra một trình cài đặt đã cài đặt tất cả các tệp ở trên.

$ /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 

Bây giờ tôi đang cố gắng viết điều này với pkgbuild và gặp sự cố lớn. Tôi sử dụng cuộc gọi sau:

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

Lệnh này xây dựng trình cài đặt sao chép thư mục MyProgram.framework vào/Library/Frameworks. Tuy nhiên nó không cài đặt tệp MyProgram.app vào thư mục/Applications. Khi tôi nhìn vào các bản ghi cài đặt tôi thấy thông báo này:

Applications/MyProgram.app chuyển đến /some_path/Applications/MyProgram.app

bất cứ ai có thể làm sáng tỏ về lý do tại sao isn này' t thêm tệp MyProgram.app vào thư mục/Applications như PackageMaker đang làm?

Trả lời

4

Thật không may câu trả lời cho câu hỏi này không chính xác những gì tôi đang tìm kiếm. Tôi không thể tìm ra cách để loại bỏ PackageMaker khỏi quá trình này. Tuy nhiên có một giải pháp bao gồm pkgutil cùng với PackageMaker để tạo một trình cài đặt với thông báo chào mừng tùy chỉnh, giấy phép và hình nền hoàn toàn trên dòng lệnh. GUI của PackageMaker là KHÔNG yêu cầu. Các bước như sau:

  1. Chạy packagemaker command line thực thi trên cấu trúc thư mục đặc biệt. Cấu trúc thư mục này phản ánh hệ thống tệp Mac. Đọc thêm trong số cũ "PackageMaker How-to" tutorial.
  2. Chạy pkgutil (pkgutil --expand) để trích xuất nội dung gói
  3. Hãy xem nội dung và xác định những gì bạn muốn thay đổi. Một số tùy chọn là thông báo chào mừng, giấy phép và hình nền.
  4. Thêm lệnh để thay đổi các tệp này qua dòng lệnh. Xem lại "Automating Apple's PackageMaker" tutorial để biết thêm thông tin. Cách dễ nhất là chạy một cái gì đó như thế này echo '<background file="your_background.png">'.
  5. Chạy pkgutil (pkgutil --flatten) để xây dựng lại gói.
1

Trước hết, bạn có chắc chắn rằng bạn cần trình cài đặt không? Bạn có thể đặt khung bên trong ứng dụng. Trình cài đặt và pkgbuild hơi yếu, ít nhất là nói.

Bây giờ vấn đề ở bàn tay: Việc di chuyển phải thực hiện với thực tế là người dùng có thể di chuyển Ứng dụng từ/Applications để nói/WorkApplications/PrivateApplications. Trong trường hợp của bạn, trình cài đặt có thể tìm thấy ứng dụng của bạn trong thư mục build và cài đặt nó trong ứng dụng này.

Tôi nghĩ Trình cài đặt sử dụng Mã định danh gói ứng dụng và Tiêu điểm để di chuyển, vì vậy để kiểm tra bạn có thể thêm thư mục xây dựng vào danh sách bỏ qua Spotlight.

Bạn có thể xác định trong Component Property ListBundleIsRelocatable. Nếu bạn thực sự phải cài đặt một khung công tác toàn cầu, thì đây là một gói mà bạn muốn đặt BundleIsRelocatable thành false.

1

The question you reference có khá nhiều thứ bạn cần để loại bỏ hoàn toàn Trình tạo gói. Một điều tôi đã thêm là sử dụng sed sau lời gọi productbuild --synthesize ... để chèn các dòng vào tệp phân phối. Ví dụ, sau đây là một số lệnh ga tôi sử dụng một lần tôi đã xây dựng các gói phần:

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" 

này tránh được việc phải sử dụng pkgutil --expandpkgutil --flatten để thay đổi cài đặt.

Các vấn đề liên quan