Xcode xông hơi Xây dựng và Lưu trữ từ dòng lệnh


392

Xcode 3.2 cung cấp một tính năng mới tuyệt vời trong menu Build, "Build and Archive" để tạo tệp .ipa phù hợp cho phân phối Ad Hoc. Bạn cũng có thể mở Trình tổ chức, đi đến "Ứng dụng đã lưu trữ" và "Gửi ứng dụng tới iTunesConnect".

Có cách nào để sử dụng "Xây dựng và Lưu trữ" từ dòng lệnh (như một phần của tập lệnh xây dựng) không? Tôi cho rằng điều đó xcodebuildcó liên quan bằng cách nào đó, nhưng mantrang dường như không nói gì về điều này.

CẬP NHẬT Michael Grinich yêu cầu làm rõ; Đây chính xác là những gì bạn không thể làm với các bản dựng dòng lệnh, các tính năng bạn CHỈ có thể làm với Trình tổ chức Xcode sau khi "Xây dựng và Lưu trữ".

  1. Bạn có thể nhấp vào "Chia sẻ ứng dụng ..." để chia sẻ IPA của mình với những người thử nghiệm beta. Như Guillaume chỉ ra bên dưới, do một số phép thuật Xcode, tệp IPA này không yêu cầu tệp .mobileprovision phân phối riêng mà người kiểm tra beta cần cài đặt; thật là kỳ diệu Không có kịch bản dòng lệnh nào có thể làm điều đó. Ví dụ: tập lệnh của Arrix (đã gửi ngày 1 tháng 5) không đáp ứng yêu cầu đó.
  2. Quan trọng hơn, sau khi bạn đã thử nghiệm bản dựng, bạn có thể nhấp vào "Gửi ứng dụng tới iTunes Connect" để gửi bản dựng chính xác đó cho Apple, bản nhị phân mà bạn đã kiểm tra mà không cần xây dựng lại. Điều đó là không thể từ dòng lệnh, bởi vì ký ứng dụng là một phần của quá trình xây dựng; bạn có thể ký các bit để thử nghiệm beta Ad Hoc HOẶC bạn có thể ký chúng để gửi lên App Store, nhưng không phải cả hai. Không có IPA nào được xây dựng trên dòng lệnh có thể được thử nghiệm beta trên điện thoại và sau đó được gửi trực tiếp cho Apple.

Tôi muốn một người nào đó đi cùng và chứng minh tôi sai: cả hai tính năng này đều hoạt động tốt trong GUI Xcode và không thể được sao chép từ dòng lệnh.


1
Aw, thô lỗ. Điều này dường như là không thể. Nếu bạn không biết câu trả lời, ít nhất hãy bỏ phiếu cho câu hỏi để tiền thưởng của tôi không biến mất trong ether ... :-(
Dan Fabulich

3
Điều này là không thể, nó không phải là một phần của xcodebuild. Tạo tệp IPA chỉ cần đưa ứng dụng vào thư mục có tên "Tải trọng", nén thư mục đó và đổi tên thành MyAppName.ipa.
Michael Grinich

@Michael, "Xây dựng và Lưu trữ" cũng cho phép các tính năng của Trình tổ chức, không có sẵn khi bạn chỉ tạo một tệp IPA bằng tay.
Dan Fabulich

Nhận xét của tôi hơi dài, vì vậy nó được đăng dưới dạng câu trả lời .
Michael Grinich

3
Mặc dù câu trả lời đầu tiên / được chấp nhận bởi vdaubry sẽ hoạt động, nhưng câu trả lời của Reid đơn giản hơn nhiều đối với các phiên bản Xcode mới hơn.
Prometheus

Câu trả lời:


314

Tôi tìm thấy cách tự động hóa quá trình xây dựng và lưu trữ từ dòng comand, tôi vừa viết một bài viết trên blog giải thích cách bạn có thể đạt được điều đó.

Lệnh bạn phải sử dụng là 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}"

Bạn sẽ tìm thấy tất cả các chi tiết trong bài viết . Nếu bạn có bất kỳ câu hỏi đừng ngần ngại hỏi.


19
Không rõ ràng với tôi một thời gian, nhưng RELEASE_BUILDDIRcần phải là một con đường tuyệt đối.
David Dunham

5
Cũng lưu ý rằng bạn không cần các tùy chọn --sign hoặc --embed nếu bạn muốn giữ cùng một chữ ký / hồ sơ được sử dụng khi .app được xây dựng. Đây sẽ là bất cứ điều gì bạn đã thiết lập trong cài đặt xây dựng Ký mã cho cấu hình Phát hành của bạn.
Mike Weller

12
Lưu ý rằng đường dẫn tệp ipa -o "${ipa_path}"phải là một đường dẫn tuyệt đối. Nếu không, bạn có thể sẽ nhận được error: Unable to create '.../...ipa'hoặc nó sẽ âm thầm bỏ qua việc tạo. Chết tiệt, tôi đã lãng phí một vài giờ.
h - n

2
Ai đó có thể cho tôi biết niềng răng {} làm gì không? Tôi cho rằng họ chăm sóc khoảng trống, nhưng tôi có thể sai.
scord

6
Xcode 8.3 Beta 1 loại bỏ hoàn toàn lệnh GóiApplication. Không sử dụng lại và sử dụng "xcodebuild -scheme <SchemeName> archive" như đề xuất bên dưới.
Hans Knöchel

283

Với Xcode 4.2, bạn có thể sử dụng cờ -scheme để thực hiện việc này:

xcodebuild -scheme <SchemeName> archive

Sau lệnh này, Lưu trữ sẽ hiển thị trong Xcode Organizer.


3
Vâng, tốt hơn nhiều! Để làm cho nó hoạt động, tôi đã làm như sau: cd vào thư mục dự án của bạn, sau đó chạy "xcodebuild -scheme MyProjectName archive" (vì thông thường, bạn có một lược đồ có cùng tên với tên dự án của bạn)
Samuel

18
Lưu ý rằng archivehành động không tôn trọng bất kỳ cài đặt nào bạn cung cấp thông qua lời mời này, ngoài không gian làm việc và sơ đồ - điều này chỉ khiến tôi mất hàng giờ !
danyowdee

5
Hoạt động tốt trong Xcode 4.4 và tôi chắc chắn rằng nó cũng ổn trong 4.3. Đảm bảo bạn đã chọn bản phát hành Xcode chính xác bằng cách sử dụngxcode-select <path to Xcode.app>
Reid Ellis

2
Ngoài ra, bạn phải chỉ định sơ đồ với " -scheme <SchemeName>"
Reid Ellis

6
Điều này tốt cho việc tạo kho lưu trữ, tuy nhiên Gói ứng dụng trong xcrun thực sự tạo tệp .ipa. Bạn cần tệp này để phân phối cho những người thử nghiệm beta thông qua một cái gì đó như TestFlight
jmstone617

145

Cập nhật câu trả lời của tôi với Xcode 9 và Swift

Lưu trữ

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

Xuất IPA ( xin lưu ý nguyên tắc tùy chọn xuất )

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

Đối với những người không biết về exportOptions.plist, https://blog.bitawn.io/new-export-options-plist-in-xcode-9


Những người đang sử dụng dự án này để xây dựng dự án trong các công cụ CI / CD như teamcity / jenkins, vui lòng đảm bảo rằng bạn đang sử dụng đúng mã được cài đặt trong tác nhân xây dựng cho cả lưu trữ và xuất.

Bạn có thể sử dụng một trong hai tùy chọn dưới đây cho việc này.

  1. Sử dụng đường dẫn đầy đủ để xcodebuild,
/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild
  1. Sử dụng xcode-select,
xcode-select -switch /Applications/Xcode 9.3.1.app

Dưới đây là câu trả lời cũ của tôi

Đây là kịch bản dòng lệnh để tạo lưu trữ và ví dụ IPA. Tôi có một dự án xcode iPhone, nằm trong thư mục Desktop / MyiOSApp.

Thực hiện các lệnh sau từng cái một:

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"

Điều này đã được thử nghiệm với Xcode 5 và hoạt động tốt với tôi.


2
Nó hoạt động hoàn hảo trên Xcode6.1.1. Tôi chọn xây dựng các ứng dụng của mình từ thiết bị đầu cuối vì Xcode6 cho tôi lỗi "Tài khoản của bạn đã có chứng chỉ hợp lệ" khi tôi cố gắng xây dựng phân phối AdHoc từ người tổ chức.
FormigaNinja

Nếu bạn có ứng dụng WatchKit thì có một thư mục mới trong ipa có tên WatchKitSupport cũng như thư mục Symbols (có thể là tùy chọn). Bạn có biết có cách nào để xuất khẩuArcive để xuất những cái này không?
RPM

1
xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace -scheme <schemeName> clean archive -configuration release -sdk iphoneos -archivePath <ProjectName>.xcarchive đang ném lỗi: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 trong câu trả lời cũ tôi đã giữ nó để hiển thị tham chiếu, bạn có thể thấy tùy chọn xuất hợp lệ ở đầu câu trả lời của tôi
Raj

1
@Raj yeap, cảm ơn bạn
Mohammad Reza Koohkan

29

Tôi đã sử dụng tập lệnh xây dựng của riêng mình để tạo gói ipa để phân phối ad hoc.

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

Kịch bản cũng tăng số phiên bản. Bạn có thể loại bỏ phần đó nếu không cần thiết. Hy vọng nó giúp.


3
Đây là một giải pháp tốt, mặc dù mã của bạn hơi khó đọc mà không có ý kiến. Bạn sẽ viết thêm một chút về những gì đang xảy ra?
Michael Grinich

Xcode lấy tên "APPNAME.ipa" ở đâu? Từ Bao bì-> Tên sản phẩm?
Carlos Ricardo

3
Kịch bản này hiện chưa đủ với ứng dụng WatchKit. Có ai biết thông số kỹ thuật mới của tệp ipa với ứng dụng watchkit không?
RPM

Nhìn thấy các vấn đề tương tự như @RPM với bộ đồng hồ. Bất kỳ giải pháp?
danieljimenez

@RPM kiểm tra điều này cho các công cụ WatchKit. Tôi đã không thử bản thân mình, nhưng dường như khá kỹ lưỡng matrixprojects.net/p/watchkit-command-line-builds
mattman88 13/07/2015

26

Công xcodebuildcụ này có thể xây dựng và xuất các sản phẩm lưu trữ với cờ -exportArchive (kể từ Xcode 5). Bước xuất trước đây chỉ có thể thực hiện thông qua giao diện người dùng Xcode Organizer.

Đầu tiên lưu trữ ứng dụng của bạn:

xcodebuild -scheme <scheme name> archive

Đưa ra $ARCHIVE_PATH(đường dẫn đến tệp .xcarchive ), xuất ứng dụng từ kho lưu trữ với một trong các cách sau:

Tệp .ipa iOS :

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

Tệp Mac .app :

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

Trong cả hai lệnh các -exportProvisioningProfile-exportSigningIdentity lập luận là không bắt buộc. man xcodebuildđể biết chi tiết về ngữ nghĩa. Trong các ví dụ này, hồ sơ cung cấp cho bản dựng iOS đã chỉ định hồ sơ cung cấp phân phối AdHoc và nhận dạng ký cho ứng dụng Mac đã chỉ định ID nhà phát triển để xuất dưới dạng ứng dụng bên thứ 3 (nghĩa là không được phân phối qua Mac App Store).


1
Không hoạt động khi sử dụng không gian làm việc xcode và không tương thích với cocepad
amleszk

1
Bạn đã thử thêm -workspacetùy chọn vào xcodebuild (và đường dẫn đến không gian làm việc) chưa? man xcodebuildnói: "Để xây dựng một không gian làm việc Xcode, bạn phải vượt qua cả hai tùy chọn -workspace và -scheme để xác định bản dựng".
Nik

Điều này hoạt động rất tốt đối với tôi với tùy chọn -workspace được thêm vào - Tôi chỉ cần lấy đường dẫn của kho lưu trữ được tạo bởi lệnh đầu tiên, vì vậy tôi có thể đưa nó vào thứ hai. Bạn có thể chỉ định nơi lưu trữ được tạo bằng tùy chọn -archivePath, nhưng tôi thích vị trí mặc định của nó. Điều này giúp tôi tìm ra cách để có được đường dẫn đó: stackoverflow.com/a/9024901/813247
robotspacer

24

Chúng tôi đã phát triển một ứng dụng iPad với XCode 4.2.1 và muốn tích hợp bản dựng vào tích hợp liên tục (Jenkins) để phân phối OTA. Đây là giải pháp tôi đã đưa ra:

# 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

Sau đó, Jenkins tải lên các tệp ipa, plist và html lên máy chủ web của chúng tôi.

Đây là mẫu 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>

Để thiết lập tính năng này, bạn phải nhập chứng chỉ phân phối và hồ sơ cung cấp vào móc khóa của người dùng được chỉ định.


3
Bạn cũng có thể thay đổi tệp plist bằng lệnh Plistbuddy của Apple, ví dụ: / usr / libexec / PlistBuddy -c "Đặt: CFBundleVersion 1.2.3.4" /path/to/info.plist. Thay vì chơi với SED :)
Jelle De Laender 18/03/13

Cảm ơn bạn về thông tin. Tôi có nhiều kinh nghiệm với sed hơn plistbuddy, vì vậy tôi chọn sed :)
FuePi 19/03/13

1
Tôi khuyên bạn nên $WORKSPACEthay vì $PWDtạoAPP_PATH
Richard

16

Tôi tìm thấy một số câu trả lời khác ở đây khó để đi. Bài viết này đã làm nếu cho tôi. Một số đường dẫn có thể cần phải tuyệt đối, như được đề cập trong các câu trả lời khác.

Lệnh:

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

Bạn thực sự có thể từ chức một bản dựng, giống như XCode, để bạn có thể kiểm tra và gửi cùng một nhị phân. Ví dụ: trong tập lệnh của tôi (tương tự như ở trên) Táo. Dòng liên quan là:

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

14

Đối với Xcode 7 , bạn có một giải pháp đơn giản hơn nhiều. Công việc bổ sung duy nhất là bạn phải tạo một tệp plist cấu hình để xuất kho lưu trữ.

(So với Xcode 6, trong các kết quả của xcrun xcodebuild -help, -exportFormat-exportProvisioningProfiletùy chọn không được đề cập bất kỳ trở lên; cựu này sẽ bị xóa, và sau này được thay thế bởi -exportOptionsPlist.)

Bước 1 , thay đổi thư mục thành thư mục bao gồm tệp .xcodeproject hoặc .xcworkspace.

cd MyProjectFolder

Bước 2 , sử dụng Xcode hoặc /usr/libexec/PlistBuddy exportOptions.plistđể tạo tệp tùy chọn xuất. Nhân tiện, xcrun xcodebuild -helpsẽ cho bạn biết những phím nào bạn phải chèn vào tệp plist.

Bước 3 , tạo tệp .xcarchive (thư mục, trên thực tế) như sau (bản dựng / thư mục sẽ được Xcode tự động tạo ngay bây giờ),

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

Bước 4 , xuất dưới dạng tệp .ipa như thế này, khác với Xcode6

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

Bây giờ, bạn nhận được một tệp ipa trong thư mục build /. Chỉ cần gửi nó đến App Store của apple.

Nhân tiện, tệp ipa được tạo bởi Xcode 7 lớn hơn nhiều so với Xcode 6.


1
Làm thế nào để bạn xác định hồ sơ cung cấp với phương pháp này. tôi đã thử exportProvisioningProfile nhưng nó nói rằng không thể sử dụng với exportOptionsPlist ... và không có cách nào để chỉ định hồ sơ trong bảng mà tôi có thể tìm thấy ... có vẻ như chỉ lấy cái cũ nhất có cùng tên với cái đó đã xây dựng nó (trái ngược với những gì tôi muốn, thực sự)
john ellis

Các cài đặt dự án, được bao gồm trong một tệp có tên "project.pbxproj", có các cài đặt ký, vì vậy -scheme-configurationcác tùy chọn đã chỉ định cách ký tệp ipa.
DawnSong

Khi bạn nói "chỉ cần gửi nó cho Apple", quá trình đó là gì vì đây là ngoài các bước Lưu trữ thông thường?
mix3d

Có hai cách để "gửi nó cho Apple", đăng nhập vào itunesconnect.apple.com hoặc sử dụng Xcode-> Open Tool Tool-> Application Loader. @ mix3d
DawnSong

1
Tôi đã kết thúc việc tìm kiếm một giải pháp hoàn toàn tự động, mà tôi đã tạo ra một câu trả lời mới!
mix3d

14

Tôi đã đưa ra một mô tả ngắn gọn về các bước cần tuân theo và các tham số cần vượt qua trong khi tạo ipa bằng cách sử dụng terrminal bên dưới:

  1. Chuyển đến thư mục chứa tệp MyApp.xcodeproject trong thiết bị đầu cuối

  2. Bằng cách sử dụng lệnh được đưa ra dưới đây, bạn sẽ nhận được tất cả các Mục tiêu của ứng dụng

    /usr/bin/xcodebuild -list 
  3. Sau khi lệnh trên được thực thi, bạn sẽ nhận được một danh sách các mục tiêu mà bạn nên chọn một mục tiêu cụ thể mà bạn cần để tạo .ipa

    /usr/bin/xcodebuild -target $TARGET -sdk iphoneos -configuration Release
  4. Lệnh trên xây dựng dự án và tạo tệp .app. Đường dẫn để xác định vị trí tệp .app là ./build/Release-iphoneos/MyApp.app

  5. Sau khi Build thành công, sau đó thực hiện lệnh sau để tạo .ipa của ứng dụng bằng Tên nhà phát triển và Hồ sơ cung cấp bằng cú pháp dưới đây:

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

Giải thích cho từng Thông số theo cú pháp trên:

${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 sẽ được tạo tại thư mục đầu ra được chọn " $ {OUTDIR} "

Tôi đang gặp lỗi này "ứng dụng được chỉ định không tồn tại hoặc không phải là thư mục gói"
Ansari Awais

2
Gói xcrun Ứng dụng không được dùng nữa.
Tunvir Rahman Taser 23/12/19

8

Mã số 8:


Định dạng IPA:

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

Xuất kho lưu trữ MyMobileApp.xcarchive dưới dạng tệp IPA sang đường dẫn MyMobileApp.ipa bằng cách sử dụng hồ sơ cung cấp Hồ sơ phân phối MyMobileApp.

Định dạng APP:

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

Xuất kho lưu trữ MyMacApp.xcarchive dưới dạng tệp PKG sang đường dẫn MyMacApp.pkg bằng cách sử dụng ứng dụng nhận dạng ký hiệu ứng dụng cation ứng dụng ID nhóm của tôi: My Team. Trình nhận dạng ký tên trình cài đặt Trình cài đặt ID nhà phát triển: Nhóm của tôi được sử dụng ngầm để ký gói xuất khẩu.

Trang người đàn ông Xcodebuild


7

Chuyển đến thư mục gốc của dự án của bạn và:

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
Điều này dường như không hoạt động. Bản dựng 'kho lưu trữ' không khả dụng trong XCode 3.2.2 (bản cuối cùng).
Martin Côte

4

Tiến thêm một bước, tải lên iTunesConnect thông qua dòng lệnh với Xcode 7 ! (Giả sử bạn đang bắt đầu với một .ipahồ sơ đã được ký với hồ sơ phát hành chính xác và ký nhận dạng.)

Nhập altool, giao diện CLI cho Trình tải ứng dụng ( docstrang 38). Ẩn sâu trong cấu trúc của Xcode.app, là một chức năng tiện dụng để cho phép chúng tôi tải trực tiếp lên ItunesConnect.

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

Đơn giản chỉ cần chạy $ altool --upload-app -f file -u username [-p password]để tải .ipathẳng lên Apple mới. Mật khẩu là tùy chọn và sẽ nhắc bạn nhập nếu bạn tắt nó.

Nếu có bất kỳ vấn đề nào với ứng dụng trong bước xác minh, bảng điều khiển sẽ in chúng ra.

Bạn có thể sẽ phải xuất đường dẫn đến altoolnếu bạn không muốn lưu vị trí của nó.

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

Đó là nó! Chỉ cần đăng nhập vào iTunesConnect.com và chọn bản dựng mới của bạn để thử nghiệm với testflight.

Lưu ý cuối cùng: Nếu bạn gặp lỗi khi nói Exception while launching iTunesTransporter: Transporter not found at path: /usr/local/itms/bin/iTMSTransporter. You should reinstall the application, bạn có thể làm theo gợi ý về câu trả lời SO này , để chạy một liên kết tượng trưng đến đúng vị trí:

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

3

Cải thiện câu trả lời của Vincent, tôi đã viết một kịch bản để làm điều đó: xcodearchive
Nó cho phép bạn lưu trữ (tạo ipa) dự án của bạn thông qua dòng lệnh. Hãy nghĩ về nó giống như em gái của xcodebuildlệnh, nhưng để lưu trữ.

Mã có sẵn trên github: http://github.com/gcerquant/xcodearchive


Một tùy chọn của tập lệnh là cho phép lưu trữ các ký hiệu dSYM trong kho lưu trữ được đánh dấu thời gian. Không có lý do gì để không giữ các biểu tượng nữa và không thể tượng trưng cho nhật ký sự cố mà bạn có thể nhận được sau này.


@KunalBalani Không, tôi sẽ không mong đợi nó xử lý không gian làm việc chính xác. Hãy nhìn vào mã, sẽ không mất nhiều công sức để điều chỉnh nó. Yêu cầu kéo chào mừng!
Guillaume

3

Làm thế nào để xây dựng dự án iOS bằng lệnh?

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 là gì?

Cần xuất khẩuOptions.plist trong Xcode. Nó cho phép bạn chỉ định một số tùy chọn khi bạn tạo tệp ipa. Bạn có thể chọn các tùy chọn trong giao diện người dùng thân thiện khi bạn sử dụng Xcode để lưu trữ ứng dụng của mình.

Quan trọng : Phương thức phát hành và phát triển là khác nhau trong ExportOptions.plist

AppStore:

exportOptions_release ~ phương thức = cửa hàng ứng dụng

Phát triển

exportOptions_dev ~ phương thức = phát triển


2

hãy thử xctool, đây là một sự thay thế cho xcodebuild của Apple giúp việc xây dựng và thử nghiệm các sản phẩm iOS và Mac dễ dàng hơn. Nó đặc biệt hữu ích cho việc tích hợp liên tục. Nó có một vài tính năng bổ sung:

  1. Chạy các thử nghiệm tương tự như Xcode.app.
  2. Kết cấu đầu ra của kết quả xây dựng và thử nghiệm.
  3. Thân thiện với con người, đầu ra màu ANSI.

Số 3 cực kỳ hữu ích. Tôi không biết nếu ai đó có thể đọc đầu ra giao diện điều khiển của xcodebuild, tôi không thể, thông thường nó đã cho tôi một dòng với hơn 5000 ký tự. Thậm chí khó đọc hơn một bài luận văn.

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



2

Sau khi cập nhật lên Xcode 8, tôi thấy rằng ipa doanh nghiệp được tạo bởi

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

Lệnh không thể được đưa ra vì một số vấn đề chữ ký. Nhật ký chỉ ra rằng "cảnh báo: Gói ứng dụng không được dùng nữa, xcodebuild -exportArchivethay vào đó hãy sử dụng .

Vì vậy, tôi chuyển sang xcodebuild -exportArchivevà mọi thứ trở lại bình thường.


1

Bạn có nghĩa là các tùy chọn xác nhận / chia sẻ / gửi? Tôi nghĩ rằng những thứ đó là dành riêng cho Xcode và không phù hợp với công cụ xây dựng dòng lệnh.

Với một chút thông minh, tôi cá là bạn có thể tạo ra một kịch bản để làm điều đó cho bạn. Có vẻ như chúng chỉ được lưu trữ ~/Library/MobileDevice/Archived Applications/với một UUDI và một số nguyên. Tôi cũng không thể tưởng tượng được việc khó có thể đảo ngược trình xác nhận.

Quá trình tôi quan tâm đến việc tự động hóa là gửi các bản dựng đến những người thử nghiệm beta. . tạo tập tin IPA với hồ sơ cung cấp nhúng và gửi email cho người kiểm tra.


Tôi làm rõ câu hỏi của tôi. Khi bạn nói "Tôi có thể" ở trên, bạn có nghĩa là bạn thực sự có thể làm điều này ngày hôm nay?
Dan Fabulich

2
Đúng. Tôi đang sử dụng Hudson Integration Integration với tập lệnh tùy chỉnh chạy xcodebuildvà tạo IPA.
Michael Grinich

Xin lỗi tôi đến bữa tiệc muộn, nhưng TestFlight có API tải lên siêu dễ dàng mà bạn nên xem
self.name
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.