コマンドラインからXcodeの「ビルドとアーカイブ」


392

Xcode 3.2は、アドホック配布に適した.ipaファイルを生成する、[ビルド]メニューの[ビルドとアーカイブ]にすばらしい新機能を提供します。オーガナイザを開いて、「アーカイブされたアプリケーション」に移動し、「アプリケーションをiTunesConnectに送信」することもできます。

コマンドラインから(ビルドスクリプトの一部として)「ビルドとアーカイブ」を使用する方法はありますか?私はそれxcodebuildがどういうわけか関与していると思いmanますが、ページはこれについて何も言っていないようです。

更新 Michael Grinichは説明を求めました。ここでは、コマンドラインビルドでは実行できないことを説明します。「ビルドとアーカイブ」を実行した後、Xcodeのオーガナイザーでのみ実行できる機能です。

  1. [アプリケーションの共有...]をクリックして、ベータテスターとIPAを共有できます。Guillaumeが以下に指摘するように、Xcodeの魔法のため、このIPAファイルには、ベータテスターがインストールする必要がある個別に配布された.mobileprovisionファイルは必要ありません。それは魔法です。コマンドラインスクリプトでは実行できません。たとえば、Arrixのスクリプト(5月1日提出)はその要件を満たしていません。
  2. さらに重要なのは、ビルドをベータテストした後、[アプリケーションをiTunes Connectに送信]をクリックして、ビルドしたビルドとまったく同じバイナリを、ビルドし直さずにAppleに送信することです。アプリへの署名はビルドプロセスの一部であるため、コマンドラインからそれを行うことはできません。アドホックベータテストのビットに署名することも、App Storeへの送信用に署名することもできますが、両方に署名することはできません。コマンドラインで構築されたIPAを電話でベータテストして、直接Appleに送信することはできません。

私は誰かがやって来て私が間違っていることを証明してくれるのが大好きです。これらの機能はどちらもXcode GUIでうまく機能し、コマンドラインから複製することはできません。


1
ああ、クラッド。これは不可能のようです。答えがわからない場合は、少なくとも質問に投票して、私の賞金がエーテルに消えないようにしてください... :-(
Dan Fabulich

3
これは不可能ではなく、の一部ではありませんxcodebuild。IPAファイルを作成するには、アプリを「Payload」という名前のディレクトリに配置し、そのディレクトリを圧縮して、MyAppName.ipaに名前を変更するだけです。
マイケル・グリニッチ、2010

@Michael、「ビルドとアーカイブ」は、オーガナイザー機能も有効にします。これは、手作業でIPAファイルを作成するだけでは使用できません。
Dan Fabulich、2010

コメントが少し長くなったので、回答として投稿しました。
Michael Grinich、2010

3
vdaubryによる最初の/受け入れられた回答は機能しますが、Xcodeの新しいバージョンでは、Reidによる回答がはるかに簡単です。
プロメテウス

回答:


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
また、.appのビルド時に使用されたのと同じ署名/プロファイルを保持したい場合は、-signまたは--embedオプションは必要ありません。これは、リリース構成のコード署名ビルド設定で設定したものになります。
Mike Weller

12
のipaファイルパスは-o "${ipa_path}"絶対パスでなければならないことに注意してください。それ以外の場合は、おそらく取得するerror: Unable to create '.../...ipa'か、作成を無視して黙って無視されます。くそ、それは私に数時間を無駄にした。
h--n

2
誰かが{}括弧が何をするのか教えてもらえますか?私は彼らが空白を処理すると仮定していますが、私は間違っている可能性があります。
scord

6
Xcode 8.3 Beta 1では、PackageApplicationコマンドが完全に削除されています。再度使用しないでください。次に示すように、「xcodebuild -scheme <SchemeName> archive」を使用してください。
HansKnöchel

283

Xcode 4.2では、-schemeフラグを使用してこれを行うことができます。

xcodebuild -scheme <SchemeName> archive

このコマンドの後、アーカイブはXcode Organizerに表示されます。


3
はい、もっといいです!それを機能させるために、私は次のことを行いました:プロジェクトフォルダーにcdしてから、「xcodebuild -scheme MyProjectName archive」を実行します(通常、プロジェクト名と同じ名前のスキームがあるため)
Samuel

18
このarchiveアクション、ワークスペースとスキームを除いて、この呼び出しを通じて提供する設定尊重しないことに注意してください。これには時間がかかるだけです!
danyowdee

5
罰金を作品のXcode 4.4、と私は確信しそれは同様に4.3で大丈夫でしたよ。使用して正しいXcodeリリースを選択したことを確認してくださいxcode-select <path to Xcode.app>
Reid Ellis

2
また、" "でスキームを指定する必要あります-scheme <SchemeName>
Reid Ellis

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

IPAエクスポートエクスポートオプションplistに注意してください

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


teamcity / jenkinsのようなCI / CDツールでプロジェクトをビルドするためにこれを使用していた人は、ビルドエージェントにインストールされた正しいxcodeをアーカイブとエクスポートの両方に使用していることを確認してください。

これには、以下の2つのオプションのいずれかを使用できます。

  1. xcodebuildへのフルパスを使用し、
/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild
  1. xcode-selectを使用し、
xcode-select -switch /Applications/Xcode 9.3.1.app

以下は私の古い答えです

これは、アーカイブを作成するためのコマンドラインスクリプトとIPAの例です。iPhone xcodeプロジェクトがあり、デスクトップ/ MyiOSAppフォルダーにあります。

次のコマンドを1つずつ実行します。

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"

これはXcode 5でテストされており、私にとっては問題なく動作しています。


2
Xcode6.1.1では完全に動作しました。オーガナイザーからAdHocディストリビューションをビルドしようとすると、Xcode6から「アカウントには既に有効な証明書があります」というエラーが表示されるため、ターミナルからアプリをビルドすることにしました。
FormigaNinja 2014

WatchKitアプリがある場合、IPAにはWatchKitSupportという新しいフォルダーとSymbolsフォルダーがあります(オプションの場合があります)。これらもexportArciveにエクスポートする方法があるかどうか知っていますか?
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
@Rajはい、ありがとう
Mohammad Reza Koohkan

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
これは良い解決策ですが、コードをコメントなしで読むのは少し難しいです。何が起こっているのかについてもう少し書いていただけますか?
マイケル・グリニッチ、2010

xcodeは「APPNAME.ipa」の名前をどこで取得しますか?パッケージングから->製品名?
カルロスリカルド

3
このスクリプトは、現在WatchKitアプリでは十分ではありません。ウォッチキットアプリでのipaファイルの新しい仕様を知っている人はいますか?
RPM

時計キットで@RPMと同じ問題が発生します。解決策はありますか?
danieljimenez

@RPMは、WatchKitについてこれをチェックしてください。私自身は試していませんが、matrixprojects.net
p /

26

このxcodebuildツールは、-exportArchiveフラグを使用してアーカイブ製品をビルドおよびエクスポートできます(Xcode 5以降)。エクスポート手順は、以前はXcode Organizer 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ビルドのプロビジョニングプロファイルはAdHoc配布プロビジョニングプロファイルを指定し、Macアプリの署名IDはサードパーティアプリケーションとしてエクスポートする開発者IDを指定しました(つまり、Mac App Store経由で配布されません)。


1
xcodeワークスペースを使用していて、cocopodsと互換性がない場合は機能しません
amleszk

1
-workspacexcodebuildにオプション(およびワークスペースへのパス)を追加してみましたか?man xcodebuild状態:「Xcodeワークスペースをビルドするには、ビルドを定義するために-workspaceオプションと-schemeオプションの両方を渡す必要があります。」
Nik

-workspaceオプションを追加すると、これはうまく機能します。最初のコマンドで作成されたアーカイブのパスを取得する必要があるだけなので、2番目のコマンドにフィードを送ることができます。アーカイブの作成場所は-archivePathオプションで指定できますが、デフォルトの場所を使用することをお勧めします。これは私がそのパスを取得する方法を理解するのに役立ちました:stackoverflow.com/a/9024901/813247
robotspacer

24

私たちはXCode 4.2.1でiPadアプリを開発し、OTAディストリビューションの継続的インテグレーション(Jenkins)にビルドを統合したいと考えました。これが私が思いついた解決策です:

# 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

次に、Jenkinsがipa、plist、htmlファイルをウェブサーバーにアップロードします。

これはplistテンプレートです:

<?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
アップルのPlistbuddyコマンドを使用してplistファイルを変更することもできます。例:/ usr / libexec / PlistBuddy -c "Set:CFBundleVersion 1.2.3.4" /path/to/info.plist。SEDで遊ぶのではなく:)
Jelle De Laender

情報をありがとう。私はplistbuddyよりもsedの経験があるので、sedを選択します:)
FuePi

1
私はお勧め$WORKSPACEの代わりに、$PWD生成のためにAPP_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と同じように、実際にビルドを辞任できるので、同じバイナリをテストして出荷できます。たとえば、私のスクリプト(上記と同様)で、アドホックビルドとして署名されたリリースバージョンをビルドし、それをテスト用にIPAとしてアーカイブしてから、配布証明書で再署名し、zipファイルを作成します。林檎。関連する行は次のとおりです。

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

14

以下のためのXcode 7、あなたははるかに簡単な解決策を持っています。唯一の追加作業は、アーカイブをエクスポートするための構成plistファイルを作成する必要があることです。

(Xcode 6と比較すると、の結果でxcrun xcodebuild -help-exportFormat-exportProvisioningProfileオプションはもう言及されていません。前者は削除され、後者はによって置き換えられ-exportOptionsPlistます。)

手順1、ディレクトリを.xcodeprojectまたは.xcworkspaceファイルを含むフォルダーに変更します。

cd MyProjectFolder

ステップ2、Xcodeを使用するか/usr/libexec/PlistBuddy exportOptions.plist、エクスポートオプションのplistファイルを作成します。ちなみに、xcrun xcodebuild -helpplistファイルに挿入する必要があるキーを教えてくれます。

ステップ3、次のように.xcarchiveファイル(実際にはフォルダ)を作成します(build /ディレクトリは、現在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

これで、build /ディレクトリにipaファイルが作成されます。Apple App Storeに送信してください。

ちなみに、Xcode 7で作成されたipaファイルは、Xcode 6よりもはるかに大きくなります。


1
このアプローチでどのようにプロビジョニングプロファイルを指定しますか。exportProvisioningProfileを試してみましたが、exportOptionsPlistでは使用できないとのことで、plistで見つけることができるプロファイルを指定する方法はありません...同じ名前の最も古いものを使用しているようですそれはそれを構築しました(私が本当に望んでいるものの反対です)
ジョン・エリス

「project.pbxproj」という名前のファイルに含まれるプロジェクト設定には署名設定があるため-scheme-configurationオプションにはipaファイルへの署名方法が指定されています。
DawnSong

「Appleに送信するだけ」と言った場合、これは通常のアーカイブ手順の範囲外なので、そのプロセスは何ですか?
mix3d 2016

「アップルに送信」するには、itunesconnect.apple.comにログインする方法と、Xcode-> Open Developer Tool-> Application Loaderを使用する方法の2つがあります。@ mix3d
DawnSong

1
完全に自動化されたソリューションを見つけて、新しい答えを作成しました!
mix3d 2016年

14

以下の手順の簡単な説明と、以下のterrminalを使用してipaを生成するときに渡すパラメーターを示しました。

  1. ターミナルでMyApp.xcodeprojectファイルを含むフォルダーに移動します

  2. 以下のコマンドを使用すると、アプリケーションのすべてのターゲットが取得されます

    /usr/bin/xcodebuild -list 
  3. 上記のコマンドを実行すると、.ipaを生成する必要がある特定のターゲットを選択する必要があるターゲットのリストが表示されます。

    /usr/bin/xcodebuild -target $TARGET -sdk iphoneos -configuration Release
  4. 上記のコマンドはプロジェクトをビルドし、.appファイルを作成します。.appファイルを見つけるためのパスは ./build/Release-iphoneos/MyApp.app

  5. ビルドが成功したら、次のコマンドを実行し、以下の構文を使用して、開発者名とプロビジョニングプロファイルを使用してアプリケーションの.ipaを生成します。

    /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} "に生成されます

「指定されたアプリケーションが存在しないか、バンドルディレクトリではありません」というエラーが表示されます
Ansari Awais '31

2
xcrun PackageApplicationは非推奨です。
Tunvir Rahman Tusher

8

Xcode 8:


IPA形式:

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

プロビジョニングプロファイルMyMobileApp Distribution Profileを使用して、アーカイブMyMobileApp.xcarchiveをIPAファイルとしてパスMyMobileApp.ipaにエクスポートします。

APPフォーマット:

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

アプリケーションのアプリケーションカチオン署名ID開発者IDアプリケーション:My Teamを使用して、アーカイブMyMacApp.xcarchiveをPKGファイルとしてパスMyMacApp.pkgにエクスポートします。インストーラー署名ID開発者IDインストーラー:マイチームは、エクスポートされたパッケージに署名するために暗黙的に使用されます。

Xcodebuildのマニュアルページ


7

プロジェクトのルートがあるフォルダーに移動し、次のようにします。

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
これは機能していないようです。「アーカイブ」ビルドアクションは、XCode 3.2.2(最終)では使用できません。
Martin Cote、

4

さらに一歩進んで、Xcode 7のコマンドライン経由でiTunesConnectにアップロードします。(.ipa正しいリリースプロファイルと署名IDで署名されているから始めていると仮定します。)

入力しaltool、アプリケーションローダのためのCLIインターフェイス(docs38ページ)。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そのままApple にアップロードします。パスワードはオプションであり、コマンドを省略した場合はパスワードの入力を求められます。

確認ステップ中にアプリに問題がある場合は、コンソールに印刷されます。

altoolその場所を保存したくない場合は、パスをにエクスポートする必要があります。

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

それでおしまい!iTunesConnect.comにログインして、testflightでテストする新しいビルドを選択するだけです。

最後の注意:というエラーが表示された場合は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
それを行うスクリプトを作成しました。これにより、コマンドラインを使用してプロジェクトをアーカイブ(ipaを生成)できます。xcodebuildコマンドの姉妹と同じように考えてください。

コードはgithubで入手できます:http : //github.com/gcerquant/xcodearchive


スクリプトの1つのオプションは、タイムスタンプ付きアーカイブで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とは何ですか?

XcodeではExportOptions.plistが必要です。ipaファイルを作成するときに、いくつかのオプションを指定できます。Xcodeを使用してアプリをアーカイブするときに、使いやすいUIでオプションを選択できます。

重要:ExportOptions.plist AppStoreでは、リリースと開発の方法が異なります

exportOptions_release〜method = app-store

開発

exportOptions_dev〜メソッド=開発


2

xctoolを試してください。これは、Appleのxcodebuildに代わるもので、iOSおよびMac製品のビルドとテストを容易にします。これは、継続的な統合に特に役立ちます。これにはいくつかの追加機能があります。

  1. Xcode.appと同じテストを実行します。
  2. ビルドおよびテスト結果の構造化された出力。
  3. 人に優しい、ANSI色の出力。

No.3は非常に便利です。xcodebuildのコンソール出力をだれでも読むことができない場合、私はできません。通常、5000文字以上の1行が表示されました。論文よりも読みにくい。

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/UUDIとplistで。バリデーターをリバースエンジニアリングするのがそれほど難しいとは思えません。

自動化したいプロセスは、ビルドをベータテスターに​​送信することです。(App Storeの送信はまれにしか発生しないため、特に新しい説明テキストを追加する必要があるため、手動で実行してもかまいません。)XcodeのCLIを使用して疑似Build + Archiveを実行することにより、すべてのコードコミットから自動ビルドをトリガーできます。埋め込まれたプロビジョニングプロファイルでIPAファイルを作成し、テスターに​​メールで送信します。


質問を明確にしました。上で「できる」と言ったとき、今日は実際にできるということですか?
Dan Fabulich、2010

2
はい。Hudson Continuous Integrationを使用xcodebuildして、IPA を実行して実行するカスタムスクリプトを使用しています。
マイケル・グリニッチ

申し訳ありませんが、私は遅れて相手にだけど、TestFlightはあなたがチェックアウトする必要があることを超簡単アップロードAPIを持っている
self.name
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.