SORU
8 EKİM 2011, CUMARTESİ


Nasıl Mac App Store için çerçeve demetleri codesign musunuz?

Son bir sunulduktan sonra aşağıdaki hatayı aldım:

Geçersiz İmza - iç içe geçmiş uygulama paketi (Falanca.app/İçerik//GData Çerçeveler.çerçeve) imzalı değil, imza geçersiz ya da Apple sunumunu bir sertifika ile imzalı değil. Daha fazla bilgi için Kod İmzalama ve Uygulama korumalı alan Kılavuzuna bakın.

Geçersiz İmza - iç içe geçmiş uygulama paketi (Falanca.app/İçerik//Growl Çerçeveler.çerçeve) imzalı değil, imza geçersiz ya da Apple sunumunu bir sertifika ile imzalı değil. Daha fazla bilgi için Kod İmzalama ve Uygulama korumalı alan Kılavuzuna bakın.

Geçersiz İmza - iç içe geçmiş uygulama paket libcurl (Falanca.app/İçerik//libcurl Çerçeveler.çerçeve) imzalı değil, imza geçersiz ya da Apple sunumunu bir sertifika ile imzalı değil. Daha fazla bilgi için Kod İmzalama ve Uygulama korumalı alan Kılavuzuna bakın.

Technote 2206 her çerçeve demetleri uzattım:

codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData

Teknik notu 2206 diyor ki:

İmza Çerçeveleri

Çerçeveler düşünürsek mantıklı bir çerçeve doğrudan imzalayabilirsiniz sonucuna görünüyor demetleri. Ancak, bu durum böyle değil. İmza çerçeveleri sorunları önlemek için tüm çerçeve farklı olarak belirli bir sürümü işaret emin olun:

Bu yanlış bir yoldur#:

-s-imzalama-kimliğimi ../codesign FooBarBaz.çerçeve

Bu doğru yol mu#:

-s-imzalama-kimliğimi ../codesign FooBarBaz.çerçeve/Sürümleri/A

Ve sonuçları doğrulamak için çalıştığımda, bana iyi görünüyor:

% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement

Eğlence için, doğrudan çerçeve paket imzalama çalıştım ve hala reddedildi. Ama o belgelere ne dedi tam olarak ne olduğunu.

Bu geçersiz sayılacaktır neden bir fikriniz var mı? Benim app -- kod imzalamak için kullandığınız aynı cert geçmişte çalışmış olanı kullanıyorum.

Sadece benim tahminim mevcut plists (tanımlayıcılar sahip olmam lazım çerçevesinde Bilgi.ile ilgili bir şey olurdu plists?) veya hakları herhangi bir öneri--?

CEVAP
1 Temmuz 2012, Pazar


Baptr cevabı dayalı, tüm çerçeveleri ve diğer ikili kaynakları/(şu anda desteklenen türler: dylib, paket ve oturum açma öğeleri): yürütülebilir yardımcı codesigns bu shell script geliştirdim

#!/bin/sh

# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY! 

# Verify that $CODE_SIGN_IDENTITY is set
if [ -z "${CODE_SIGN_IDENTITY}" ] ; then
    echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing!"

    if [ "${CONFIGURATION}" = "Release" ] ; then
        exit 1
    else
        # Code-signing is optional for non-release builds.
        exit 0
    fi
fi

if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then
    echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!"

    if [ "${CONFIGURATION}" = "Release" ] ; then
        exit 1
    else
        # Code-signing is optional for non-release builds.
        exit 0
    fi
fi

ITEMS=""

FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
if [ -d "$FRAMEWORKS_DIR" ] ; then
    FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//")
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        exit 1
    fi

    ITEMS="${FRAMEWORKS}"
fi

LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/"
if [ -d "$LOGINITEMS_DIR" ] ; then
    LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app")
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        exit 1
    fi

    ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}"
fi

# Prefer the expanded name, if available.
CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
    # Fall back to old behavior.
    CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
fi

echo "Identity:"
echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}"

echo "Entitlements:"
echo "${CODE_SIGN_ENTITLEMENTS}"

echo "Found:"
echo "${ITEMS}"

# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.
SAVED_IFS=$IFS
IFS=$(echo -en "\n\b")

# Loop through all items.
for ITEM in $ITEMS;
do
    echo "Signing '${ITEM}'"
    codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}"
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        echo "Failed to sign '${ITEM}'."
        IFS=$SAVED_IFS
        exit 1
    fi
done

# Restore $IFS.
IFS=$SAVED_IFS
  1. Projenizde bir dosyaya kaydedin. Benim proje kök Scripts alt kopyasını tutuyorum.
    • codesign-frameworks.sh benimkinin adı.
  2. Bir “Script” faz “Gömülü Çerçeveler” yapım aşaması.Kopyala sonra Çalıştırın Ekle
    • Ona şöyle diyebilirsin “Codesign Gömülü Çerçeveler”.
  3. ./codesign-frameworks.sh (veya komut dosyası yukarıda adı her neyse) Kod Düzenleyicisi metin alanına yapıştırın. Eğer bir alt komut dosyasında saklıyorsanız ./Scripts/codesign-frameworks.sh kullanın.
  4. Uygulamanızı oluşturun. Tüm paketlenmiş çerçeveler codesigned olacak.

Hala bir " olacak “Kimlik: (maçlar: ...” hata, aşağıdaki yorum lütfen. belirsiz Bu artık olmamalı.

Güncelleştirilmiş 2012-11-14: kendi adına özel karakterler (bu tek tırnak işaretleri dahil değil) ile çerçeve desteği Ekleme“”. codesign-frameworks.sh

Güncelleştirilmiş 2013-01-30: tüm yollar özel karakterler için destek (bu tek tırnak işaretleri içermelidir)“”. codesign-frameworks.sh için

Güncelleştirilmiş 2013-10-29: Ekleme deneysel dylib destek.

Güncelleştirilmiş 2013-11-28: Ekleme yetkileri destek. Deneysel dylib desteği artırmak.

Güncelleştirilmiş 2014-06-13: çerçeveler içeren () iç içe çerçeveler ile Tamir codesigning sorunları. Bu find neden find -depth seçeneği ekleyerek derinlik ilk geçişi yapıldı. Bu gerekli, the issue described here yüzünden oldu. Kısacası: içeren bir paket yalnızca kendi iç içe demetleri zaten imzalanmış ise imzalanabilir.

Güncelleştirilmiş 2014-06-28: deneysel paket desteklediğini de sözlerine ekledi.

Güncelleştirilmiş 2014-08-22: EĞERLER geri Geliştirmek kod ve önleme.

Güncelleştirilmiş 2014-09-26: giriş öğeler için destek.

Güncelleştirilmiş 2014-10-26: Alıntı dizin denetler. Bu “çizgi 31/42: çok fazla argüman” hataları ve “ kod nesne değil imzalı değil” özel karakterler de dahil olmak üzere yollar için hata. sonuç düzeltmeleri

Güncelleştirilmiş 2014-11-07: kimliği belirsiz hata (“Mac Geliştirici: böyle büyük mükafat. otomatik kimlik çözünürlükte belirsiz ...”) gibi Çözme Açıkça kimliğini artık ayarlamak zorunda değilsin ve kullanabilir “Mac Geliştirici”!

Güncelleştirilmiş 2015-08-07: semantik İyileştirilmesi.

Gelişmeler hoş geldiniz!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NextGenWindows

    NextGenWindo

    8 Kasım 2011
  • sinumatic

    sinumatic

    19 Aralık 2006
  • wowchick16

    wowchick16

    17 Mart 2007