Dan*_*ich 384 xcode command-line build
Xcode 3.2在Build菜单"Build and Archive"下提供了一个很棒的新功能,它可以生成一个适合Ad Hoc分发的.ipa文件.您也可以打开管理器,转到"已存档的应用程序"和"将应用程序提交到iTunesConnect".
有没有办法从命令行使用"构建和存档"(作为构建脚本的一部分)?我认为xcodebuild会以某种方式涉及,但man页面似乎没有说明这一点.
更新 Michael Grinich要求澄清; 这就是命令行构建无法完成的功能,在"构建和存档"后,您只能使用Xcode的管理器.
我喜欢有人过来证明我错了:这两个功能在Xcode GUI中运行良好,无法从命令行复制.
vda*_*bry 310
我找到了如何从命令行自动化构建和归档过程,我刚刚写了一篇博客文章,解释了如何实现这一目标.
您必须使用的命令是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}"
Run Code Online (Sandbox Code Playgroud)
您将在文章中找到所有细节.如果您有任何问题,请不要犹豫.
Rei*_*lis 277
使用Xcode 4.2,您可以使用-scheme标志执行此操作:
xcodebuild -scheme <SchemeName> archive
Run Code Online (Sandbox Code Playgroud)
在此命令之后,存档将显示在Xcode管理器中.
Raj*_*Raj 130
使用Xcode 9和Swift更新我的答案
档案
xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace -scheme <schemeName> clean archive -configuration release -sdk iphoneos -archivePath <ProjectName>.xcarchive
Run Code Online (Sandbox Code Playgroud)
IPA导出(请注意导出选项plist)
xcodebuild -exportArchive -archivePath <ProjectName>.xcarchive -exportOptionsPlist <ProjectName>/exportOptions.plist -exportPath <ProjectName>.ipa
Run Code Online (Sandbox Code Playgroud)
对于那些不了解exportOptions.plist的人,https: //blog.bitrise.io/new-export-options-plist-in-xcode-9
那些使用它来构建CI/CD工具(如teamcity/jenkins)项目的人,请确保使用构建代理中安装的正确xcode进行存档和导出.
您可以使用以下2个选项中的任何一个.
/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild
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"
Run Code Online (Sandbox Code Playgroud)
这是用Xcode 5测试的,对我来说工作正常.
Arr*_*rix 28
我一直在使用自己的构建脚本来生成用于临时分发的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
Run Code Online (Sandbox Code Playgroud)
该脚本还会增加版本号.如果不需要,您可以删除该部分.希望能帮助到你.
Fue*_*ePi 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>Ältere Versionen<\/h3>.<ul>.<li>\)/\1\
${ITUNES_LINK}\
\3\2<\/li>\
<li>/g;p;}' | sed -e "s/\${ITUNES_LINK}/$ITUNES_LINK/" > index.html
Run Code Online (Sandbox Code Playgroud)
然后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>
Run Code Online (Sandbox Code Playgroud)
要进行此设置,您必须将分发证书和配置文件导入指定用户的钥匙串.
Nik*_*Nik 24
The xcodebuild tool can build and export archive products with the -exportArchive flag (as of Xcode 5). The export step was previously only possible via the Xcode Organizer UI.
First archive your app:
xcodebuild -scheme <scheme name> archive
Run Code Online (Sandbox Code Playgroud)
Given $ARCHIVE_PATH (the path to the .xcarchive file), export the app from the archive with one of the following:
iOS .ipa file:
xcodebuild -exportArchive -exportFormat ipa -archivePath "$ARCHIVE_PATH" -exportPath "myApp.ipa" -exportProvisioningProfile "My App Provisioning profile"
Run Code Online (Sandbox Code Playgroud)
Mac .app file:
xcodebuild -exportArchive -exportFormat app -archivePath "$ARCHIVE_PATH" -exportPath "myApp.app" -exportSigningIdentity "Developer ID Application: My Software Company"
Run Code Online (Sandbox Code Playgroud)
In both commands the -exportProvisioningProfile and -exportSigningIdentity arguments are optional. man xcodebuild for details on the semantics. In these examples, the provisioning profile for the iOS build specified an AdHoc distribution provisioning profile, and the signing identity for the Mac app specified a Developer ID for export as a 3rd party application (i.e. not distributed via the Mac App Store).
zek*_*kel 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"
Run Code Online (Sandbox Code Playgroud)
Dua*_*lds 15
实际上,您可以像XCode一样重新构建构建,以便您可以测试和发送相同的二进制文件.例如在我的脚本中(类似于上面的那些)我构建了我的发布版本,签名为AdHoc版本,然后我将其存档为IPA进行测试,然后使用我的发行版证书辞职并创建一个zip文件,这是我发送到的苹果.相关的是:
codesign -f -vv -s "$DistributionIdentity" "$APPDIR"
Run Code Online (Sandbox Code Playgroud)
Tej*_*oop 14
我已经简要介绍了要遵循的步骤,以及使用下面的terrminal生成ipa时要传递的参数:
转到终端中包含MyApp.xcodeproject文件的文件夹
通过使用下面给出的命令,您将获得应用程序的所有目标
/usr/bin/xcodebuild -list
Run Code Online (Sandbox Code Playgroud)执行上述命令后,您将获得一个目标列表,您应该选择要生成.ipa的特定目标
/usr/bin/xcodebuild -target $TARGET -sdk iphoneos -configuration Release
Run Code Online (Sandbox Code Playgroud)上面的命令构建项目并创建.app文件.找到.app文件的路径是 ./build/Release-iphoneos/MyApp.app
在Build成功之后,执行以下命令,使用Developer Name和Provisioning Profile使用以下语法生成应用程序的.ipa:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v “${TARGET}.app” -o “${OUTDIR}/${TARGET}.ipa” –sign “${IDENTITY}” –embed “${PROVISONING_PROFILE}”
Run Code Online (Sandbox Code Playgroud)上述语法中每个参数的说明:
${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”)
Run Code Online (Sandbox Code Playgroud)
Daw*_*ong 14
对于Xcode 7,您有一个更简单的解决方案.唯一的额外工作是您必须创建用于导出存档的配置plist文件.
(与Xcode 6相比,在结果中xcrun xcodebuild -help,-exportFormat并且-exportProvisioningProfile不再提及选项;前者被删除,后者被取代-exportOptionsPlist.)
步骤1,将目录更改为包含.xcodeproject或.xcworkspace文件的文件夹.
cd MyProjectFolder
Run Code Online (Sandbox Code Playgroud)
第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
Run Code Online (Sandbox Code Playgroud)
第4步,导出为.ipa文件,这与Xcode6不同
xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/ -exportOptionsPlist exportOptions.plist
Run Code Online (Sandbox Code Playgroud)
现在,您在build /目录中获得了一个ipa文件.只需将其发送到Apple App Store即可.
顺便说一下,Xcode 7创建的ipa文件比Xcode 6大得多.
IPA格式:
xcodebuild -exportArchive -exportFormat IPA -archivePath MyMobileApp.xcarchive -exportPath MyMobileApp.ipa -exportProvisioningProfile 'MyMobileApp Distribution Profile'
Run Code Online (Sandbox Code Playgroud)
使用配置文件MyMobileApp分发配置文件将存档MyMobileApp.xcarchive作为IPA文件导出到路径MyMobileApp.ipa.
APP格式:
xcodebuild -exportArchive -exportFormat APP -archivePath MyMacApp.xcarchive -exportPath MyMacApp.pkg -exportSigningIdentity 'Developer ID Application: My Team'
Run Code Online (Sandbox Code Playgroud)
使用应用程序阳离子签名身份开发者ID应用程序:我的团队将存档MyMacApp.xcarchive作为PKG文件导出到路径MyMacApp.pkg.安装程序签名标识Developer ID Installer:My Team隐式用于对导出的包进行签名.
小智 8
如何使用命令构建iOS项目?
Clean : xcodebuild clean -workspace work-space-name.xcworkspace -scheme scheme-name
Run Code Online (Sandbox Code Playgroud)
&&
Archive : xcodebuild archive -workspace work-space-name.xcworkspace -scheme "scheme-name" -configuration Release -archivePath IPA-name.xcarchive
Run Code Online (Sandbox Code Playgroud)
&&
Export : xcodebuild -exportArchive -archivePath IPA-name.xcarchive -exportPath IPA-name.ipa -exportOptionsPlist exportOptions.plist
Run Code Online (Sandbox Code Playgroud)
Xcode 中需要 ExportOptions.plist 。它允许您在创建 ipa 文件时指定一些选项。当您使用 Xcode 归档应用程序时,您可以在友好的 UI 中选择选项。
重要提示:ExportOptions.plist AppStore中发布和开发的方法是不同的:
exportOptions_release ~ 方法 = 应用商店
发展
exportOptions_dev ~ 方法 = 开发
转到项目根目录的文件夹,然后:
xcodebuild -project projectname -activetarget -activeconfiguration archive
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
275998 次 |
| 最近记录: |