2013-08-15 6 views
7

पर उपलब्ध कीचेन सर्टिफिकेट बनाना मेरे पास एक बांस योजना है जो एक पैकेज बनाता है, और मैं अपने डेवलपर प्रमाणपत्र के साथ उस पैकेज पर हस्ताक्षर करना चाहता हूं। मेरी बिल्ड स्क्रिप्ट में, मेरे पास यह है:मैक ओएस एक्स - एटलसियन बांस

productsign --sign "Name of my certificate" "input.pkg" "output.pkg" 

कमांड लाइन से इस स्क्रिप्ट को अपेक्षा के अनुसार काम करता है। हालांकि, बांस से स्क्रिप्ट चलाने, मैं हमेशा त्रुटि मिलती है:

productsign: error: Could not find appropriate signing identity for "Name of my certificate" 

मुझे लगता है कि इस संदर्भ निर्माण स्क्रिप्ट जब बांस से चलाने में चलाया जाता है की वजह से किया जाना चाहिए। मैं बांस में प्रमाण पत्र कैसे उपयोग कर सकता हूं? यह System में स्थापित है, login नहीं।

उत्तर

2

आप तो आप कीचेन पहुंच (Applications> Utilities) का उपयोग कर कीचेन अपने प्रणाली के लिए अपने लॉगिन कीचेन से उपयुक्त प्रमाणपत्र को कॉपी करना होगा बांस root के रूप में चलाने की जरूरत है, तो।

ऐसा कहकर, root के बजाय उपयोगकर्ता के रूप में बांस को चलाने के लिए बेहतर होगा। जैसे यदि आपको किसी भी आईओएस पर किसी भी आईओएस बिल्ड पर हस्ताक्षर करने के लिए मोबाइल प्रावधान प्रोफाइल का उपयोग करने की आवश्यकता है, तो root काम नहीं करेगा।

+0

आप एक LaunchDaemon से बांस एजेंट द्वारा चलाए जा रहे हैं, तो आप बांस अपने LaunchDaemon plist ( उपयोगकर्ता नाम yourusername) – oggmonster

+0

को उपयोगकर्ता नाम क्षेत्र जोड़कर चलाने के लिए मैं बांस एजेंट LaunchDaemon के रूप में लॉन्च करने के लिए कॉन्फ़िगर और मैं के रूप में उपयोगकर्ता नाम निर्दिष्ट किया गया है निर्दिष्ट कर सकते हैं अच्छा, लेकिन अभी भी 'xcodebuild' keychain में कुंजी तक नहीं पहुंच सका। मुझे 'लॉगिन' कीचेन से 'सिस्टम' तक चाबियाँ लेनी पड़ीं, जो मेरे लिए काम करती थीं। – i4niac

1

क्या आपने ऑपरेशन को सूड करने की कोशिश की है?

Ie: कुंजी (? जो शायद यह आपके उपयोग के मामले के लिए नहीं होना चाहिए) सिस्टम-चेन में है

sudo productsign --sign "Name of my certificate" "input.pkg" "output.pkg" 

के रूप में, आप की संभावना एक 'नियमित' के रूप में यह करने के लिए पहुँच नहीं है उपयोगकर्ता, भले ही [डिज़ाइन द्वारा] आपके पास प्रमाणपत्रों तक पहुंच हो।

+0

मैंने पहले से ही यह कोशिश की थी लेकिन दुर्भाग्य से, आपको एक ही त्रुटि मिलती है – oggmonster

+0

यह बहुत आसान होता, है ना? कुंजी निर्यात करने और लॉगिन कीचेन पर वापस आयात करने के बारे में क्या? यदि सीएन आप कुंजी की पहचान करने के लिए उपयोग कर रहे हैं तो सही है, हस्ताक्षर प्रसंस्करण के रास्ते में कुछ और खड़ा होना चाहिए। –

0

मेरी सिफारिश एक अलग कीचेन में आपको आवश्यक चाबियों को स्टोर करना है। इससे उन्हें ढूंढना और उन्हें प्रबंधित करना अधिक आसान हो जाएगा। बस एक नया कीचेन बनाएं और अपने प्रमाण को इसमें ले जाएं; इसे कहीं सुविधाजनक स्टोर करें। फिर मैं इस तरह से चीजों पर हस्ताक्षर करता हूं (मैं codesign का उपयोग कर रहा हूं, लेकिन --productsign वही है)। मैं रूट के रूप में नहीं बनाता, न ही मैं इसके लिए सुडो का उपयोग करता हूं।

# Keychain that holds all the required signing certificates 
# To create a keychain like this, create it in "Keychain Access" and copy all your certificates into it 
# Then set its timeout to infinite (so it doesn't re-lock itself during the build): 
# security set-keychain-settings <path> 
# Passing no "-t" option means "no timeout." 
# Generally you should just be able to copy this file from build host to build host as needed. Then 
# add it to the available keychains using Keychain Access, File>Add Keychain…. If you don't add it to 
# Keychain Access, you'll receive signing error CSSMERR_TP_NOT_TRUSTED, since it won't recognize the 
# entire chain 
keychain=~/Library/Keychains/MyProduct.keychain 
keychain_password=somepassword # If you have one on the keychain 
cert_identifier='My Signing Name' 
... 

# We assume the keychain has an infinite timeout, so we just unlock it once here. 
if ! security unlock-keychain -p "${keychain_password}" ${keychain} ; then 
    echo "Cannot unlock keychain. Cannot sign on this host." 
    exit 1 
fi 

sign() 
{ 
    name=$1 ; shift 
    paths=$* 

    if ${sign} ; then 
    echo "** SIGNING $name **" 
    chmod u+w $paths 
    codesign --keychain ${keychain} -f -s ${cert_identifier} $paths 
    fi 
} 

sign "The Whole Package" something.pkg