Xcode9 xcodebuild export plist 配置

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在你的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

<think>好的,我现在需要回答用户关于如何正确配置iOS或macOS项目中的Info.plist文件的问题。首先,我得回忆一下Info.plist的作用和常见配置项。 用户提到了引用中的内容,比如package.plist和定位权限的配置。Info.plist文件确实包含了应用的元数据和权限声明,这一点在引用[1]和[2]里都有提到。比如,定位权限需要在Info.plist中添加相应的键值对,如NSLocationWhenInUseUsageDescription。 接下来,我应该分步骤说明配置过程。首先,找到Info.plist文件的位置,通常在项目根目录下。然后,添加必要的权限描述,比如相机、相册、定位等,每个权限都需要对应的描述字符串,否则应用可能会被拒绝。例如,引用[2]提到在iOS的Info.plist中添加定位权限,需要设置NSLocationWhenInUseUsageDescription键。 另外,可能还需要配置应用的基本信息,比如Bundle Identifier和版本号。这些通常在Xcode的项目设置中可以直接编辑,但有时候也需要手动修改Info.plist。同时,引用[1]提到了使用xcodebuild命令导出应用包时,需要用到package.plist文件,这里可能涉及到导出选项的配置,比如签名方式、分发渠道等,不过用户的问题主要是关于Info.plist,所以可能需要区分这两个文件的不同用途。 然后,用户可能需要了解如何具体操作,比如在Xcode中通过图形界面添加键值,或者手动编辑plist文件。需要注意语法正确,比如键的名称必须准确,值通常是字符串类型。例如,添加定位权限时,键名是NSLocationWhenInUseUsageDescription,值是说明为什么需要这个权限的字符串。 还有,可能需要提到不同平台的区别,比如iOS和macOS在权限配置上的不同之处。例如,macOS应用可能需要不同的权限键,或者在Info.plist中的结构有所差异。引用[2]中提到在macOS应用中使用定位权限的键,但具体键名可能与iOS有所不同,需要确认文档。 最后,应该提醒用户测试配置是否正确,比如运行应用时是否弹出权限请求,以及检查构建过程中是否有警告或错误。如果有错误,可能是plist中的键拼写错误或者缺少必需的描述。 总结下来,回答的结构应该是分步骤说明,包括定位文件、添加权限、配置基本信息、注意事项等,同时引用提供的参考资料来支持关键点,比如权限配置部分引用[2],打包过程引用[1]。另外,生成的相关问题需要与Info.plist配置相关,比如常见权限、验证方法、错误处理等。</think>### 如何正确配置iOS或macOS项目的Info.plist文件 Info.plistiOS和macOS应用的核心配置文件,包含应用元数据、权限声明、设备兼容性等信息。以下是分步骤配置指南: --- #### 1. **定位Info.plist文件** - **iOS项目**:位于项目根目录的`<ProjectName>/Info.plist`。 - **macOS项目**:位于`<ProjectName>/<ProductName>-Info.plist`。 - 在Xcode中,可通过左侧导航栏直接双击打开编辑。 --- #### 2. **配置基础信息** - **Bundle Identifier**:应用的唯一标识符,格式为`com.公司名.应用名`。 - **版本号**:`CFBundleShortVersionString`(用户可见版本号)和`CFBundleVersion`(构建版本号)。 - **设备兼容性**:通过`UIRequiredDeviceCapabilities`(iOS)或`LSMinimumSystemVersion`(macOS)指定。 --- #### 3. **添加权限描述(关键步骤)** - **权限键值对**:所有敏感权限(如定位、相机、麦克风)需在Info.plist中声明用途描述,否则应用提交会被拒绝[^2]。 - **示例(iOS定位权限)**: ```xml <key>NSLocationWhenInUseUsageDescription</key> <string>需要访问您的位置以提供周边服务</string> ``` - **常见权限键**: - 相机:`NSCameraUsageDescription` - 相册:`NSPhotoLibraryUsageDescription` - 麦克风:`NSMicrophoneUsageDescription` - 蓝牙:`NSBluetoothAlwaysUsageDescription`(iOS 13+) - **macOS特定权限**:如文件访问权限需添加`NSDocumentsFolderUsageDescription`。 --- #### 4. **配置应用能力(Capabilities)** - **后台模式**:如音乐播放、定位更新等,需在Xcode的`Signing & Capabilities`标签添加,并同步更新Info.plist。 - **应用沙盒(macOS)**:在`App Sandbox`中启用文件读写、网络等权限,系统会自动修改Info.plist。 --- #### 5. **签名与打包相关配置** - 使用`xcodebuild`导出应用包时,需通过`-exportOptionsPlist`指定打包参数(如签名方式、分发渠道)[^1]。 - **示例命令**: ```bash xcodebuild -exportArchive -archivePath bin/app.xcarchive -exportOptionsPlist package.plist -exportPath ../output ``` --- #### 6. **验证配置** - 运行应用,检查权限弹窗是否正常显示描述信息。 - 使用命令行工具`plutil`验证语法: ```bash plutil -lint Info.plist ``` --- #### 注意事项 - **键名准确性**:键名必须与系统定义完全一致,否则配置无效。 - **多语言支持**:权限描述可本地化,通过`InfoPlist.strings`文件实现。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值