Xcode如何设置EXPANDED_CODE_SIGN_IDENTITY?

How does Xcode set EXPANDED_CODE_SIGN_IDENTITY?

我在证书过期后开始收到代码签名错误。我有一个更新的证书,过期的证书已被删除。但不知何故,Xcode 将 EXPANDED_CODE_SIGN_IDENTITY 设置为过期证书的 SHA-1。它从哪里得到这个值?我认为它必须缓存在某个地方,因为它试图用于代码签名的 SHA-1 钥匙串中没有证书。我搜索了 pbxproj 文件并没有找到它,从项目根目录开始的递归 grep 也没有产生任何结果。

以下是有关我的配置的一些详细信息:

项目标识在 Xcode 中设置如下:

当我检查钥匙串时,它找到了正确的身份:

$ security find-identity -p codesigning
Policy: Code Signing
  Matching identities
  1) F1326572E0B71C3C8442805230CB4B33B708A2E2 "iPhone Developer: XXX XXX (C395QGL4DK)"

在构建输出中我看到环境变量设置不正确:

    export EXPANDED_CODE_SIGN_IDENTITY=9F5616A53464FC5C003847ED620357A7BC72ABB1

我尝试用以下方法修复它:

我现在 运行 没有想法可以尝试了。我还有另外两个开发人员一起工作,他们最初都遇到了同样的问题。但是,在执行了我尝试过的一些相同步骤后,他们又开始工作了。我们都使用相同的证书、相同的配置文件和相同的项目设置。它一定是我系统上的设置或延迟缓存,但我没能找到它。

如果我能找到 Xcode 在哪里设置这个环境变量,我就可以清理它,一切都会好起来的。

如果有帮助,我正在使用 jenkins 构建应用程序,因此所有来自控制台的命令 运行... 所以我关闭了 CODE_SIGNING_ALLOWED 和 "overrided" EXPANDED_CODE_SIGN_IDENTITY_NAME 和 EXPANDED_CODE_SIGN_IDENTITY。出于某种原因,它帮助我构建了具有适当身份的应用程序。

xcodebuild -project my.xcodeproj/ -sdk iphoneos \
CODE_SIGNING_REQUIRED=YES \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGN_IDENTITY="My Identity" \
EXPANDED_CODE_SIGN_IDENTITY_NAME="My Identity" \
EXPANDED_CODE_SIGN_IDENTITY=<CODE_SIGN_IDENTITY>

最后一个可以通过

获得
security find-certificate -a -c "My Identity" -Z|grep ^SHA-1|cut -d " " -f3|uniq

我遇到了同样的问题,对我来说答案很简单:我试图使用与旧证书绑定的配置文件(我猜 EXPANDED_CODE_SIGN_IDENTITY 是从配置文件中提取的你正在尝试使用)。

无论如何,在与新证书绑定的开发中心创建新配置文件后,这种情况就停止了。