2012-08-03 11 views
12

मैं मैक PackageMaker कमांड लाइन को pkgbuild और productbuild पर पोर्ट करने का प्रयास कर रहा हूं लेकिन मैं अटक गया हूं। दुर्भाग्यवश मुझे इस संदेश को StackOverflow post और pkgbuild और productbuild मैन पेजों को छोड़कर काम करने के बारे में कुछ भी नहीं मिला है।पोर्टिंग पैकेजमेकर कमांड लाइन बिल्डर इंस्टॉलर को pkgbuild

यहां मेरी समस्या है। मैंने रूट इंस्टॉल निर्देशिका बनाई है जिसमें निम्न फ़ाइलें हैं:

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

नीचे दिए गए कमांड लाइन कॉल पैकेजमेकर के लिए बहुत अच्छा काम करता है। इसने एक इंस्टॉलर बनाया जिसने उपरोक्त सभी फाइलें इंस्टॉल कीं।

$ /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 \ 
    --root /some_path \ 
    --version 1.0.0 \ 
    --install-location "/" \ 
    --scripts "./scripts/" \ 
    --identifier "com.my_company.pkg" \ 
    MyProgram.pkg 

यह आदेश एक इंस्टॉलर कि प्रतियां/Library/Frameworks में MyProgram.framework निर्देशिका बनाता है: मैं निम्नलिखित कॉल का उपयोग करें। हालांकि यह MyProgram.app फ़ाइल को/अनुप्रयोग निर्देशिका में स्थापित नहीं करता है। जब मैं संस्थापक को देखने की मैं इस संदेश को देखें:

अनुप्रयोग/MyProgram.app के लिए जगह बदली /some_path/Applications/MyProgram.app

किसी पर कुछ प्रकाश डाला सकता है क्यों यह 'isn MyProgram.app फ़ाइल को/अनुप्रयोग निर्देशिका जैसे पैकेजमेकर में जोड़ रहा था?

उत्तर

4

दुर्भाग्यवश इस प्रश्न का उत्तर बिल्कुल वैसा ही नहीं था जिसे मैं ढूंढ रहा था। मैं प्रक्रिया से पैकेजमेकर को खत्म करने का तरीका नहीं समझ सका। हालांकि एक समाधान है जिसमें पैकेजमेकर के साथ pkgutil शामिल है ताकि कस्टम स्वागत संदेश, लाइसेंस और पृष्ठभूमि छवि के साथ पूरी तरह से कमांड लाइन पर इंस्टॉलर बनाया जा सके। पैकेजमेकर जीयूआई आवश्यक है। चरण निम्नानुसार हैं:

  1. packagemaker command line विशेष निर्देशिका संरचना पर निष्पादन योग्य चलाएं। यह निर्देशिका संरचना मैक फ़ाइल सिस्टम को दर्शाती है। पुराने लेकिन भरोसेमंद "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 थोड़ा flaky हैं।

अब हाथ में समस्या के लिए: पुनर्वास तथ्य कोई उपयोगकर्ता/आवेदन कहने के लिए/WorkApplications/PrivateApplications आवेदन को स्थानांतरित कर सकता है कि के साथ क्या करना है। आपके मामले में इंस्टॉलर शायद आपके एप्लिकेशन को बिल्ड फ़ोल्डर में पाता है और इसे इस पर इंस्टॉल करता है।

मैं इंस्टालर, स्थानांतरण के लिए आवेदन बंडल पहचानकर्ता और स्पॉटलाइट का उपयोग करता है लगता है कि आप स्पॉटलाइट निर्माण फ़ोल्डर जोड़ सकते हैं सूची को अनदेखा परीक्षण के लिए तो।

आप Component Property ListBundleIsRelocatable में परिभाषित कर सकते हैं। यदि आपको वास्तव में एक ढांचा वैश्विक स्थापित करना है, तो यह एक बंडल है जहां आप बंडल IRelocatable को गलत पर सेट करना चाहते हैं।

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 --expand और pkgutil --flatten संस्थापक संशोधित करने के लिए उपयोग किए टाल।