You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xcrun为含扩展的iOS应用指定配置文件并签名?

处理带App Extension的Jenkins打包配置问题

其实你原来用的PackageApplication命令已经被Apple弃用啦,尤其是打包包含App Extension的应用时,这个工具没法很好地处理多个Target的配置文件关联,很容易出现签名错误。现在官方推荐用xcodebuild的归档+导出流程,这才是适配扩展应用的正确姿势,具体步骤如下:

第一步:归档应用(Archive)

这一步需要为主应用和每个App Extension分别指定对应的Provisioning Profile。假设你的主应用Target叫MainApp,扩展Target叫MainAppExtension,命令示例如下:

xcodebuild archive \
  -workspace "${WORKSPACE_NAME}.xcworkspace" \  # 如果用的是project,换成-project "${PROJECT_NAME}.xcodeproj"
  -scheme "${SCHEME_NAME}" \
  -configuration Release \
  -archivePath "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.xcarchive" \
  # 主应用的配置文件(用名称或UUID都可以,名称更直观)
  PROVISIONING_PROFILE_SPECIFIER="${MAIN_APP_PROFILE_NAME}" \
  # 扩展Target的配置文件,格式是「扩展Target名_PROVISIONING_PROFILE_SPECIFIER」
  MainAppExtension_PROVISIONING_PROFILE_SPECIFIER="${EXTENSION_PROFILE_NAME}"

注意:把MainAppExtension换成你实际的扩展Target名称,MAIN_APP_PROFILE_NAME和EXTENSION_PROFILE_NAME换成对应的配置文件名称(要确保构建机器上已经安装了这些配置文件)。

第二步:导出IPA包(Export Archive)

这一步需要用一个exportOptions.plist文件来配置签名规则,这个文件可以清晰地指定主应用和扩展各自的配置文件,避免混乱。

先创建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>
    <!-- 导出方式:app-store/ad-hoc/enterprise/development,根据你的需求选择 -->
    <key>method</key>
    <string>ad-hoc</string>
    <!-- 手动签名模式,因为我们要指定自定义配置文件 -->
    <key>signingStyle</key>
    <string>manual</string>
    <!-- 配置主应用和扩展的bundle ID与对应配置文件的映射 -->
    <key>provisioningProfiles</key>
    <dict>
        <key>com.yourcompany.mainapp</key>
        <string>主应用配置文件名称</string>
        <key>com.yourcompany.mainapp.extension</key>
        <string>扩展配置文件名称</string>
    </dict>
</dict>
</plist>

执行导出命令

xcodebuild -exportArchive \
  -archivePath "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.xcarchive" \
  -exportPath "${BUILD_HISTORY_DIR}" \  # IPA会导出到这个目录下
  -exportOptionsPlist "${WORKSPACE_DIR}/exportOptions.plist"  # 替换成你的plist文件路径

额外注意事项

  • 确保主应用和扩展的Bundle ID都包含在各自的Provisioning Profile中,且配置文件的类型(比如Ad Hoc、App Store)一致
  • 如果不想用plist文件,也可以在导出命令里直接通过-exportProvisioningProfile参数指定,但对于多Target的情况,plist的方式更清晰不易出错
  • 在Jenkins中,你可以把这些命令放到「Execute Shell」步骤里,替换掉对应的变量(比如${WORKSPACE_NAME}可以直接用Jenkins内置的${WORKSPACE}变量来适配)

内容的提问来源于stack exchange,提问作者Legolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:38