通过命令行Xcode“构建和存档”


392

Xcode 3.2在“生成”菜单的“生成和存档”下提供了一个很棒的新功能,该功能生成一个适合Ad Hoc分发的.ipa文件。您也可以打开管理器,转到“存档的应用程序”,然后“将应用程序提交到iTunesConnect”。

有没有一种方法可以从命令行使用“构建和存档”(作为构建脚本的一部分)?我以为xcodebuild会以某种方式参与其中,但是该man页面似乎没有对此发表任何评论。

更新 Michael Grinich要求澄清;这就是您完全无法使用命令行构建的功能,这些功能只有在“构建并存档”之后才能使用Xcode的Organizer进行。

  1. 您可以单击“共享应用程序...”与Beta测试人员共享IPA。正如Guillaume在下面指出的那样,由于一些Xcode的神奇之处,此IPA文件不需要Beta测试人员需要安装的单独分发的.mobileprovision文件。太神奇了。没有命令行脚本可以做到这一点。例如,Arrix的脚本(5月1日提交)不符合该要求。
  2. 更重要的是,在对Beta版本进行Beta测试之后,可以单击“将应用程序提交到iTunes Connect”以将完全相同的版本提交给Apple(您测试过的二进制文件),而无需重新构建。在命令行中这是不可能的,因为对应用程序进行签名是构建过程的一部分。您可以签名进行Ad hoc beta测试,也可以签名以提交到App Store,但不能两者都签名。无法在手机上对基于命令行的IPA进行Beta测试,然后直接提交给Apple。

我希望有人能证明我做错了:这两个功能在Xcode GUI中都很好用,并且不能从命令行复制。


1
糟糕 这似乎是不可能的。如果您不知道答案,请至少投票表决该问题,以免我的赏金不会消失在以太里... :-(
— Dan Fabulich

3
这并非不可能,这不是的一部分xcodebuild。创建IPA文件仅涉及将应用程序放入名为“ Payload”的目录中,将该目录压缩,然后将其重命名为MyAppName.ipa。
— Michael Grinich 2010年

@Michael,“构建和存档”还启用了管理器功能,当您仅手工制作IPA文件时,这些功能将不可用。
— Dan Fabulich

我的评论过长,因此已发布为答案。
— Michael Grinich

3
尽管vdaubry的第一个/可接受的答案会起作用,但是对于较新版本的Xcode,Reid的答案要简单得多。
— Prometheus

Answers:


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
有人可以告诉我{}花括号做什么吗?我假设他们照顾空格,但我可能是错的。
— 和弦

6
Xcode 8.3 Beta 1完全删除PackageApplication命令。请勿再次使用它,并按照以下建议使用“ xcodebuild -scheme <SchemeName>存档”。
— 汉斯·克诺歇(HansKnöchel)

283

使用Xcode 4.2,您可以使用-scheme标志来执行此操作:

xcodebuild -scheme <SchemeName> archive

执行此命令后,存档将显示在Xcode Organizer中。


3
是的,更好!为了使其工作,我执行了以下操作:cd到您的项目文件夹,然后运行“ xcodebuild -scheme MyProjectName存档”(因为通常,您使用与您的项目名称相同的方案)
— Samuel

18
请注意,除了工作空间和方案之外,该archive操作不支持您通过此调用提供的任何设置 -这仅花费了我几个小时!
— danyowdee 2012年

5
在Xcode 4.4中可以正常工作,我敢肯定在4.3中也可以。请确保您已通过选择正确的Xcode版本xcode-select <path to Xcode.app>
— 里德埃利斯

2
此外,您必须指定与“计划-scheme <SchemeName>”
— 里德埃利斯

6
这对于创建存档很好,但是xcrun中的PackageApplication实际上创建了.ipa文件。您需要通过TestFlight之类的文件将此文件分发给Beta测试人员
— 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项目,它位于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上完美运行。我选择从终端构建应用程序,因为当我尝试从管理器构建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在旧答案中,我保留了它用于显示参考,您可以在我的答案开头看到有效的导出选项
— 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 2010年

xcode在哪里获得“ APPNAME.ipa”名称?从包装->产品名称?
— 卡洛斯·里卡多

3
现在,使用WatchKit应用程序此脚本还不够。有人知道用watchkit应用提供的ipa文件的新规范吗?
— RPM 2015年

看到与带有手表套件的@RPM相同的问题。有什么解决方法吗?
— danieljimenez,2015年

@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(即未通过Mac App Store分发)。


1
使用xcode工作空间且与cocopods不兼容时不起作用
— amleszk 2014年

1
您是否尝试过将-workspace选项添加到xcodebuild(以及工作空间的路径)中?man xcodebuild状态:“要构建Xcode工作区,必须同时传递-workspace和-scheme选项来定义构建”。
— Nik

添加了-workspace选项,这对我来说非常有用-我只需要获取第一个命令创建的归档的路径,因此可以将其输入第二个命令。您可以使用-archivePath选项指定在何处创建档案,但我更喜欢其默认位置。这有助于我弄清楚如何获得该路径:stackoverflow.com/a/9024901/813247
— robotspacer 2014年

24

我们使用XCode 4.2.1开发了一个iPad应用程序,并希望将构建版本集成到我们的持续集成(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文件上传到我们的网络服务器。

这是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文件,例如:/ 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
— 理查德(Richard)

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

对于 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 -help说一句,它将告诉您必须将哪些键插入到plist文件中。

步骤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创建的ipa文件大得多。


1
如何使用这种方法指定配置文件。我尝试了exportProvisioningProfile,但是它说不能与exportOptionsPlist一起使用...而且无法在我可以找到的plist中指定配置文件...似乎只是采用了与该名称相同的最旧的配置文件建造它(与我想要的相反)
— john ellis

包含在名为“ project.pbxproj”的文件中的项目设置具有签名设置,因此-scheme和-configuration选项指定了如何对ipa文件进行签名。
— DawnSong

当您说“仅将其发送给Apple”时,该过程是什么,因为这不在正常的存档步骤之内?
— mix3d

有两种方法可以将其“发送到Apple”,登录到itunesconnect.apple.com或使用Xcode-> Open Developer Tool-> Application Loader。@ 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成功后,执行以下命令以使用开发人员名称和Provisioning Profile使用以下语法生成应用程序的.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应用程序:我的团队”将存档MyMacApp.xcarchive作为PKG文件导出到路径MyMacApp.pkg。安装程序签名身份开发人员ID安装程序:“我的团队”用于隐式地对导出的软件包进行签名。

Xcodebuild手册页


7

转到项目根目录所在的文件夹,然后:

xcodebuild -project projectname -activetarget -activeconfiguration archive

7
这似乎不起作用。“归档”构建动作在XCode 3.2.2(最终版)中不可用。
— Martin Cote 2010年

4

更进一步,使用Xcode 7通过命令行上传到iTunesConnect !(假设您使用.ipa已使用正确的发行资料和签名身份签名的。)

输入altool,用于Application 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直接上传到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

为了改进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?

Xcode中需要ExportOptions.plist。创建ipa文件时,它可以让您指定一些选项。使用Xcode存档应用程序时,可以在友好的UI中选择选项。

重要说明:ExportOptions.plist AppStore中的发布和开发方法不同

:

exportOptions_release〜方法=应用商店

发展历程

exportOptions_dev〜方法=开发


2

请尝试使用xctool,它是Apple xcodebuild的替代产品,可以更轻松地构建和测试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和plist 存储在一起。我也无法想象对验证器进行反向工程也很困难。

我感兴趣的自动化过程是将构建发送到Beta测试人员。(由于App Store提交的情况很少发生,因此我不介意手动执行此操作,特别是因为我经常需要添加新的描述文本。)通过使用Xcode的CLI执行伪Build + Archive,我可以从每次代码提交触发自动构建,使用嵌入式配置文件创建IPA文件,并将其通过电子邮件发送给测试人员。


我澄清了我的问题。当您在上方说“我可以”时,您是说实际上可以在今天这样做吗?
— 丹·法布利奇

2
是。我正在将Hudson Continuous Integration与运行xcodebuild并生成IPA 的自定义脚本一起使用。
— Michael Grinich 2010年

抱歉,我参加聚会很晚,但是TestFlight有一个非常简单的上传API,您应该签出
— self.name 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.