SORU
14 Temmuz 2012, CUMARTESİ


X bir profesyonel gibi Yükleyici Paketleri - Güncellemelerinden hazır paket yapma OS Geliştirici KİMLİĞİ

Not: Bu OS X, Mac App Store'a göndermek için farklı kurallara Yükleyici paketleri paketleri.

Dağ Aslanları Gatekeeper çünkü sonunda ahırın arkasına PackageMaker yapı senaryomu alıp ateş vardı. PackageMaker zaten böyle büyük mükafat çıkarıldı ve içine", bu yüzden umarım yakında unutulmuş olacak. böyle büyük mükafat için "Yardımcı Araçlar taşındı

Bu soru nasıl bir arada tutmanızı sağlar, productbuild, ve bunu değiştirmek için pkgutil kullanabilirim?

CEVAP
14 Temmuz 2012, CUMARTESİ


İki hedef oluşturma projemiz örnek: Hello world.uygulama ve Yardımcısı.app. Bir oldukbileşen paketiher biri için ve bir araya getirinürün arşivi.

Birbileşen paketiiçerir ve işletim sistemi tarafından yüklenmesi yük X Yükleyici. Bir bileşen olsa da paketi tek başına yüklenebilir, genellikle içinde yer almaktadırürün arşivi.

Araçlarımız: pkgbuild, productbuild pkgutil

Başarılı bir "Arşiv" terminalde $BUİLT_PRODUCTS_DİR açın. sonra Yapı

$ cd ~/Library/Developer/Xcode/DerivedData/.../InstallationBuildProductsLocation
$ pkgbuild --analyze --root ./HelloWorld.app HelloWorldAppComponents.plist
$ pkgbuild --analyze --root ./Helper.app HelperAppComponents.plist

Bu bize bileşeni-plıst değer "Component Property List" bölümünde açıklama bulmak verin.-root arada tutmanızı sağlarbu oluştururbileşen paketlerieğer varsayılan özelliklerini değiştirmek gerek diye atlayabilirsiniz ., ^em>--bileşeni-plistaşağıdaki komutu bir parametre.

productbuild --sentezDistribution Definition olur.

$ pkgbuild --root ./HelloWorld.app \
    --component-plist HelloWorldAppComponents.plist \
    HelloWorld.pkg
$ pkgbuild --root ./Helper.app \
    --component-plist HelperAppComponents.plist \
    Helper.pkg
$ productbuild --synthesize \
    --package HelloWorld.pkg --package Helper.pkg \
    Distribution.xml 

Distribution.xml başlık gibi şeyleri değiştirmek, arka plan, hoş geldiniz, readme, lisans ve benzeri. Senin dönünbileşen paketlerive bu komut ile dağıtım tanım içineürün arşivi:

$ productbuild --distribution ./Distribution.xml \
    --package-path . \
    ./Installer.pkg

iTunes Installers Distribution.xml bakmak mümkün olduğunu görmek için tavsiye ederim. "İTunes Yükleyin.çıkarabilirsiniz": . paket

$ pkgutil --expand "Install iTunes.pkg" "Install iTunes"

Koy hadi birlikte

Ben genellikle bir klasör distribution.xml bileşen-plists, kaynakları ve komut dosyaları gibi şeyleri içeren projemi Paket adında var.

Ve birÇalıştır Komut Faz Oluşturmak"Paket Oluşturmak için ayarlanır." adlı ^em>Sadece yükleme komut dosyasını çalıştırın:

VERSION=$(defaults read "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/Contents/Info" CFBundleVersion)

PACKAGE_NAME=`echo "$PRODUCT_NAME" | sed "s/ /_/g"`
TMP1_ARCHIVE="${BUILT_PRODUCTS_DIR}/$PACKAGE_NAME-tmp1.pkg"
TMP2_ARCHIVE="${BUILT_PRODUCTS_DIR}/$PACKAGE_NAME-tmp2"
TMP3_ARCHIVE="${BUILT_PRODUCTS_DIR}/$PACKAGE_NAME-tmp3.pkg"
ARCHIVE_FILENAME="${BUILT_PRODUCTS_DIR}/${PACKAGE_NAME}.pkg"

pkgbuild --root "${INSTALL_ROOT}" \
    --component-plist "./Package/HelloWorldAppComponents.plist" \
    --scripts "./Package/Scripts" \
    --identifier "com.test.pkg.HelloWorld" \
    --version "$VERSION" \
    --install-location "/" \
    "${BUILT_PRODUCTS_DIR}/HelloWorld.pkg"
pkgbuild --root "${BUILT_PRODUCTS_DIR}/Helper.app" \
    --component-plist "./Package/HelperAppComponents.plist" \
    --identifier "com.test.pkg.Helper" \
    --version "$VERSION" \
    --install-location "/" \
    "${BUILT_PRODUCTS_DIR}/Helper.pkg"
productbuild --distribution "./Package/Distribution.xml"  \
    --package-path "${BUILT_PRODUCTS_DIR}" \
    --resources "./Package/Resources" \
    "${TMP1_ARCHIVE}"

pkgutil --expand "${TMP1_ARCHIVE}" "${TMP2_ARCHIVE}"

# Patches and Workarounds

pkgutil --flatten "${TMP2_ARCHIVE}" "${TMP3_ARCHIVE}"

productsign --sign "Developer ID Installer: John Doe" \
    "${TMP3_ARCHIVE}" "${ARCHIVE_FILENAME}"

Eğer paket sonra değiştirmek zorunda değilsin eğer ... ile oluşturulanproductbuildpkgutil --expand pkgutil --flatten adımları kurtulmak olabilir. Ayrıca kullanabilirsiniz--işaretiüzerinde paramenterproductbuildçalışan yerineproductsign.

OS X Yükleyici işareti

Paketleri ile imzalanmıştırGeliştirici KİMLİĞİ Yükleyiciindirebileceğiniz belgesi Developer Certificate Utility.

Onlar imzalama --sign "Developer ID Installer: John Doe" parametre ile yapılırarada tutmanızı sağlar,productbuildyaproductsign.

Eğer oluşturmak için gidiyoruz eğer bir imzalı unutmayınürün arşiviproductbuild kullanarak imzalamak için bir sebep yokbileşen paketleri.

Developer Certificate Utility

Tüm yol: "Güncellemelerinden Arşive Paketi Kopyalayın

Böyle büyük mükafat Arşive bir şey kopyalamak için kullanamayızÇalıştır Komut Faz Oluşturmak. Bu Şema bir Eylem kullanmamız gerekiyor.

Şema düzenleme ve Arşiv genişletme. Ardından post-eylemler ve bir ekleyinYeni Kod Eylem Çalıştırın:

İçinde Böyle Büyük Mükafat 6:

#!/bin/bash

PACKAGES="${ARCHIVE_PATH}/Packages"

PACKAGE_NAME=`echo "$PRODUCT_NAME" | sed "s/ /_/g"`
ARCHIVE_FILENAME="$PACKAGE_NAME.pkg"
PKG="${OBJROOT}/../BuildProductsPath/${CONFIGURATION}/${ARCHIVE_FILENAME}"

if [ -f "${PKG}" ]; then
    mkdir "${PACKAGES}"
    cp -r "${PKG}" "${PACKAGES}"
fi

5, PKG için bu değeri kullanın: böyle büyük mükafat

PKG="${OBJROOT}/ArchiveIntermediates/${TARGET_NAME}/BuildProductsPath/${CONFIGURATION}/${ARCHIVE_FILENAME}"

Eğer sürüm kontrol etmiyor store Güncellemelerinden Şema bilgilerini öneririm eklemek bu kadar kabuk projenize bu kadar basit geri eylem sürükleyerek komut dosyası çalışma alanına sonrası eylemi.

Betik

Betik iki farklı türü vardır: JavaScript in Distribution Definition Files Kabuk Betikleri.

Kabuk Betikleri hakkında iyi bir Dokümantasyon ben eski paketi biçimini ifade eder çünkü ** 33, ama dikkatle bunu buldum.

Ek Okuma

Bilinen Sorunlar ve geçici Çözümler

Hedef Bölmesinde Seçin

Kullanıcı sadece tek bir seçim ile hedef seçme seçeneği sunulur - "bu bilgisayardaki tüm kullanıcılar için Yükle". Seçeneği görsel olarak seçilmiş gibi görünüyor, ancak kullanıcı bu kurulum ile, biraz karışıklığa neden devam etmek için üzerine tıklamanız gerekiyor.

Example showing the installer bug

Elma Belgeler <domains enable_anywhere ... /> kullanmak için önerir ama bu adamcağız daha yeni Hedefi Apple kullanmaz hangi Bölmesini Seç paketlerinden birini tetikler.

Bu kullanarak iptal etme <options rootVolumeOnly="true" /> eski Hedef Seçin Bölmesi ver. Example showing old Destination Select Pane


Geçerli kullanıcının ev dizini içine öğeleri yüklemek istiyor.

Kısa cevap: BUNU denemeyin!

; Çalışmayın! ÇOK uzun cevap: Installer Problems and Solutions okuyun. Hatta bunu okuduktan sonra ne yaptım biliyor musun? Bunu denemek gibi bir aptallık yaptım. Kendimi anlatmaya 10.7 veya 10.8 sorunları tamir ettiler emin değilim.

Öncelikle zaman yukarıda bahsedilen Hedef Seçin Bölmesi Hata zaman gördüm. O beni durdurdu gerekirdi, ama görmezden geldim. Eğer hafta sonra harcamak istemiyorsan eğer, ne güzel bir mavi bu seçim kullanmayın sonra yazılımınızı oldukları destek e-postalarınızı cevaplamak için tıklayın yayınladınız.

Şimdi kullanıcılar paneli çözecek kadar zeki olduğunu düşünüyorsun, değil mi? İyi işte eve klasör yükleme hakkında başka bir şey, İŞE yaramıyor!

Farklı işletim sistemi sürümleri ile yaklaşık 10 farklı makinelerde iki hafta boyunca test ettim ve ne değildir, ve asla başarısız oldu. Ben sevk. Serbest bir saat içinde geri yüklemek olamazdı kullanıcılardan kalp. İzni için ... ... düzeltmek için mümkün değildir sorunları ima günlükleri.

Bir kez daha tekrar edelim: ev dizini yüklemeler için Yükleyiciyi kullanmayın!


Hoş Geldin, beni Okumak için RTFD, Lisans ve Sonuç productbuild tarafından kabul edilmez.

Yükleyici başından beri RTFD dosyaları resimleri ile hoş Geldiniz ekranları yapmak için desteklenen, ama productbuild onları kabul etmez.

Geçici çözümler: Kukla rtf dosyası ve paketi değiştirin productbuild yapıldıktan sonra.

Not: ayrıca RTFD dosya içinde Retina görüntüler olabilir. Bunun için çoklu görüntü tıff dosyaları kullanın: tiffutil -cat Welcome.tif Welcome_2x.tif -out FinalWelcome.tif. Daha 38**.


Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • sebsebdouze

    sebsebdouze

    7 ŞUBAT 2008
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009