Xcode9 xcodebuild export plist 配置

本文介绍了在Xcode9中,使用xcodebuild进行自动化打包时遇到的问题及其解决方法。当使用旧版exportOptions_plist文件进行打包时,Xcode9在export阶段会出错。解决步骤包括手动用Xcode构建一次,生成新的exportOptions_plist文件,然后用于自动化打包。文中提供了解决问题的具体操作示例。
部署运行你感兴趣的模型镜像

前言

在你的iOS团队中,如果在使用持续集成来完成自动化打包分发的工作,你可能会了解如何使用一些命令行工具来构建ipa文件,其中一款使用较为广泛的是xcodebuild

在我们的团队中有部分打包工作就是使用的xcodebuild,脚本代码大概如下:

ipaName = "${scheme}${buildConfiguration}"
// archive
xcodebuild -workspace ProjectName.xcworkspace -scheme ${scheme} -configuration ${buildConfiguration} clean archive -archivePath ./${ipaName}.xcarchive
// export
xcodebuild -exportArchive -archivePath ${ipaName}.xcarchive -exportOptionsPlist exportOptions_dev.plist -exportPath ./

exportOptions_dev文件如下:

<?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>method</key>
	<string>development</string>
	<key>teamID</key>
	<string>yourTeamID</string>
</dict>
</plist>

以上配置在Xcode8及以下版本都可以正常运行的,在升级Xcode9以后上面的脚本会在export阶段出错。

一、现象

  • xcodebuild + Xcode9
    使用xcodebuild做打包构建时,执行exportArchive命令出错,错误信息:
error: exportArchive: "AppName.app" requires a provisioning profile with the Push Notifications and App Groups features.
Error Domain=IDEProvisioningErrorDomain Code=9
"AppName.app" requires a provisioning profile with the Push Notifications and App Groups features." UserInfo={NSLocalizedDescription="AppName.app" requires a provisioning profile with the Push Notifications and App Groups features., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
// 或
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"ios-simple-objc.app\" requires a provisioning profile.\"
UserInfo={NSLocalizedDescription=\"ios-simple-objc.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"

二、原因

Xcode9 的打包需要指定以下信息,才能完成export操作:

  • provisioningProfiles
  • compileBitcode
  • method
  • signingCertificate
  • signingStyle
  • stripSwiftSymbols
  • teamID
  • thinning

三、解决步骤

你需要使用Xcode9先手动构建一次,使用构建生成的plist配置就可以完成export操作。

  1. 使用Xcode9打开你的工程
    WX20170927-145849.png

  2. 执行打包操作:Product -> Archive
    BA2EB68B-F776-498D-BA7E-AE75D27047E8.png

  3. 打包完成后执行export操作(其中会需要你手动选择你的相关provison profile等信息),Xcode9会自动生成exportOptionsPlist文件,同时拷贝到你生成的ipa包的同级目录下。

WX20170927-150056.png

WX20170927-150109.png

WX20170927-150124.png

WX20170927-150209.png

  1. 直接使用Xcode9自动生成的exportOptionsPlist文件来进行xcodebuildexport操作,或者拷贝文件内容到你原来的exportOptionsPlist文件。
// Xcode9 export 生成的文件
DistributionSummary.plist
ExportOptions.plist
AppName.ipa
Packaging.log

四、示例

<?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>compileBitcode</key>
	<true/>
	<key>method</key>
	<string>development</string>
	<key>provisioningProfiles</key>
	<dict>
		<key>com.xingshulin.abc</key>
		<string>abc_dev</string>
		<key>com.xingshulin.abc.NotificationServiceExtension</key>
		<string>abc-Notification-dev</string>
	</dict>
	<key>signingCertificate</key>
	<string>iPhone Developer</string>
	<key>signingStyle</key>
	<string>manual</string>
	<key>stripSwiftSymbols</key>
	<true/>
	<key>teamID</key>
	<string>yourTeamID</string>
	<key>thinning</key>
	<string><none></string>
</dict>
</plist>

五、参考

New export options Plist in Xcode 9

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

iOS应用的打包过程中,`exportOptions.plist`文件用于指定导出归档应用时的相关配置,例如分发方式(development、ad-hoc、app-store、enterprise)、是否启用bitcode、签名信息等。以下是一些生成该文件的方法和步骤: ### 使用Xcode自动生成`exportOptions.plist` 1. 在Xcode中完成应用的归档操作,选择菜单栏的 `Product -> Archive` 来生成归档文件。 2. 归档完成后,会弹出一个窗口显示所有已归档的版本,点击“Export…”按钮。 3. 在导出流程中,Xcode会要求选择分发方式、签名证书以及Provisioning Profile等信息。 4. 完成这些选择后,Xcode会自动生成一个`exportOptions.plist`文件,并将其保存在与最终生成的`.ipa`文件相同的目录下[^3]。 ### 使用命令行工具生成`exportOptions.plist` 可以通过`xcodebuild`命令结合`--exportArchive`选项来生成`exportOptions.plist`文件。具体命令如下: ```bash xcodebuild -exportArchive -archivePath <archive-path> -exportPath <export-path> -exportOptionsPlist <plist-path> ``` 其中: - `<archive-path>` 是归档文件的路径; - `<export-path>` 是导出IPA文件的目标路径; - `<plist-path>` 是生成的`exportOptions.plist`文件路径。 如果`<plist-path>`不存在,`xcodebuild`会尝试根据当前导出配置生成该文件。你也可以手动创建一个`exportOptions.plist`文件,并通过此命令引用它。 ### 手动创建`exportOptions.plist`文件 如果你希望避免为不同环境创建多个`exportOptions.plist`文件,可以通过脚本动态生成一个通用的`exportOptions.plist`文件。例如,使用Python脚本或Shell脚本根据不同的构建环境动态生成配置内容。 以下是一个使用Shell脚本动态生成`exportOptions.plist`的示例: ```bash #!/bin/bash # 定义变量 export_method=$1 team_id="YOUR_TEAM_ID" provisioning_profile="$2" bitcode_enabled="NO" # 创建 exportOptions.plist 文件 cat <<EOF > exportOptions.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>method</key> <string>${export_method}</string> <key>teamID</key> <string>${team_id}</string> <key>signingStyle</key> <string>manual</string> <key>provisioningProfiles</key> <dict> <key>com.your.bundle.id</key> <string>${provisioning_profile}</string> </dict> <key>compileBitcode</key> <false/> <key>thinning</key> <string><none></string> </dict> </plist> EOF echo "exportOptions.plist generated with method: ${export_method}" ``` 运行脚本时,可以传入分发方式和Provisioning Profile名称作为参数: ```bash ./generate_export_options.sh ad-hoc "My_AdHoc_Profile" ``` 通过这种方式,可以避免手动维护多个`exportOptions.plist`文件,简化多环境打包流程[^1]。 ### 总结 无论是通过Xcode自动生成、命令行工具还是脚本动态生成,`exportOptions.plist`文件的核心作用是提供导出IPA文件所需的配置信息。根据项目需求选择合适的方式,可以显著提升构建流程的效率和灵活性。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值