Xcode कमांड लाइन से "बिल्ड एंड आर्काइव"


392

Xcode 3.2 बिल्ड मेनू, "बिल्ड एंड आर्काइव" के तहत एक भयानक नई सुविधा प्रदान करता है, जो Ad Hoc वितरण के लिए उपयुक्त एक .ipa फ़ाइल बनाता है। आप ऑर्गेनाइज़र को भी खोल सकते हैं, "आर्काइव्ड एप्लिकेशन" पर जाएं और "आईट्यून्सकनेक्ट को एप्लिकेशन सबमिट करें।"

क्या कमांड लाइन से "बिल्ड एंड आर्काइव" का उपयोग करने का एक तरीका है (बिल्ड स्क्रिप्ट के हिस्से के रूप में)? मुझे लगता है कि xcodebuildकिसी भी तरह शामिल हो जाएगा, लेकिन manपृष्ठ इस बारे में कुछ भी कहने के लिए प्रतीत नहीं होता है।

अद्यतन माइकल ग्रिनिच ने स्पष्टीकरण का अनुरोध किया; यहां आप वास्तव में कमांड-लाइन बिल्ड के साथ क्या नहीं कर सकते, आप केवल "बिल्ड और आर्काइव" के बाद ही Xcode के आयोजक के साथ कर सकते हैं। "

  1. बीटा टेस्टर के साथ अपने आईपीए को साझा करने के लिए आप "शेयर एप्लिकेशन ..." पर क्लिक कर सकते हैं। जैसा कि गिलौम नीचे बताता है, कुछ Xcode जादू के कारण, इस IPA फ़ाइल को अलग से वितरित .mobileprovision फ़ाइल की आवश्यकता नहीं होती है, जिसे बीटा परीक्षक स्थापित करने की आवश्यकता होती है; यह जादुई है। कोई कमांड-लाइन स्क्रिप्ट नहीं कर सकती है। उदाहरण के लिए, एरिक की स्क्रिप्ट (1 मई को प्रस्तुत) उस आवश्यकता को पूरा नहीं करती है।
  2. इससे भी महत्वपूर्ण बात यह है कि आपके द्वारा किसी बिल्ड का परीक्षण करने के बाद, आप इसे पुन: निर्मित किए बिना, आपके द्वारा परीक्षण किए गए ऐप्पल के समान निर्माण, इसे सबमिट करने के लिए "आईट्यून्स एप्लिकेशन को एप्लिकेशन सबमिट करें" पर क्लिक कर सकते हैं। यह कमांड लाइन से असंभव है, क्योंकि एप्लिकेशन पर हस्ताक्षर करना बिल्ड प्रक्रिया का हिस्सा है; आप ऐड हॉक बीटा परीक्षण के लिए बिट्स पर हस्ताक्षर कर सकते हैं या आप उन्हें ऐप स्टोर में जमा करने के लिए साइन इन कर सकते हैं, लेकिन दोनों नहीं। कमांड-लाइन पर निर्मित कोई भी आईपीए फोन पर बीटा परीक्षण नहीं किया जा सकता है और फिर सीधे ऐप्पल को प्रस्तुत किया जा सकता है।

मैं किसी के साथ आना और मुझे गलत साबित करना पसंद करूंगा: ये दोनों विशेषताएं Xcode GUI में बहुत अच्छी हैं और कमांड लाइन से इसे दोहराया नहीं जा सकता।


1
अजी, क्रूड। यह असंभव प्रतीत होता है। यदि आपको इसका उत्तर नहीं पता है, तो कृपया कम से कम प्रश्न का उत्तर दें, ताकि मेरा इनाम ईथर में गायब न हो जाए ... :-(
Dan Fabulich

3
यह असंभव नहीं है, यह सिर्फ का हिस्सा नहीं है xcodebuild। एक IPA फ़ाइल बनाने में सिर्फ ऐप को "पेलोड" नाम की डाइरेक्टरी में डालना, उस डायरेक्टरी को ज़िप करना और उसका नाम बदलकर MyAppName.ipa करना है।
माइकल ग्रिनिच जूल

@ मिसेल, "बिल्ड एंड आर्काइव" भी ऑर्गनाइज़र सुविधाओं को सक्षम करता है, जो तब उपलब्ध नहीं होते हैं जब आप सिर्फ हाथ से आईपीए फ़ाइल बनाते हैं।
डैन फेबुलिच

मेरी टिप्पणी थोड़ी लंबी हो गई, इसलिए यह एक उत्तर के रूप में पोस्ट किया गया है ।
माइकल ग्रिनिच

3
हालाँकि vdaubry द्वारा पहला / स्वीकृत जवाब काम करेगा, XID के नए संस्करणों के लिए रीड द्वारा उत्तर बहुत सरल है।
प्रोमेथियस

जवाबों:


314

मैंने पाया कि कॉमैंड लाइन से बिल्ड और आर्काइव प्रक्रिया को कैसे स्वचालित किया जाए, मैंने अभी एक ब्लॉग लेख लिखा है जिसमें बताया गया है कि आप इसे कैसे प्राप्त कर सकते हैं।

आपके द्वारा उपयोग की जाने वाली कमांड है xcrun:

/usr/bin/xcrun -sdk iphoneos PackageApplication \
-v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" \
-o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" \
--sign "${DEVELOPER_NAME}" \
--embed "${PROVISONING_PROFILE}"

आपको लेख में सभी विवरण मिलेंगे । यदि आपके कोई प्रश्न हैं तो पूछने में संकोच न करें।


19
कुछ समय के लिए मेरे लिए स्पष्ट नहीं है, लेकिन RELEASE_BUILDDIRएक संपूर्ण मार्ग होने की आवश्यकता है।
डेविड डनहम

5
यह भी ध्यान दें कि यदि आप एक ही हस्ताक्षर / प्रोफ़ाइल का उपयोग करना चाहते हैं, तो .sign या --embed विकल्पों की आवश्यकता नहीं है। यह वह होगा जो आपने अपने साइन कॉन्फ़िगरेशन के लिए कोड साइनिंग बिल्ड सेटिंग्स में सेट किया है।
माइक वेलर

12
ध्यान दें कि ipa फ़ाइल पथ -o "${ipa_path}"एक पूर्ण पथ होना चाहिए। अन्यथा आप शायद मिल जाएंगे error: Unable to create '.../...ipa'या इसे चुपचाप बनाने की अनदेखी की जाएगी। लानत है मुझे एक दो घंटे बर्बाद।
एच - एन

2
क्या कोई मुझे बता सकता है कि {} ब्रेसिज़ क्या करते हैं? मैं मान रहा हूं कि वे रिक्त स्थान की देखभाल करते हैं, लेकिन मैं गलत हो सकता हूं।
scord

6
Xcode 8.3 बीटा 1 PackageApplication कमांड को पूरी तरह से हटा देता है। इसे फिर से उपयोग न करें और नीचे दिए गए सुझाव के अनुसार "xcodebuild -scheme <SchemeName> संग्रह" का उपयोग करें।
हंस नॉचेल

283

Xcode 4.2 के साथ आप ऐसा करने के लिए -scheme ध्वज का उपयोग कर सकते हैं:

xcodebuild -scheme <SchemeName> archive

इस कमांड के बाद आर्काइव एक्सकोड ऑर्गनाइज़र में दिखाई देगा।


3
हां काफी बेहतर! इसे काम करने के लिए, मैंने निम्न कार्य किया: cd आपके प्रोजेक्ट फ़ोल्डर में, फिर "xcodebuild -scheme MyProjectName संग्रह" चलाएं (क्योंकि आमतौर पर, आपके पास अपने प्रोजेक्ट नाम के समान नाम वाली एक योजना है)
शमूएल

18
ध्यान दें कि कार्यक्षेत्र और योजना के अलावा, archiveकार्रवाई इस आमंत्रण के माध्यम से आपके द्वारा प्रदान की गई किसी भी सेटिंग का सम्मान नहीं करती है - इसके लिए मुझे केवल घंटे खर्च करने होंगे !
danyowdee

5
Xcode 4.4 में ठीक काम करता है , और मुझे यकीन है कि यह 4.3 में भी ठीक था। सुनिश्चित करें कि आप का उपयोग करके सही Xcode रिहाई का चयन किया है सुनिश्चित करेंxcode-select <path to Xcode.app>
रीड एलिस

2
इसके अलावा, आप चाहिए के साथ "योजना निर्दिष्ट -scheme <SchemeName>"
रीड एलिस

6
यह संग्रह बनाने के लिए ठीक है, हालाँकि xcrun में PackageApplication वास्तव में .ipa फ़ाइल बनाता है। आपको TestFlight
jmstone617

145

Xcode 9 और Swift के साथ मेरे उत्तर को अपडेट करना

पुरालेख

xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace \
  -scheme <schemeName> clean archive -configuration release \
  -sdk iphoneos -archivePath <ProjectName>.xcarchive

आईपीए निर्यात ( कृपया निर्यात विकल्प ध्यान दें )

xcodebuild -exportArchive -archivePath  <ProjectName>.xcarchive \
  -exportOptionsPlist  <ProjectName>/exportOptions.plist \
  -exportPath  <ProjectName>.ipa

जो लोग ExportOptions.plist, https://blog.bitrise.io/new-export-options-plist-in-xcode-9 के बारे में नहीं जानते हैं


जो लोग CI / CD टूल्स जैसे टीमकिटी / जेनकिंस में बिल्डिंग प्रोजेक्ट के लिए इसका उपयोग कर रहे थे, कृपया सुनिश्चित करें कि आप आर्काइव और एक्सपोर्ट दोनों के लिए बिल्ड एजेंट में स्थापित सही xcode का उपयोग कर रहे हैं।

आप इसके लिए नीचे दिए गए 2 विकल्पों में से किसी एक का उपयोग कर सकते हैं।

  1. पूर्ण पथ का उपयोग xcodebuild करने के लिए करें,
/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild
  1. Xcode का चयन करें,
xcode-select -switch /Applications/Xcode 9.3.1.app

नीचे मेरा पुराना जवाब है

यहाँ संग्रह और IPA उदाहरण बनाने के लिए कमांड लाइन स्क्रिप्ट है। मेरे पास एक iPhone xcode प्रोजेक्ट है, जो डेस्कटॉप / MyiOSApp फ़ोल्डर में स्थित है।

एक के बाद एक आदेशों का पालन करें:

cd /Users/username/Desktop/MyiOSApp/

xcodebuild -scheme MyiOSApp archive \
  -archivePath /Users/username/Desktop/MyiOSApp.xcarchive

xcodebuild -exportArchive -exportFormat ipa \
  -archivePath "/Users/username/Desktop/MyiOSApp.xcarchive" \
  -exportPath "/Users/username/Desktop/MyiOSApp.ipa" \
  -exportProvisioningProfile "MyCompany Distribution Profile"

यह एक्सकोड 5 के साथ परीक्षण किया गया है और मेरे लिए ठीक काम कर रहा है।


2
इसने पूरी तरह से Xcode6.1.1 पर काम किया। मैं टर्मिनल से अपने ऐप्स बनाने का विकल्प चुनता हूं क्योंकि जब मैं आयोजक से AdHoc वितरण बनाने का प्रयास करता हूं, तो Xcode6 मुझे "आपका खाता पहले से ही वैध प्रमाणपत्र है" त्रुटि देता है।
FormigaNinja

अगर आपके पास एक वॉचकीट ऐप है तो आईपा में एक नया फोल्डर है जिसे वॉचकेटसुपोर्ट और साथ ही सिंबल फोल्डर (वैकल्पिक हो सकता है) कहा जाता है। क्या आप जानते हैं कि एक्सपोर्ट को प्राप्त करने का कोई तरीका है?
RPM

1
xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace -scheme <schemeName> clean archive -configuration release -sdk iphoneos -archivePath <ProjectName>.xcarchive त्रुटि फेंक रहा है:requires a provisioning profile with the Associated Domains feature. Select a provisioning profile for the "Release" build configuration in the project editor.
vbRocks

1
@MohammadRezaKoohkan जो पुराने उत्तर में था मैंने इसे संदर्भ दिखाने के लिए रखा था, आप मेरे जवाब की शुरुआत में वैध निर्यात विकल्प देख सकते हैं
राज

1
@ राज यीप, शुक्रिया
मोहम्मद रजा कोहनक

29

मैं तदर्थ वितरण के लिए ipa पैकेज उत्पन्न करने के लिए अपनी स्वयं की बिल्ड स्क्रिप्ट का उपयोग कर रहा हूं।

die() {
    echo "$*" >&2
    exit 1
}

appname='AppName'
config='Ad Hoc Distribution'
sdk='iphoneos3.1.3'
project_dir=$(pwd)

echo using configuration $config

echo updating version number
agvtool bump -all
fullversion="$(agvtool mvers -terse1)($(agvtool vers -terse))"
echo building version $fullversion

xcodebuild -activetarget -configuration "$config" -sdk $sdk build || die "build failed"

echo making ipa...
# packaging
cd build/"$config"-iphoneos || die "no such directory"
rm -rf Payload
rm -f "$appname".*.ipa
mkdir Payload
cp -Rp "$appname.app" Payload/
if [ -f "$project_dir"/iTunesArtwork ] ; then
    cp -f "$project_dir"/iTunesArtwork Payload/iTunesArtwork
fi

ipaname="$appname.$fullversion.$(date -u +%Y%m%d%H%M%S).ipa"
zip -r $ipaname Payload

echo finished making $ipaname

स्क्रिप्ट संस्करण संख्या भी बढ़ाती है। अगर जरूरत न हो तो आप उस हिस्से को हटा सकते हैं। आशा है ये मदद करेगा।


3
यह एक अच्छा समाधान है, हालांकि आपका कोड टिप्पणियों के बिना पढ़ना थोड़ा कठिन है। क्या आप थोड़ा और लिखेंगे कि क्या हो रहा है?
माइकल ग्रिनिच

Xcode को "APPNAME.ipa" नाम कहां मिलता है? पैकेजिंग से-> उत्पाद का नाम?
कार्लोस रिकार्डो

3
यह स्क्रिप्ट अब WatchKit ऐप के साथ पर्याप्त नहीं है। क्या किसी को घड़ी की ऐप के साथ आईपीए फ़ाइल के नए विनिर्देशों का पता है?
RPM

वॉच किट के साथ @RPM के समान मुद्दों को देखना। कोई संकल्प?
danieljimenez

@RPM वॉचकीट सामान के लिए इसे देखें। मैंने इसे स्वयं आजमाया नहीं है, लेकिन यह पूरी तरह से मैट्रिक्सप्रोजेक्ट्स.net
p/

26

xcodebuildउपकरण के साथ निर्माण कर सकते हैं और निर्यात संग्रह उत्पादों -exportArchive ध्वज (Xcode 5 के रूप में)। एक्सपोर्ट स्टेप पहले केवल Xcode ऑर्गनाइज़र UI के माध्यम से संभव था।

सबसे पहले अपने ऐप को आर्काइव करें:

xcodebuild -scheme <scheme name> archive

दिया गया $ARCHIVE_PATH( .xcarchive का पथ) फ़ाइल ), निम्न में से किसी एक के साथ संग्रह से एप्लिकेशन निर्यात करें:

iOS .ipa फ़ाइल:

xcodebuild -exportArchive -exportFormat ipa -archivePath "$ARCHIVE_PATH" -exportPath "myApp.ipa" -exportProvisioningProfile "My App Provisioning profile"

Mac .app फ़ाइल:

xcodebuild -exportArchive -exportFormat app -archivePath "$ARCHIVE_PATH" -exportPath "myApp.app" -exportSigningIdentity "Developer ID Application: My Software Company"

दोनों आदेशों में -exportProvisioningProfile और -exportSigningIdentity तर्क वैकल्पिक हैं। man xcodebuildशब्दार्थ पर विवरण के लिए। इन उदाहरणों में, iOS के लिए प्रोविज़निंग प्रोफाइल ने एक ऐडहॉक डिस्ट्रिब्यूशन प्रोविज़निंग प्रोफ़ाइल निर्दिष्ट की है, और मैक ऐप के लिए हस्ताक्षर करने वाली पहचान को 3 पार्टी एप्लिकेशन (मैक ऐप स्टोर के माध्यम से वितरित नहीं) के रूप में निर्यात के लिए एक डेवलपर आईडी निर्दिष्ट किया है।


1
Xcode कार्यस्थानों का उपयोग करते समय काम नहीं करता है और कोकोपोड्स के साथ संगत नहीं है
amleszk

1
क्या आपने -workspacexcodebuild (और कार्यक्षेत्र के लिए एक पथ) के विकल्प को जोड़ने की कोशिश की है ? man xcodebuildराज्यों: "एक Xcode कार्यक्षेत्र बनाने के लिए, आपको निर्माण को परिभाषित करने के लिए -workspace और -scheme दोनों विकल्पों को पास करना होगा"।
निक

यह मेरे लिए बहुत अच्छा काम करता है -वर्कस्पेस विकल्प के साथ जोड़ा गया है - मुझे पहले कमांड द्वारा बनाए गए संग्रह का मार्ग प्राप्त करने की आवश्यकता है, इसलिए मैं इसे दूसरे में फ़ीड कर सकता हूं। आप यह निर्दिष्ट कर सकते हैं कि संग्रह को -archivePath विकल्प के साथ कहां बनाया गया है, लेकिन मैं इसका डिफ़ॉल्ट स्थान पसंद करता हूं। इससे मुझे यह पता लगाने में मदद मिली कि उस रास्ते को कैसे प्राप्त किया जाए: stackoverflow.com/a/9024901/813247
रोबॉट्सपेसर

24

हमने XCode 4.2.1 के साथ एक iPad ऐप विकसित किया और OTA वितरण के लिए बिल्ड को हमारे निरंतर एकीकरण (जेनकिंस) में एकीकृत करना चाहता था। यहाँ मैं के साथ आया समाधान है:

# Unlock keychain
security unlock-keychain -p jenkins /Users/jenkins/Library/Keychains/login.keychain

# Build and sign app
xcodebuild -configuration Distribution clean build

# Set variables
APP_PATH="$PWD/build/Distribution-iphoneos/iPadApp.app"
VERSION=`defaults read $APP_PATH/Info CFBundleShortVersionString`
REVISION=`defaults read $APP_PATH/Info CFBundleVersion`
DATE=`date +"%Y%m%d-%H%M%S"`
ITUNES_LINK="<a href=\"itms-services:\/\/?action=download-manifest\&url=https:\/\/xxx.xxx.xxx\/iPadApp-$VERSION.$REVISION-$DATE.plist\">Download iPad2-App v$VERSION.$REVISION-$DATE<\/a>"

# Package and verify app
xcrun -sdk iphoneos PackageApplication -v build/Distribution-iphoneos/iPadApp.app -o $PWD/iPadApp-$VERSION.$REVISION-$DATE.ipa

# Create plist
cat iPadApp.plist.template | sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATE}/$DATE/" -e "s/\${REVISION}/$REVISION/" > iPadApp-$VERSION.$REVISION-$DATE.plist

# Update index.html
curl https://xxx.xxx.xxx/index.html -o index.html.$DATE
cat index.html.$DATE | sed -n '1h;1!H;${;g;s/\(<h3>Aktuelle Version<\/h3>\)\(.*\)\(<h3>&Auml;ltere Versionen<\/h3>.<ul>.<li>\)/\1\
${ITUNES_LINK}\
\3\2<\/li>\
<li>/g;p;}' | sed -e "s/\${ITUNES_LINK}/$ITUNES_LINK/" > index.html

फिर जेनकिन्स हमारे वेबसर्वर को ipa, plist और html फाइल्स अपलोड करता है।

यह प्लिस्ट टेम्प्लेट है:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>https://xxx.xxx.xxx/iPadApp-${VERSION}.${REVISION}-${DATE}.ipa</string>
                </dict>
                <dict>
                    <key>kind</key>
                    <string>full-size-image</string>
                    <key>needs-shine</key>
                    <true/>
                    <key>url</key>
                    <string>https://xxx.xxx.xxx/iPadApp.png</string>
                </dict>
                <dict>
                    <key>kind</key>
                    <string>display-image</string>
                    <key>needs-shine</key>
                    <true/>
                    <key>url</key>
                    <string>https://xxx.xxx.xxx/iPadApp_sm.png</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>xxx.xxx.xxx.iPadApp</string>
                <key>bundle-version</key>
                <string>${VERSION}</string>
                <key>kind</key>
                <string>software</string>
                <key>subtitle</key>
                <string>iPad2-App</string>
                <key>title</key>
                <string>iPadApp</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

इसे सेट करने के लिए, आपको वितरण प्रमाणपत्र और प्रोविज़निंग प्रोफाइल को निर्दिष्ट उपयोगकर्ता के किचेन में आयात करना होगा।


3
आप ऐप्पल के प्लिस्टबुडी कमांड के साथ एक प्लिस्ट-फाइल भी बदल सकते हैं, जैसे: / usr / libexec / PlistBuddy -c "सेट: CFBundleVersion 1.2.3.4" /path/to/bfo.plist। SED :) के साथ खेलने के मामले में :)
जेले डी लैडर

जानकारी के लिए धन्यवाद। मैं plistbuddy की तुलना में sed के साथ अधिक अनुभवी हूं, इसलिए मैं sed :)
FuePi

1
मैं जेनरेट $WORKSPACEकरने के बजाय सिफारिश करता हूं$PWDAPP_PATH
रिचर्ड

16

मुझे यहां कुछ अन्य उत्तर मिले जो कठिन थे। अगर मेरे लिए यह लेख किया। कुछ रास्तों को निरपेक्ष रखने की आवश्यकता हो सकती है, जैसा कि अन्य उत्तरों में बताया गया है।

आदेश:

xcrun -sdk iphoneos PackageApplication \
    "/path/to/build/MyApp.app" \
    -o "output/path/to/MyApp.ipa" \
    --sign "iPhone Distribution: My Company" \
    --embed "/path/to/something.mobileprovision"

15

आप वास्तव में एक बिल्ड का इस्तीफा दे सकते हैं, जैसा कि XCode करता है, ताकि आप उसी बाइनरी का परीक्षण और जहाज कर सकें। उदाहरण के लिए मेरी स्क्रिप्ट में (ऊपर के लोगों के समान) मैं एडहॉक बिल्ड के रूप में हस्ताक्षरित अपने रिलीज़ संस्करण का निर्माण करता हूं, फिर मैं संग्रह करता हूं कि परीक्षण के लिए आईपीए के रूप में, फिर अपने वितरण प्रमाण पत्र के साथ इस्तीफा दें और एक ज़िप फ़ाइल बनाएं, जिसे मैं भेजूं सेब। प्रासंगिक पंक्ति है:

codesign -f -vv -s "$DistributionIdentity" "$APPDIR"

14

के लिए Xcode 7 , तो आप एक बहुत सरल समाधान है। एकमात्र अतिरिक्त काम यह है कि आपको संग्रह निर्यात करने के लिए कॉन्फ़िगरेशन प्लिस्ट फ़ाइल बनानी होगी।

(के परिणामों में Xcode 6 की तुलना में, xcrun xcodebuild -help, -exportFormatऔर -exportProvisioningProfileविकल्प किसी भी अधिक का उल्लेख नहीं कर रहे हैं, पूर्व हटा दी जाती है, और बाद ने ले जाता है -exportOptionsPlist।)

चरण 1 , निर्देशिका को फ़ोल्डर में बदलें .xcodeproject या .xcworkspace फ़ाइल सहित।

cd MyProjectFolder

चरण 2 , Xcode का उपयोग करें या /usr/libexec/PlistBuddy exportOptions.plistनिर्यात विकल्प plist फ़ाइल बनाने के लिए। वैसे, xcrun xcodebuild -helpआपको बताएगा कि आपके पास plist फ़ाइल में कौन सी कुंजियाँ हैं।

चरण 3 , बनाएँ .xcarchive फ़ाइल (फ़ोल्डर, वास्तव में) इस प्रकार है (बिल्ड / निर्देशिका स्वचालित रूप से अब Xcode द्वारा बनाई जाएगी,)

xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive

चरण 4 , .ipa फ़ाइल को इस तरह निर्यात करें, जो Xcode6 से अलग है

xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/ -exportOptionsPlist exportOptions.plist

अब, आपको बिल्ड / डायरेक्टरी में एक ipa फाइल मिलती है। बस इसे ऐप्पल ऐप स्टोर में भेजें।

वैसे, Xcode 7 द्वारा बनाई गई ipa फ़ाइल Xcode 6 की तुलना में बहुत बड़ी है।


1
आप इस दृष्टिकोण के साथ प्रोविजनिंग प्रोफाइल को कैसे निर्दिष्ट करते हैं। मैंने ExportProvisioningProfile की कोशिश की, लेकिन यह कहा कि इसका उपयोग ExportOptionsPlist के साथ नहीं किया जा सकता है ... और प्रोफ़ाइल में निर्दिष्ट प्रोफ़ाइल को निर्दिष्ट करने का कोई तरीका नहीं है जो मुझे मिल सकता है ... ऐसा लगता है कि यह सबसे पुराने को उसी नाम से ले सकता है जैसे एक कि इसे बनाया (जो मैं चाहता हूँ के विपरीत है, वास्तव में)
जॉन एलिस

"Project.pbxproj" नामक फ़ाइल में शामिल प्रोजेक्ट सेटिंग्स पर हस्ताक्षर करने की सेटिंग होती है, इसलिए -schemeऔर -configurationविकल्प यह निर्दिष्ट करते हैं कि आईपीआई फ़ाइल पर हस्ताक्षर कैसे करें।
डॉनसॉन्ग

जब आप कहते हैं "बस इसे Apple को भेजें", तो यह क्या प्रक्रिया है क्योंकि यह सामान्य संग्रह के चरणों के बाहर है?
मिश्रण

"Apple पर भेजने" के लिए दो तरीके हैं, itunesconnect.apple.com पर लॉगिन करें , या Xcode-> ओपन डेवलपर टूल-> एप्लिकेशन लोडर का उपयोग करें। @ मिक्स 3 डी
डोंगोंग

1
मैंने पूरी तरह से स्वचालित समाधान ढूंढना समाप्त कर दिया, जिसके लिए मैंने एक नया उत्तर बनाया है!
मिश्रण 3 डी

14

मैंने नीचे दिए गए चरणों का संक्षिप्त विवरण दिया है, और नीचे दिए गए टेरिमल का उपयोग करते हुए आईपीए उत्पन्न करने के लिए मापदंडों का पालन करें:

  1. टर्मिनल में MyApp.xcodeproject फ़ाइल वाले फ़ोल्डर पर जाएं

  2. नीचे दिए गए आदेश का उपयोग करके आप आवेदन के सभी लक्ष्य प्राप्त करेंगे

    /usr/bin/xcodebuild -list 
  3. उपरोक्त कमांड निष्पादित होने के बाद, आपको उन लक्ष्यों की एक सूची मिल जाएगी, जिनके लिए आपको एक विशेष लक्ष्य का चयन करना चाहिए जिसे आपको सिप्पा की आवश्यकता है।

    /usr/bin/xcodebuild -target $TARGET -sdk iphoneos -configuration Release
  4. उपरोक्त कमांड प्रोजेक्ट बनाता है और एक .app फ़ाइल बनाता है। .app फ़ाइल का पता लगाने का रास्ता है ./build/Release-iphoneos/MyApp.app

  5. बिल्ड के सफल हो जाने के बाद, निम्न कमांड को निष्पादित करें। एप्लिकेशन का डेवलपर नाम और प्रोविज़निंग प्रोफाइल का उपयोग करके नीचे के सिंटैक्स का उपयोग करके:

    /usr/bin/xcrun -sdk iphoneos PackageApplication -v ${TARGET}.app -o ${OUTDIR}/${TARGET}.ipa sign ${IDENTITY}” embed ${PROVISONING_PROFILE}”

उपरोक्त वाक्य रचना में प्रत्येक पैरामीटर का स्पष्टीकरण:

${TARGET}.app                == Target path (ex :/Users/XXXXXX/desktop/Application/build/Release-iphoneos/MyApp.app)
${OUTDIR}                    == Select the output directory(Where you want to save .ipa file)
${IDENTITY}                   == iPhone Developer: XXXXXXX (XXXXXXXXXX)(which can be obtained from Keychain access)
${PROVISONING_PROFILE}   == Path to the provisioning profile(/Users/XXXXXX/Library/MobileDevice/Provisioning Profiles/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.mobileprovision”)
  1. ipa चयनित आउटपुट डायरेक्टरी " $ {OUTDIR} " पर उत्पन्न होगा

मैं इस त्रुटि को देख रहा हूं "निर्दिष्ट एप्लिकेशन मौजूद नहीं है या बंडल निर्देशिका नहीं है"
अंसारी आवा

2
xcrun PackageApplication पदावनत है।
तुनवीर रहमान तुषार

8

Xcode 8:


आईपीए प्रारूप:

xcodebuild -exportArchive -exportFormat IPA -archivePath MyMobileApp.xcarchive -exportPath MyMobileApp.ipa -exportProvisioningProfile 'MyMobileApp Distribution Profile'

प्रावधान MyMobileApp वितरण प्रोफ़ाइल का उपयोग करके पथ MyMobileApp.ipa के लिए एक IPA फ़ाइल के रूप में संग्रह MyMobileApp.xcarchive निर्यात करता है।

एपीपी प्रारूप:

xcodebuild -exportArchive -exportFormat APP -archivePath MyMacApp.xcarchive -exportPath MyMacApp.pkg -exportSigningIdentity 'Developer ID Application: My Team'

पथ MyMacApp.pkg पथ के लिए एक PKG फ़ाइल के रूप में संग्रह MyMacApp.xcarchive निर्यात करता है, पहचानकर्ता आईडी पहचान आवेदन पर हस्ताक्षर करने के लिए appli-cation एप्लिकेशन का उपयोग कर। इंस्टॉलर हस्ताक्षर पहचानकर्ता डेवलपर आईडी इंस्टॉलर: मेरी टीम का उपयोग निर्यात पैकेज पर हस्ताक्षर करने के लिए किया जाता है।

Xcodebuild मैन पेज


7

उस फ़ोल्डर पर जाएं जहां आपका प्रोजेक्ट रूट और:

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
यह काम नहीं लगता है। XCode 3.2.2 (अंतिम) में 'आर्काइव' निर्माण उपलब्ध नहीं है।
मार्टिन कोटे

4

Xcode 7 के साथ कमांडलाइन के माध्यम से iTunesConnect पर अपलोड करते हुए, एक कदम आगे बढ़ते हुए ! (मान लें कि आप एक के साथ शुरू कर रहे हैं.ipa सही रिलीज़ प्रोफ़ाइल और हस्ताक्षर पहचान के साथ साइन इन कर रहे हैं।)

altoolएप्लिकेशन लोडर ( docs,, पृष्ठ 38) के लिए सीएलआई इंटरफ़ेस दर्ज करें । Xcode.app की संरचना के भीतर छिपा हुआ, एक आसान कार्य है जो हमें सीधे ItunesConnect पर अपलोड करने देता है।

/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool

बस $ altool --upload-app -f file -u username [-p password]अपने नए खनन अपलोड करने के लिए चलाते हैं.ipa एप्पल को सीधे । पासवर्ड वैकल्पिक है, और यदि आप इसे छोड़ देते हैं, तो इसके लिए आपको संकेत देगा।

यदि सत्यापन चरण के दौरान ऐप के साथ कोई समस्या है, तो कंसोल उन्हें प्रिंट करेगा।

altoolयदि आप इसके स्थान को सहेजना नहीं चाहते हैं तो आपको पथ निर्यात करना होगा।

export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

बस! बस iTunesConnect.com पर लॉगइन करें और टेस्टफलाइट के साथ परीक्षण के लिए अपने नए बिल्ड का चयन करें।

अंतिम नोट: यदि आपको यह कहते हुए कोई त्रुटि मिलती है Exception while launching iTunesTransporter: Transporter not found at path: /usr/local/itms/bin/iTMSTransporter. You should reinstall the application, तो आप इस SO उत्तर पर दिए गए सुझाव का पालन कर सकते हैं , ताकि सही स्थान पर सिमलिंक चलाया जा सके:

ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms

3

विंसेंट के जवाब में सुधार करते हुए, मैंने ऐसा करने के लिए एक पटकथा लिखी: xcodearchive
यह आपको कमांड लाइन के माध्यम से अपनी परियोजना को संग्रहीत (एक आईपीए) बनाने की अनुमति देता है। इसे xcodebuildकमान की बहन की तरह समझें, लेकिन संग्रह के लिए।

कोड github पर उपलब्ध है: http://github.com/gcerquant/xcodearchive


स्क्रिप्ट का एक विकल्प टाइमस्टैम्प्ड आर्काइव में dSYM प्रतीकों के संग्रह को सक्षम करना है। अब प्रतीकों को न रखने का कोई बहाना नहीं, और आप बाद में प्राप्त होने वाले क्रैश लॉग का प्रतीक नहीं बन सकते।


@KunalBalani नहीं, मैं यह उम्मीद नहीं करूंगा कि कार्यक्षेत्र को सही ढंग से संभालना है। कोड पर एक नजर है, इसे अनुकूलित करने के लिए ज्यादा काम नहीं लगेगा। पुल अनुरोधों का स्वागत है!
गुइलूमे

3

कमांड के साथ iOS प्रोजेक्ट कैसे बनाएं?

Clean : codebuild clean -workspace work-space-name.xcworkspace -scheme scheme-name 

&&

Archive : xcodebuild archive -workspace work-space-name.xcworkspace -scheme "scheme-name" -configuration Release -archivePath IPA-name.xcarchive 

&&

Export : xcodebuild -exportArchive -archivePath IPA-name.xcarchive -exportPath IPA-name.ipa -exportOptionsPlist exportOptions.plist


ExportOptions.plist क्या है?

ExportOptions.plist Xcode में आवश्यक है। यह आपको कुछ विकल्प निर्दिष्ट करता है जब आप एक ipa फ़ाइल बनाते हैं। जब आप अपने एप्लिकेशन को संग्रहीत करने के लिए Xcode का उपयोग करते हैं तो आप एक अनुकूल UI में विकल्पों का चयन कर सकते हैं।

महत्वपूर्ण : ExportOptions.plist AppStore में रिलीज़ और विकास के लिए विधि अलग है

:

ExportOptions_release ~ विधि = ऐप-स्टोर

विकास

ExportOptions_dev ~ विधि = विकास


2

xctool आज़माएं, यह Apple के xcodebuild का प्रतिस्थापन है जो iOS और मैक उत्पादों का निर्माण और परीक्षण करना आसान बनाता है। यह निरंतर एकीकरण के लिए विशेष रूप से सहायक है। इसकी कुछ अतिरिक्त विशेषताएं हैं:

  1. Xcode.app के समान परीक्षण चलाता है।
  2. निर्माण और परीक्षण के परिणामों का संरचित आउटपुट।
  3. मानव-अनुकूल, एएनएसआई-रंग का आउटपुट।

नंबर 3 बेहद उपयोगी है। मुझे नहीं लगता कि कोई भी xcodebuild का कंसोल आउटपुट पढ़ सकता है, मैं नहीं कर सकता, आमतौर पर इसने मुझे 5000+ वर्णों के साथ एक पंक्ति दी। यहां तक ​​कि एक थीसिस पेपर की तुलना में पढ़ना कठिन है।

xctool: https://github.com/facebook/xctool



2

Xcode 8 को अपडेट करने के बाद, मैंने पाया कि एंटरप्राइज़ ipa द्वारा उत्पन्न होता है

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}" 

कुछ हस्ताक्षर समस्या के कारण कमांड लॉन्च नहीं किया जा सकता है। लॉग इंगित करता है कि "चेतावनी: PackageApplication पदावनत है, xcodebuild -exportArchiveइसके बजाय उपयोग करें ।

इसलिए मैंने स्विच किया xcodebuild -exportArchiveऔर सब कुछ सामान्य हो गया।


1

आप का अर्थ है मान्य / शेयर / सबमिट विकल्प? मुझे लगता है कि वे Xcode के लिए विशिष्ट हैं, और कमांड-लाइन बिल्ड टूल के लिए अनुकूल नहीं हैं।

कुछ चतुराई के साथ, मैं शर्त लगाता हूं कि आप इसे करने के लिए एक स्क्रिप्ट बना सकते हैं। ऐसा लगता है कि वे सिर्फ ~/Library/MobileDevice/Archived Applications/एक यूयूडीआई और एक वादक के साथ संग्रहित हैं । मैं कल्पना नहीं कर सकता कि इंजीनियर को सत्यापनकर्ता को उल्टा करना मुश्किल होगा।

स्वचालित रूप से स्वचालित होने की प्रक्रिया मैं बीटा परीक्षकों को बनाता है। (चूंकि ऐप स्टोर सबमिशन अक्सर होता है, मैं इसे मैन्युअल रूप से करने में कोई आपत्ति नहीं करता हूं, खासकर जब से मुझे अक्सर नया विवरण टेक्स्ट जोड़ने की आवश्यकता होती है।) Xcode की CLI का उपयोग करके एक छद्म बिल्ड + आर्काइव करके, मैं हर कोड कमिट से स्वचालित बिल्ड ट्रिगर कर सकता हूं, एम्बेडेड प्रोविज़निंग प्रोफाइल के साथ IPA फाइलें बनाएं, और इसे परीक्षकों को ईमेल करें।


मैंने अपना प्रश्न स्पष्ट किया। जब आप ऊपर "I can" कहते हैं, तो क्या आपका मतलब है कि आप वास्तव में आज ऐसा कर सकते हैं?
डैन फेबुलिच

2
हाँ। मैं एक कस्टम स्क्रिप्ट के साथ हडसन कंटिन्यूअस इंटीग्रेशन का उपयोग कर रहा हूं जो चलता है xcodebuildऔर एक आईपीए बनाता है।
माइकल ग्रिंच

क्षमा करें, मुझे पार्टी में देरी हो रही है, लेकिन TestFlight के पास एक सुपर आसान अपलोड एपीआई है जिसे आपको बाहर देखना चाहिए
self.name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.