Komut satırından Xcode “Oluştur ve Arşivle”


392

Xcode 3.2, "Hoc dağıtımı" için uygun bir .ipa dosyası oluşturan "Build and Archive" (Oluştur ve Arşivle) menüsü altında yeni ve müthiş bir özellik sunar. Ayrıca Düzenleyiciyi açabilir, "Arşivlenmiş Uygulamalar" ve "Uygulamayı iTunesConnect'e Gönder" e gidebilirsiniz.

Komut satırından "Derleme ve Arşivleme" yi kullanmanın bir yolu var mı (derleme komut dosyasının bir parçası olarak)? Bunun bir xcodebuildşekilde yer alacağını varsayıyorum , ancak mansayfa bu konuda hiçbir şey söylemiyor gibi görünüyor.

GÜNCELLEME Michael Grinich açıklama istedi; komut satırı derlemeleriyle tam olarak yapamayacağınız şey, SADECE Xcode'un Düzenleyicisi ile "Oluştur ve Arşivle" yaptıktan sonra yapabileceğiniz özellikler.

  1. IPA'nızı beta test kullanıcılarıyla paylaşmak için "Uygulamayı Paylaş ..." seçeneğini tıklayabilirsiniz. Guillaume'nin aşağıda belirttiği gibi, bazı Xcode büyüleri nedeniyle, bu IPA dosyası, beta test cihazlarının yüklemesi gereken ayrı olarak dağıtılmış bir .mobileprovision dosyası gerektirmez; bu büyülü. Hiçbir komut satırı komut dosyası bunu yapamaz. Örneğin, Arrix'in senaryosu (1 Mayıs'ta gönderilmiş) bu gereksinimi karşılamıyor.
  2. Daha da önemlisi, bir yapıyı beta test ettikten sonra, "TAMAM iTunes Connect'e Başvuruyu Gönder" i tıklatarak, bu TAM aynı yapıyı, test ettiğiniz en ikili olan Apple'a yeniden oluşturmadan göndermek için tıklayabilirsiniz. Komut satırından bu imkansızdır, çünkü uygulamayı imzalamak oluşturma sürecinin bir parçasıdır; Geçici beta testi için bitleri imzalayabilirsiniz VEYA App Store'a gönderilmek üzere imzalayabilirsiniz, ancak ikisini birden imzalayamazsınız. Komut satırı üzerine inşa edilmiş hiçbir IPA, telefonlarda beta testinden geçirilemez ve daha sonra doğrudan Apple'a gönderilemez.

Birinin gelip bana yanlış olduğunu kanıtlamak isterim: bu özelliklerin her ikisi de Xcode GUI'de harika çalışıyor ve komut satırından çoğaltılamıyor.


1
Hata! Bu imkansız görünüyor. Cevabı bilmiyorsanız, lütfen en azından soruyu oylayın, böylece
ödülüm etere kaybolmuyor

3
Bu imkansız değil, sadece bir parçası değil xcodebuild. Bir IPA dosyası oluşturmak, uygulamanın "Yük" adlı bir dizine yerleştirilmesini, bu dizinin sıkıştırılmasını ve Uygulamam.ipa olarak yeniden adlandırılmasını içerir.
Michael Grinich

@Michael, "Oluştur ve Arşivle", sadece bir IPA dosyası elle oluşturduğunuzda kullanılamayan Düzenleyici özelliklerini de etkinleştirir.
Dan Fabulich

Yorumum biraz uzadı, bu yüzden bir cevap olarak gönderildi .
Michael Grinich

3
Her ne kadar vdaubry tarafından ilk / kabul edilen cevap işe yarayacak olsa da, Reid'in cevabı Xcode'un yeni sürümleri için çok daha basit.
Prometheus

Yanıtlar:


314

Komut satırından derleme ve arşivleme sürecinin nasıl otomatikleştirileceğini buldum, sadece bunu nasıl başarabileceğinizi açıklayan bir blog makalesi yazdım .

Kullanmanız gereken komut 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}"

Makalede tüm ayrıntıları bulacaksınız . Herhangi bir sorunuz varsa sormaktan çekinmeyin.


19
Bir süredir açık değil, ama RELEASE_BUILDDIRmutlak bir yol olmalı.
David Dunham

5
Ayrıca, .app oluşturulurken kullanılan imzalama / profili aynı tutmak istiyorsanız --sign veya --embed seçeneklerine ihtiyacınız olmadığını unutmayın. Sürüm yapılandırmanız için Kod İmzalama derleme ayarlarında ayarladığınız şey bu olacaktır.
Mike Weller

12
İçindeki ipa dosya yolunun -o "${ipa_path}"mutlak bir yol olması gerektiğini unutmayın. Aksi takdirde muhtemelen alacaksınız error: Unable to create '.../...ipa'veya oluşturma sessizce göz ardı edilecektir. Kahretsin beni birkaç saat boşa harcadı.
h - n

2
Birisi bana {} parantezlerin ne yaptığını söyleyebilir mi? Boşluğa dikkat ettiklerini varsayıyorum, ama yanılmış olabilirim.
scord

6
Xcode 8.3 Beta 1 PackageApplication komutunu tamamen kaldırın. Tekrar kullanmayın ve aşağıda önerildiği gibi "xcodebuild -scheme <SchemeName> arşivi" kullanın.
Hans Knöchel

283

Xcode 4.2 ile bunu yapmak için -scheme bayrağını kullanabilirsiniz:

xcodebuild -scheme <SchemeName> archive

Bu komuttan sonra Arşiv Xcode Organizer'da görünecektir.


3
Evet daha iyi! Çalışması için aşağıdakileri yaptım: cd'yi proje klasörünüze, ardından "xcodebuild -scheme MyProjectName arşivini" çalıştırın (çünkü genellikle proje adınızla aynı ada sahip bir şemanız vardır)
Samuel

18
Not o archiveeylemi herhangi ayarlarına önem vermez , bu çağrı yoluyla temin dışında çalışma alanı ve düzeni - bu sadece bana mal olduğunu saatleri !
danyowdee

5
İçinde para cezasını Works Xcode 4.4 , ve eminim o da 4.3 iyiydi ediyorum. Kullanarak doğru Xcode sürümünü seçtiğinizden emin olunxcode-select <path to Xcode.app>
Reid Ellis

2
Ayrıca, gereken "ile şeması belirtmek -scheme <SchemeName>"
Reid Ellis

6
Bu arşiv oluşturmak için iyidir, ancak xcrun'daki PackageApplication aslında .ipa dosyasını oluşturur. TestFlight gibi bir şeyle beta test kullanıcılarına dağıtım için bu dosyaya ihtiyacınız var
jmstone617 11:12

145

Cevabımı Xcode 9 ve Swift ile güncelleme

Arşiv

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

IPA Dışa Aktarma ( lütfen dışa aktarma seçeneği plistine dikkat edin )

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

ExportOptions.plist hakkında bilmeyenler için, https://blog.bitrise.io/new-export-options-plist-in-xcode-9


Bunu teamcity / jenkins gibi CI / CD araçlarında proje oluşturmak için kullananlar, lütfen hem arşivleme hem de dışa aktarma için yapı aracısında yüklü doğru xcode'u kullandığınızdan emin olun.

Bunun için aşağıdaki 2 seçenekten birini kullanabilirsiniz.

  1. Xcodebuild'in tam yolunu kullanın,
/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild
  1. Xcode-select kullanın,
xcode-select -switch /Applications/Xcode 9.3.1.app

Aşağıda eski cevabım

İşte arşiv ve IPA örneği oluşturmak için komut satırı betiği. Masaüstü / MyiOSApp klasöründe bulunan bir iPhone xcode projem var.

Aşağıdaki komutları tek tek yürütün:

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"

Bu Xcode 5 ile test edildi ve benim için iyi çalışıyor.


2
Xcode6.1.1'de mükemmel çalıştı. Uygulamalarımı terminalden oluşturmayı seçiyorum çünkü organizatörden bir AdHoc dağıtımı oluşturmaya çalıştığımda Xcode6 bana "Hesabınızın zaten geçerli bir sertifikası var" hatası veriyor.
FormigaNinja

Bir WatchKit uygulamanız varsa, ipa'da WatchKitSupport adında yeni bir klasör ve bir Semboller klasörü vardır (isteğe bağlı olabilir). ExportArcive'in bunları da dışa aktarmasını sağlamanın bir yolu olup olmadığını biliyor musunuz?
RPM

1
xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace -scheme <schemeName> clean archive -configuration release -sdk iphoneos -archivePath <ProjectName>.xcarchive hata requires a provisioning profile with the Associated Domains feature. Select a provisioning profile for the "Release" build configuration in the project editor.
veriyor

1
@MohammadRezaKoohkan Bu referansta göstermek için sakladım, cevabımın başlangıcında geçerli dışa aktarma seçeneğini görebilirsiniz
Raj

1
@Raj yeap, teşekkür ederim
Mohammad Reza Koohkan

29

Geçici dağıtım için ipa paketi oluşturmak için kendi derleme komut dosyanızı kullanıyorum.

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

Komut dosyası sürüm numarasını da artırır. Gerekmiyorsa bu parçayı kaldırabilirsiniz. Umarım yardımcı olur.


3
Kodunuzu yorum yapmadan okumak biraz zor olsa da, bu iyi bir çözümdür. Olanlar hakkında biraz daha yazabilir misiniz?
Michael Grinich

Xcode "APPNAME.ipa" adını nereden alır? Ambalajdan -> Ürün Adı?
Carlos Ricardo

3
Bu komut dosyası artık WatchKit uygulamasıyla yeterli değil. Watchkit uygulamasıyla ipa dosyasının yeni özelliklerini bilen var mı?
RPM

Watch kit ile @ RPM ile aynı sorunları görmek. Herhangi bir çözüm var mı?
danieljimenez

@ RPM WatchKit şeyler için bu göz atın. Kendim denemedim, ama oldukça ayrıntılı görünüyor matrixprojects.net/p/watchkit-command-line-builds
mattman88

26

xcodebuildAracı inşa etmek ve birlikte arşiv ihraç edebilir -exportArchive (Xcode 5 gibi) bayrak. Dışa aktarma adımı daha önce yalnızca Xcode Organizer kullanıcı arayüzü aracılığıyla mümkün olmuştu.

İlk önce uygulamanızı arşivleyin:

xcodebuild -scheme <scheme name> archive

Verilen $ARCHIVE_PATH( .xcarchive dosyasının yolu ), uygulamayı arşivden aşağıdakilerden biriyle dışa aktarın:

iOS .ipa dosyası:

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

Mac .app dosyası:

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

Her iki komutta da -exportProvisioningProfile ve -exportSigningIdentity bağımsız değişkenleri isteğe bağlıdır. man xcodebuildanlambilim ile ilgili ayrıntılar için. Bu örneklerde, iOS derlemesi için ön hazırlık profili bir AdHoc dağıtım ön hazırlık profili belirtmiştir ve Mac uygulamasının imzalama kimliği, bir üçüncü taraf uygulaması olarak dışa aktarılmak üzere bir Geliştirici Kimliği belirtmiştir (yani Mac App Store aracılığıyla dağıtılmamıştır).


1
Xcode çalışma alanlarını kullanırken çalışmaz ve cocopod'larla uyumlu değildir
amleszk

1
Eklemeyi denediniz mi? -workspaceXcodebuild seçeneğini (ve bir çalışma alanının yolunu) mi? man xcodebuild"Xcode çalışma alanı oluşturmak için, derlemeyi tanımlamak için hem -workspace hem de -scheme seçeneklerini iletmeniz gerekir".
Nik

Bu, -workspace seçeneği eklendiğinde benim için harika çalışıyor - sadece ilk komut tarafından oluşturulan arşivin yolunu almam gerekiyordu, bu yüzden ikincisine besleyebilirim. -ArchivePath seçeneğiyle arşivin nerede oluşturulacağını belirtebilirsiniz, ancak varsayılan konumunu tercih ederim. Bu, bu yolu nasıl alacağımı
anlamama

24

XCode 4.2.1 ile bir iPad uygulaması geliştirdik ve yapıyı OTA dağıtımı için sürekli entegrasyonumuza (Jenkins) entegre etmek istedik. İşte geldiğim çözüm:

# 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

Ardından Jenkins ipa, plist ve html dosyalarını web sunucumuza yükler.

Bu plist şablonu:

<?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>

Bunu ayarlamak için, dağıtım sertifikasını ve ön hazırlık profilini belirlenen kullanıcının anahtarlığına aktarmanız gerekir.


3
Plist dosyasını Apple'ın Plistbuddy komutuyla da değiştirebilirsiniz, örneğin: / usr / libexec / PlistBuddy -c "Set: CFBundleVersion 1.2.3.4" /path/to/info.plist. SED ile oynamak yerine :)
Jelle De Laender

Bilgi için teşekkürler. Ben sed ile plistbuddy daha deneyimli, bu yüzden sed seçin :)
FuePi

1
Ben tavsiye $WORKSPACEyerine $PWDoluşturulması içinAPP_PATH
Richard

16

Buradaki diğer cevaplardan bazılarının devam etmesini zor buldum. Bu makale benim için yaptı. Diğer yollarda belirtildiği gibi bazı yolların mutlak olması gerekebilir.

Komuta:

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

Aynı binary'i test edebilmeniz ve gönderebilmeniz için XCode gibi bir yapıdan istifa edebilirsiniz. Örneğin betiğimde (yukarıdakilere benzer) bir AdHoc derlemesi olarak imzalanan sürümümü oluşturdum, daha sonra bunu test için bir IPA olarak arşivledim, sonra dağıtım sertifikamla istifa ettim ve gönderdiğim bir zip dosyası oluşturuyorum Elma. İlgili hat:

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

14

İçin Xcode 7 , sen çok daha basit bir çözüm var. Ekstra tek iş, arşivi dışa aktarmak için bir yapılandırma plist dosyası oluşturmanız gerektiğidir.

(Sonuçlarında, Xcode 6 ile karşılaştırıldığında xcrun xcodebuild -help, -exportFormatve -exportProvisioningProfileseçenek bir daha söz değildir; eski silinir ve ikinci tarafından alınır -exportOptionsPlist.)

Adım 1 , dizini .xcodeproject veya .xcworkspace dosyası içeren klasöre değiştirin.

cd MyProjectFolder

Adım 2 , /usr/libexec/PlistBuddy exportOptions.plistdışa aktarma seçenekleri plist dosyası oluşturmak için Xcode veya kullanın. Bu arada, xcrun xcodebuild -helpplist dosyasına hangi anahtarları eklemeniz gerektiğini söyleyecektir.

Adım 3 , aşağıdaki gibi .xcarchive dosyası (aslında klasör) oluşturun (derleme / dizin şu anda Xcode tarafından otomatik olarak oluşturulacaktır),

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

Adım 4 , Xcode6'dan farklı olan .ipa dosyası olarak dışa aktarın

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

Şimdi, build / dizininde bir ipa dosyası alıyorsunuz. Sadece Apple App Store'a gönderin.

Bu arada, Xcode 7 tarafından oluşturulan ipa dosyası Xcode 6'dan çok daha büyük.


1
ön hazırlık profilini bu yaklaşımla nasıl belirtirsiniz. exportProvisioningProfile denedim ama exportOptionsPlist ile kullanılamaz dedi ... ve ben bulabileceğiniz plist profil belirtmek için hiçbir yolu yoktur ... sadece biri ile aynı ada sahip en eski almak gibi görünüyor o inşa ettiğim (gerçekten istediğimin tam tersi)
john ellis

"Project.pbxproj" adlı bir dosyada bulunan proje ayarları imzalama ayarlarına sahiptir -schemeve bu nedenle -configurationipa dosyasının nasıl imzalanacağı belirtilmiştir.
DawnSong

"Sadece Apple'a gönderin" dediğinizde, bu normal Arşiv adımlarının dışında olduğundan bu işlem nedir?
mix3d

"Apple'a göndermek" için iki yol vardır, itunesconnect.apple.com adresine giriş yapmak veya Xcode-> Open Developer Tool-> Uygulama Yükleyiciyi kullanmak. @ mix3d
DawnSong

1
Sonunda yeni bir cevap yarattığım tam otomatik bir çözüm buldum!
mix3d

14

Aşağıdaki adımların kısa bir açıklamasını ve aşağıda terrminal kullanarak bir ipa oluştururken geçirilecek parametreleri verdim:

  1. Terminalde MyApp.xcodeproject dosyasını içeren klasöre gidin

  2. Aşağıda verilen komutu kullanarak uygulamanın tüm Hedeflerini alacaksınız

    /usr/bin/xcodebuild -list 
  3. Yukarıdaki komut yürütüldükten sonra, .ipa oluşturmanız gereken belirli bir hedefi seçmeniz gereken hedeflerin bir listesini alırsınız.

    /usr/bin/xcodebuild -target $TARGET -sdk iphoneos -configuration Release
  4. Yukarıdaki komut projeyi derler ve bir .app dosyası oluşturur. .App dosyasını bulma yolu ./build/Release-iphoneos/MyApp.app

  5. Derleme başarılı olduktan sonra, aşağıdaki sözdizimini kullanarak Geliştirici Adı ve Temel Hazırlık Profili'ni kullanarak uygulamanın .ipa'sını oluşturmak için aşağıdaki komutu yürütün:

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

Yukarıdaki sözdizimindeki her bir Parametrenin açıklaması:

${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 seçilen " $ {OUTDIR} " çıkış dizininde oluşturulacak

Bu hatayı görüyorum "belirtilen uygulama mevcut değil veya bir paket dizini değil"
Ansari Awais

2
xcrun PackageApplication kullanımdan kaldırıldı.
Tunvir Rahman Tusher

8

Xcode 8:


IPA Biçimi:

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

MyMobileApp.xcarchive arşivini MyMobileApp Dağıtım Profili sağlama profilini kullanarak MyMobileApp.ipa yoluna bir IPA dosyası olarak dışa aktarır.

APP Biçimi:

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

MyMacApp.xcarchive arşivini, uygulama uygulama katyonu imzalama kimliğini kullanarak Developer ID Application: My Team kullanarak MyMacApp.pkg yoluna dışa aktarır. Yükleyici imzalama kimliği Geliştirici Kimliği Yükleyici: Ekibim, dışa aktarılan paketi imzalamak için dolaylı olarak kullanılır.

Xcodebuild man sayfası


7

Proje kökünüzün bulunduğu klasöre gidin ve:

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
Bu işe yaramıyor gibi görünüyor. 'Arşiv' buildaction XCode 3.2.2'de (son) mevcut değildir.
Martin Cote

4

Bir adım daha ileri giderek, Xcode 7 ile komut satırı üzerinden iTunesConnect'e yükleme ! ( .ipaDoğru sürüm profili ve imzalama kimliğiyle imzalanmış biriyle başladığınızı varsayarsak .)

altoolUygulama Yükleyici için CLI arabirimini girin ( docs, sayfa 38). Xcode.app yapısı içinde derin saklı, doğrudan ItunesConnect'e yüklememize izin veren kullanışlı bir işlevdir.

/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]Yeni basılanları yüklemek için çalıştırın.ipa doğrudan Apple'a . Parola isteğe bağlıdır ve komuttan çıkarsanız sizden istenir.

Doğrulama adımı sırasında uygulama ile ilgili herhangi bir sorun varsa, konsol bunları yazdırır.

altoolKonumunu kaydetmek istemiyorsanız yolunu büyük olasılıkla dışa aktarmanız gerekecektir .

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

Bu kadar! İTunesConnect.com'a giriş yapın ve testflight ile test için yeni yapınızı seçin.

Son Not: Bir hata mesajı Exception while launching iTunesTransporter: Transporter not found at path: /usr/local/itms/bin/iTMSTransporter. You should reinstall the applicationalırsanız , doğru yere bir sembol bağlantısı çalıştırmak için bu SO cevabındaki öneriyi takip edebilirsiniz :

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

3

Vincent'ın cevabını iyileştirerek, bunu yapmak için bir senaryo yazdım: xcodearchive
Projenizi komut satırı üzerinden arşivlemenizi (bir ipa oluşturmanızı) sağlar. Bunu xcodebuildkomutun kız kardeşi gibi düşün , ama arşivleme için.

Kod github'da bulunabilir: http://github.com/gcerquant/xcodearchive


Komut dosyasının bir seçeneği, dSYM sembollerinin zaman damgalı bir arşivde arşivlenmesini etkinleştirmektir. Artık sembolleri tutmamak ve daha sonra alabileceğiniz kilitlenme günlüğünü simgelemek mümkün değildir.


@KunalBalani Hayır, çalışma alanını doğru işlemesini beklemezdim. Koda bir bakın, adapte etmek çok fazla iş gerektirmez. Çekme istekleri hoş geldiniz!
Guillaume

3

Komut ile iOS projesi nasıl oluşturulur?

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 nedir?

Xcode'da ExportOptions.plist gereklidir. Bir ipa dosyası oluştururken bazı seçenekleri belirlemenizi sağlar. Uygulamanızı arşivlemek için Xcode kullandığınızda, uygun bir kullanıcı arayüzündeki seçenekleri belirleyebilirsiniz.

Önemli : ExportOptions.plist AppStore'da sürüm ve geliştirme yöntemi farklıdır

:

exportOptions_release ~ method = app-store

gelişme

exportOptions_dev ~ method = geliştirme


2

xctool'u deneyin, Apple'ın xcodebuild'inin yerini alarak iOS ve Mac ürünlerini oluşturmayı ve test etmeyi kolaylaştırır. Sürekli entegrasyon için özellikle yararlıdır. Birkaç ekstra özelliğe sahiptir:

  1. Xcode.app ile aynı testleri çalıştırır.
  2. Yapım ve test sonuçlarının yapısal çıktısı.
  3. İnsan dostu, ANSI renkli çıktı.

No.3 son derece kullanışlıdır. Herkes xcodebuild'in konsol çıktısını okuyamazsa yapamam, genellikle bana 5000'den fazla karakter içeren bir satır verdi. Bir tez çalışmasından daha da zor okunur.

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



2

Xcode 8'e güncelledikten sonra, kurumsal ipa'nın

/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}" 

Bazı imza sorunları nedeniyle komut başlatılamıyor. Günlükte "uyarı: PackageApplication kullanımdan kaldırıldı, xcodebuild -exportArchivebunun yerine kullanın.

Ben geçtim xcodebuild -exportArchiveve her şey normale döndü.


1

Doğrulama / paylaşma / gönderme seçeneklerini mi kastediyorsunuz? Bence bu Xcode'a özgüdür ve bir komut satırı oluşturma aracı için uygun değildir.

Biraz zekice, eminim sizin için bir senaryo yapabilirsiniz. Görünüşe göre sadece depolanmışlar~/Library/MobileDevice/Archived Applications/ bir UUDI ve bir plist ile . Doğrulayıcıyı tersine çevirmenin bu kadar zor olacağını hayal bile edemiyorum.

Otomatikleştirmeyle ilgilendiğim süreç beta test kullanıcılarına derlemeler gönderiyor. (App Store gönderimi nadiren gerçekleştiğinden, özellikle sık sık yeni açıklama metni eklemem gerektiğinden manuel olarak yapmayı umursamıyorum.) Xcode CLI kullanarak sözde bir Build + Archive yaparak, her kod işleminden otomatik derlemeleri tetikleyebilirim, yerleşik sağlama profillerine sahip IPA dosyaları oluşturun ve bunları test kullanıcılarına e-postayla gönderin.


Sorumu açıklığa kavuşturdum. Yukarıda "Yapabilirim" dediğinde, bugün bunu gerçekten yapabileceğini mi kastediyorsun?
Dan Fabulich

2
Evet. Hudson Continuous Integration'ı çalışan xcodebuildve bir IPA yapan özel bir komut dosyasıyla kullanıyorum .
Michael Grinich

Maalesef partiye geç kaldım, ancak TestFlight'ın kontrol etmeniz gereken süper kolay bir yükleme API'sı var
self.name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.