Xcode "Створити та архівувати" з командного рядка


392

Xcode 3.2 надає дивовижну нову функцію в меню "Build", "Build and Archive", яка генерує. Ви також можете відкрити Органайзер, перейти в "Заархівовані програми" та "Надіслати заявку на iTunesConnect".

Чи є спосіб використовувати "Збірка та архівування" з командного рядка (як частина сценарію збірки)? Я припускаю, що це xcodebuildбуло б задіяно якось, але ця manсторінка, схоже, нічого не говорить про це.

ОНОВЛЕННЯ Михайло Гринич просив роз'яснити; ось що саме ви не можете зробити зі збірками командного рядка, функціями, які ви можете ТІЛЬКИ зробити з Організатором Xcode після "Створення та архівування".

  1. Ви можете натиснути "Надати доступ до програми ...", щоб поділитися своїм IPA з бета-тестерами. Як зазначає Гійом, нижче, через деяку магію Xcode, для цього IPA-файлу не потрібен окремо розповсюджений .mobileprovision файл, який потрібно встановити бета-тестерам; це магічно. Жоден скрипт командного рядка не може це зробити. Наприклад, сценарій Arrix (представлений 1 травня) не відповідає цій вимозі.
  2. Що ще важливіше, після тестування бета-версії збірки ви можете натиснути "Надіслати додаток до iTunes Connect", щоб надіслати цю точну збірку в Apple, самій бінарній, яку ви протестували, не відновлюючи її. Це неможливо з командного рядка, оскільки підписання програми є частиною процесу збирання; ви можете підписати біти для бета-тестування Ad Hoc АБО ви можете підписати їх для подання в App Store, але не обидва. Жодна IPA, побудована в командному рядку, не може бути протестована на телефонах і подана безпосередньо Apple.

Я хотів би, щоб хтось прийшов і довів мене неправильно: обидві ці функції чудово працюють у графічному інтерфейсі Xcode і не можуть бути реплікувати з командного рядка.


1
Ой, сирий. Це видається неможливим. Якщо ви не знаєте відповіді, будь-ласка, принаймні проголосуйте питання, щоб мій щедрот не
зник

3
Це не неможливо, воно просто не є частиною xcodebuild. Створення IPA-файлу просто включає в себе додавання програми в каталог під назвою "Payload", застебнення цього каталогу та перейменування його на MyAppName.ipa.
Майкл Гриніч

@Michael, "Збірка та архівування" також дозволяє функції Організатора, які недоступні, коли ви просто робите вручну файл IPA.
Дан Фабуліч

Мій коментар трохи довгий, тому він розміщений як відповідь .
Майкл Грініч

3
Хоча перша / прийнята відповідь vdaubry буде працювати, відповідь Reid набагато простіша для нових версій Xcode.
Прометей

Відповіді:


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має бути абсолютним шляхом.
Девід Данхем

5
Також зауважте, що параметри --sign або --embed вам не потрібні, якщо ви хочете зберегти той самий підпис / профіль, який використовувався під час створення .app. Це буде все, що ви встановили в налаштуваннях збірки коду для вашої конфігурації випуску.
Майк Веллер

12
Зауважте, що шлях до файлу ipa -o "${ipa_path}"має бути абсолютним шляхом. В іншому випадку ви, мабуть, отримаєте error: Unable to create '.../...ipa'або це буде мовчки ігнорувати створення. Чорт, це витратив мене на пару годин.
h - n

2
Може хтось скаже мені, що роблять {} брекети? Я припускаю, що вони дбають про простір, але я можу помилитися.
сард

6
Xcode 8.3 Beta 1 повністю видаліть команду PackageApplication. Не використовуйте його знову і використовуйте "xcodebuild -scheme <SchemeName> archive", як запропоновано нижче.
Hans Knöchel

283

З Xcode 4.2 ви можете використовувати прапор -scheme для цього:

xcodebuild -scheme <SchemeName> archive

Після цієї команди Архів з'явиться в Організаторі Xcode.


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
Це добре для створення архіву, проте PackageApplication в xcrun фактично створює .ipa файл. Цей файл вам потрібен для розповсюдження бета-тестерам через щось на кшталт TestFlight
jmstone617,

145

Оновлення моєї відповіді за допомогою Xcode 9 та Swift

Архів

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

IPA Export ( зверніть увагу на список опцій експорту )

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, таких як teamcity / jenkins, переконайтеся, що ви використовуєте правильний 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. У мене є проект xcode для iPhone, який знаходиться в папці Desktop / 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"

Це перевірено з Xcode 5 і працює чудово для мене.


2
Він прекрасно працював на Xcode6.1.1. Я вибираю створити свої додатки з терміналу, оскільки Xcode6 дає мені помилку "У вашому обліковому записі вже є дійсний сертифікат", коли я намагаюся створити дистрибутив 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, дякую
Мохаммед Реза Куокан

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. Хтось знає нові специфікації файлу ipa за допомогою програми watchkit?
RPM

Бачите ті ж проблеми, що і @RPM з набором годинника. Будь-яка резолюція?
danieljimenez

@RPM перевірте це на предмет WatchKit. Я сам не пробував цього, але здається досить ретельним matrixprojects.net/p/watchkit-command-line-builds
mattman88

26

xcodebuildІнструмент може створювати і експортувати архів продукції з -exportArchive прапором (за станом на Xcode 5). Експорт експорту раніше був можливий лише через інтерфейс організатора Xcode.

Спочатку архівуйте додаток:

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 визначає ідентифікатор розробника для експорту як стороннього додатка (тобто не поширюється через магазин додатків Mac).


1
Не працює при використанні робочих просторів xcode і не сумісний з кокоподами
amleszk

1
Ви спробували додати -workspaceопцію xcodebuild (та шлях до робочої області)? man xcodebuildконстатує: "Щоб створити робочу область Xcode, ви повинні передати і параметри -workspace і -scheme для визначення збірки".
Нік

Для мене це чудово працює з доданою опцією -workspace - мені просто потрібно було отримати шлях до архіву, створений першою командою, щоб я міг подати його у другу. Ви можете вказати, де створений архів за допомогою параметра -archivePath, але я віддаю перевагу його розташуванню за замовчуванням. Це допомогло мені зрозуміти, як отримати цей шлях: stackoverflow.com/a/9024901/813247
robotspacer

24

Ми розробили додаток iPad з XCode 4.2.1 і хотіли інтегрувати збірку в нашу постійну інтеграцію (Jenkins) для розповсюдження 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
Ви також можете змінити файл-пліст за допомогою команди Plistbuddy від Apple, наприклад: / usr / libexec / PlistBuddy -c "Set: CFBundleVersion 1.2.3.4" /path/to/info.plist. Замість гри з SED :)
Jelle De Laender

Дякую за інформацію. Я більше досвідчений з sed, ніж plistbuddy, тому я вибираю 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-файл, на що я надсилаю Apple. Відповідний рядок:

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для створення файлу списку опцій експорту. До речі, xcrun xcodebuild -helpпідкаже, які ключі потрібно вставити до файлу плістів.

Крок 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 у build / каталозі. Просто надішліть його в Apple App Store.

До речі, файл ipa, створений Xcode 7, значно більший, ніж Xcode 6.


1
як вказати профіль резервування при такому підході. я спробував exportProvisioningProfile, але він сказав, що не можна використовувати з exportOptionsPlist ... і немає ніякого способу вказати профіль у списку, який я можу знайти ... здається, що просто взяти найстаріший з тим самим ім'ям, що і той що побудував його (що насправді протилежне тому, що я хочу)
Джон Елліс

Налаштування проекту, включені в файл з ім'ям «project.pbxproj», вже підписуючи параметри, так -schemeі -configurationпараметри визначені , як підписати файл ІПС.
DawnSong

Коли ви говорите "просто надішліть його Apple", що це за процес, оскільки це знаходиться поза нормальними етапами архіву?
mix3d

Є два способи "надіслати його в Apple", увійти на itunesconnect.apple.com або за допомогою Xcode-> Open Developer Tool-> Loader Application. @ mix3d
DawnSong

1
Я закінчив знайти повністю автоматизоване рішення, на яке я створив нову відповідь!
mix3d

14

Я дав короткий опис кроків, які слід виконати, та параметрів, які потрібно пройти під час створення 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. Після того як Build вдалося досягти, виконайте таку команду для створення .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

2
xcrun PackageApplication застарілий.
Тунвір Рахман Тушер

8

Xcode 8:


Формат IPA:

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

Експортує архів MyMobileApp.xcarchive як файл IPA до шляху MyMobileApp.ipa, використовуючи профіль надання MyMobileApp Profile Distribution Profile.

Формат додатка:

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

Експортує архів MyMacApp.xcarchive у вигляді PKG-файлу до шляху MyMacApp.pkg, використовуючи ідентифікаційну програму підпису катіону для підпису програми Додаток Ідентифікатор розробника: Моя команда. Ідентифікатор підпису установника, який встановлює ідентифікатор розробника: Моя команда неявно використовується для підписання експортованого пакету.

Сторінка людини Xcodebuild


7

Перейдіть до папки, де знаходиться корінь вашого проекту, і:

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
Це, здається, не працює. Збір "архіву" недоступний у XCode 3.2.2 (остаточний).
Мартін Кот

4

Зробивши ще крок далі, завантаживши в iTunesConnect за допомогою командної лінії з Xcode 7 ! (Припустимо, що ви починаєте з.ipa підписаного з правильним профілем випуску та ідентифікацією підпису.)

Введіть altoolінтерфейс 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 прямо в Apple. Пароль є необов’язковим, і він запропонує вам його, якщо ви не вийдете з команди.

Якщо в ході перевірки є якісь проблеми з додатком, консоль роздрукує їх.

Вам, ймовірно, доведеться експортувати шлях, 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, ви можете дотримуватися пропозиції щодо цієї відповіді ТА , щоб запустити символьне посилання на правильне місце:

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


Одним із варіантів сценарію є ввімкнення архівації символів 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 для архівування програми.

Важливо : Спосіб випуску та розробки відрізняється в ExportOptions.plist

AppStore:

exportOptions_release ~ метод = магазин додатків

Розвиток

exportOptions_dev ~ метод = розробка


2

спробуйте xctool, це заміна для xcodebuild від Apple, що спрощує створення та тестування продуктів iOS та Mac. Це особливо корисно для постійної інтеграції. Він має кілька додаткових функцій:

  1. Виконує ті ж тести, що і Xcode.app.
  2. Структурований вихід результатів збірки та тестування.
  3. Дружній людині вихід у кольорі ANSI.

№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 та плісті. Я не можу уявити, що було б так важко повернути інженеру валідатор.

Мене цікавить автоматизований процес - це надсилання збірок до бета-тестерів. (Оскільки подання в App Store трапляється нечасто, я не проти робити це вручну, тим більше, що мені часто потрібно додавати новий текст опису.) Здійснюючи збірку псевдо + Архів за допомогою CLI Xcode, я можу запускати автоматичні збірки з кожної фіксації коду, створити IPA-файли із вбудованими профілями забезпечення та надіслати їх тестувальникам.


Я уточнив своє запитання. Коли ви говорите "я можу" вище, ви маєте на увазі, що ви можете це зробити сьогодні?
Дан Фабуліч

2
Так. Я використовую Хадсон безперервну інтеграцію зі спеціальним сценарієм, який запускає xcodebuildта робить IPA.
Майкл Гриніч

Вибачте, що я запізнився на вечірку, але в TestFlight є дуже простий API для завантаження, який слід перевірити
self.name
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.