명령 행에서 Xcode“빌드 및 아카이브”


392

Xcode 3.2는 빌드 메뉴에서 "빌드 및 아카이브"라는 새로운 기능을 제공하여 Ad Hoc 배포에 적합한 .ipa 파일을 생성합니다. Organizer를 열고 "아카이브 응용 프로그램"및 "iTunesConnect에 응용 프로그램 제출"로 이동할 수도 있습니다.

명령 행에서 "빌드 및 아카이브"를 사용하는 방법이 있습니까 (빌드 스크립트의 일부로)? 나는 xcodebuild어떻게 든 관련이 있다고 가정 하지만 man페이지는 이것에 대해 아무 말도하지 않는 것 같습니다.

업데이트 Michael Grinich는 설명을 요청했습니다. 커맨드 라인 빌드로 할 수없는 것, "빌드 및 아카이브"후에 Xcode의 오거나이저로만 할 수있는 기능입니다.

  1. "애플리케이션 공유 ..."를 클릭하여 IPA를 베타 테스터와 공유 할 수 있습니다. Guillaume이 아래에 지적한 바와 같이, 일부 Xcode 매직으로 인해이 IPA 파일에는 베타 테스터가 설치해야하는 별도로 배포 된 .mobileprovision 파일이 필요하지 않습니다. 그것은 마술이다. 명령 줄 스크립트로는 할 수 없습니다. 예를 들어 Arrix의 스크립트 (5 월 1 일 제출)는 해당 요구 사항을 충족하지 않습니다.
  2. 더 중요한 것은, 빌드를 베타 테스트 한 후에 "응용 프로그램을 iTunes Connect에 제출"을 클릭하면 테스트를 빌드하지 않은 테스트 한 바이너리 인 EXACT와 동일한 빌드를 Apple에 제출할 수 있습니다. 앱 서명은 빌드 프로세스의 일부이기 때문에 명령 줄에서는 불가능합니다. Ad Hoc 베타 테스트를 위해 비트에 서명하거나 App Store에 제출하도록 비트에 서명 할 수 있지만 둘 다에 서명 할 수는 없습니다. 명령 줄에 구축 된 IPA는 전화에서 베타 테스트를 거친 다음 Apple에 직접 제출할 수 없습니다.

누군가가 와서 나를 잘못 알고 싶어합니다.이 두 기능 모두 Xcode GUI에서 훌륭하게 작동하며 명령 줄에서 복제 할 수 없습니다.


1
아, 크루 드 불가능한 것 같습니다. 답을 모른다면 적어도 내 질문에 투표하여 내 현상금이 에테르로 사라지지 않도록하십시오. :-(
Dan Fabulich

3
이것은 불가능하지 않으며 단지의 일부가 아닙니다 xcodebuild. IPA 파일을 만들려면 앱을 "Payload"라는 디렉토리에 넣고 해당 디렉토리를 압축 한 다음 이름을 MyAppName.ipa로 바꾸면됩니다.
Michael Grinich

@Michael의 "빌드 및 아카이브"는 Organizer 기능도 활성화합니다.이 기능은 IPA 파일을 직접 만들 때 사용할 수 없습니다.
Dan Fabulich

내 의견이 약간 길어 답변으로 게시되었습니다 .
Michael Grinich

3
vdaubry의 첫 번째 / 허용 된 답변이 효과가 있지만 Reid의 답변은 최신 버전의 Xcode의 경우 훨씬 간단합니다.
Prometheus

답변:


314

comand 라인에서 빌드 및 아카이브 프로세스를 자동화하는 방법을 찾았습니다. 방금 블로그 기사를 썼습니다. 이를 달성하는 방법을 설명하는 했습니다.

사용해야하는 명령은 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절대 경로가되어야합니다.
David Dunham

5
또한 .app를 빌드 할 때 사용한 것과 동일한 서명 / 프로필을 유지하려는 경우 --sign 또는 --embed 옵션이 필요하지 않습니다. 릴리스 구성에 대한 코드 서명 빌드 설정에서 설정 한 내용입니다.
Mike Weller

12
ipa 파일 경로 -o "${ipa_path}"는 절대 경로 여야합니다. 그렇지 않으면 아마도 얻 error: Unable to create '.../...ipa'거나 자동 생성을 무시합니다. 젠장, 두 시간을 낭비했다.
h--n

2
누군가 {} 괄호가 무엇을 말해 줄 수 있습니까? 나는 그들이 공백을 처리한다고 가정하고 있지만 잘못 될 수 있습니다.
scord

6
Xcode 8.3 베타 1은 PackageApplication 명령을 완전히 제거합니다. 다시 사용하지 말고 아래 제안 된대로 "xcodebuild -scheme <SchemeName> 아카이브"를 사용하십시오.
한스 코첼

283

Xcode 4.2에서는 -scheme 플래그를 사용하여이를 수행 할 수 있습니다.

xcodebuild -scheme <SchemeName> archive

이 명령이 끝나면 Xcode Organizer에 Archive가 나타납니다.


3
예, 훨씬 낫습니다! 작동하려면 다음을 수행하십시오. 프로젝트 폴더로 cd 한 다음 "xcodebuild -scheme MyProjectName 아카이브"를 실행하십시오 (일반적으로 프로젝트 이름과 이름이 같은 구성표가 있기 때문에)
Samuel

18
작업 공간 및 구성표를 제외하고이 호출을 통해 제공 한 설정은 해당 archive작업에 적용되지 않습니다 . 시간 이 많이 걸립니다 !
danyowdee

5
Xcode 4.4 에서는 제대로 작동 하며 4.3에서도 잘 작동합니다. 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를 아카이브 및 내보내기에 사용하고 있는지 확인하십시오.

아래 두 가지 옵션 중 하나를 사용할 수 있습니다.

  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 예제 작성을위한 명령 행 스크립트입니다. Desktop / MyiOSApp 폴더에있는 iPhone xcode 프로젝트가 있습니다.

다음 명령을 하나씩 실행하십시오.

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에서 완벽하게 작동했습니다. Xcode6에서 Organizer에서 AdHoc 배포를 만들려고 할 때 "계정에 유효한 인증서가 있습니다"라는 오류가 표시되므로 터미널에서 앱을 빌드하려고합니다.
FormigaNinja

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 이전 답변에있는 참조를 표시하기 위해 보관했습니다. 내 답변의 시작 부분에서 유효한 내보내기 옵션을 볼 수 있습니다
Raj

1
@Raj yeap, 감사합니다
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
주석없이 코드를 읽기가 어렵지만 이것은 좋은 해결책입니다. 무슨 일이 일어나고 있는지 좀 더 적어 주시겠습니까?
Michael Grinich

xcode는 "APPNAME.ipa"이름을 어디서 얻습니까? 포장-> 제품 이름에서?
Carlos Ricardo

3
WatchKit 앱으로는이 스크립트로는 충분하지 않습니다. 누구든지 watchkit 앱으로 ipa 파일의 새로운 사양을 알고 있습니까?
RPM

워치 키트와 함께 @RPM과 동일한 문제가 발생합니다. 어떤 해결책?
danieljimenez

@RPM은 WatchKit 관련 내용을 확인하십시오. 나는 그것을 직접 시도하지는 않았지만 꽤 철저한 matrixprojects.net/p/watchkit-command-line-builds
mattman88

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는 써드 파티 애플리케이션 (Mac App Store를 통해 분배되지 않음)으로 내보낼 개발자 ID를 지정했습니다.


1
xcode 작업 공간을 사용할 때 작동하지 않으며 cocopod와 호환되지 않습니다
amleszk

1
-workspacexcodebuild (및 작업 공간의 경로)에 옵션을 추가해 보셨습니까 ? man xcodebuild상태 : "Xcode 작업 공간을 빌드하려면 -workspace 및 -scheme 옵션을 모두 전달하여 빌드를 정의해야합니다."
Nik

이것은 -workspace 옵션이 추가되어 나에게 효과적입니다. 첫 번째 명령으로 만든 아카이브의 경로를 가져와야하므로 두 번째 명령으로 피드를 공급할 수 있습니다. -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
Apple의 Plistbuddy 명령으로 plist-file을 변경할 수도 있습니다 (예 : / usr / libexec / PlistBuddy -c "Set : CFBundleVersion 1.2.3.4"/path/to/info.plist). :) SED와 함께 연주 대신에
Jelle 드 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와 마찬가지로 실제로 빌드를 사임하면 동일한 바이너리를 테스트하고 배송 할 수 있습니다. 예를 들어 스크립트에서 (위의 것과 유사) AdHoc 빌드로 서명 된 릴리스 버전을 빌드 한 다음 테스트를 위해 IPA로 아카이브 한 다음 배포 인증서로 사임하고 zip 파일을 작성합니다. 사과. 관련 라인은 다음과 같습니다

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

14

위해 엑스 코드 (7) , 당신은 훨씬 더 간단한 해결책이있다. 추가 작업은 아카이브를 내보내기 위해 구성 plist 파일을 작성해야한다는 것입니다.

(결과에서 엑스 코드 (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 단계 , Xcode6과 다른 .ipa 파일로 내보내기

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

"Apple에 보내기", itunesconnect.apple.com에 로그인 또는 Xcode-> Open Developer Tool-> Application Loader를 사용 하는 두 가지 방법이 있습니다 . @ mix3d
DawnSong

1
나는 완전히 자동화 된 솔루션을 찾았고 새로운 답변을 만들었습니다!
mix3d

14

다음 단계에 대한 간단한 설명과 아래 terrminal을 사용하여 ipa를 생성하는 동안 전달할 매개 변수를 제공했습니다.

  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. 빌드가 완료되면 다음 명령을 실행하여 아래 구문을 사용하여 개발자 이름 및 프로비저닝 프로파일을 사용하여 애플리케이션의 .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. 선택한 출력 디렉토리 " $ {OUTDIR} " 에서 ipa가 생성됩니다.

이 오류가 발생했습니다 "지정된 응용 프로그램이 존재하지 않거나 번들 디렉토리가 아닙니다"
Ansari Awais

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 배포 프로파일을 사용하여 MyMobileApp.xcarchive 아카이브를 IPA 파일로 MyMobileApp.ipa 경로에 내 보냅니다.

APP 형식 :

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

응용 프로그램 응용 프로그램 양이온 서명 ID 개발자 ID 응용 프로그램 : 내 팀을 사용하여 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 하십시오.)

altoolApplication Loader의 CLI 인터페이스 인을 입력 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에 로그인하고 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

Vincent의 답변을 개선하기 위해 스크립트를 작성했습니다 xcodearchive
. 명령 행을 통해 프로젝트를 아카이브 (ipa 생성) 할 수 있습니다. 그것을 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 ~ 메소드 = app-store

개발

exportOptions_dev ~ 방법 = 개발


2

xctool을 사용해보십시오 .iOS 및 Mac 제품을 쉽게 빌드하고 테스트 할 수있는 Apple의 xcodebuild를 대체합니다. 지속적인 통합에 특히 도움이됩니다. 몇 가지 추가 기능이 있습니다.

  1. Xcode.app와 동일한 테스트를 실행합니다.
  2. 빌드 및 테스트 결과의 구조화 된 출력.
  3. 인간 친화적 인 ANSI 컬러 출력.

No.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/UUDI와 plist와 함께 저장된 것 같습니다 . 유효성 검사기를 리버스 엔지니어링하는 것이 어려울 것이라고는 상상할 수 없습니다.

자동화하고 싶은 프로세스는 베타 테스터에게 빌드를 보내는 것입니다. (App Store 제출이 드물게 발생하기 때문에, 특히 새 설명 텍스트를 추가해야하기 때문에 수동으로 처리하는 것은 중요하지 않습니다.) Xcode의 CLI를 사용하여 의사 빌드 + 아카이브를 수행하면 모든 코드 커밋에서 자동 빌드를 트리거 할 수 있습니다. 프로비저닝 프로파일이 포함 된 IPA 파일을 작성하여 테스터에게 이메일로 보냅니다.


나는 나의 질문을 명확히했다. 위에서 "할 수 있습니다"라고 말하면 실제로 오늘이 작업을 수행 할 수 있습니까?
Dan Fabulich

2
예. 내가 사용하고 허드슨 지속적인 통합 실행하는 사용자 정의 스크립트 xcodebuild와 IPA하게합니다.
Michael Grinich

죄송합니다 나는 파티에 늦었어요,하지만 TestFlight 당신이 체크 아웃해야하는 아주 쉽게 업로드 API가
self.name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.