如何使用 Xcode 6.0.1 为 OS X Server 3.2.1 添加证书

Posted

技术标签:

【中文标题】如何使用 Xcode 6.0.1 为 OS X Server 3.2.1 添加证书【英文标题】:How do I add certificates for OS X Server 3.2.1 with Xcode 6.0.1 【发布时间】:2014-09-18 13:13:14 【问题描述】:

在我将 Xcode(到 6.0.1)和 OS X Server(到 3.2.1)都升级后,我不知道如何为配置文件添加证书,以便 Xcode 机器人可以找到它们。

我已通过将 .mobileprovision 文件复制到 /Library/Developer/XcodeServer/ProvisioningProfiles 成功添加配置文件

但是我在日志中得到的错误现在是:

CodeSign /Library/Developer/XcodeServer/Integrations/Caches/017d83d8975db54bc8279c2fcc0304a6/DerivedData/Build/Products/Server\ build-iphoneos/Test.app
    cd /Library/Developer/XcodeServer/Integrations/Caches/017d83d8975db54bc8279c2fcc0304a6/Source/TEST
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"

Signing Identity:     "iPhone Distribution: Greener Pastures ApS"
Provisioning Profile: "Greener Pastures Enterprise TEST"
                      (03F7CD73-FB25-422E-22A4-A80F12041005)

    /usr/bin/codesign --force --sign 746ADC85C62D54BEC9FA874A8D777A38D4DB95CA --keychain /Library/Developer/XcodeServer/Keychains/Portal.keychain --resource-rules=/Library/Developer/XcodeServer/Integrations/Caches/017d83d8975db54bc8279c2fcc0304a6/DerivedData/Build/Products/Server\ build-iphoneos/Fnug.app/ResourceRules.plist --entitlements /Library/Developer/XcodeServer/Integrations/Caches/017d83d8975db54bc8279c2fcc0304a6/DerivedData/Build/Intermediates/Fnug.build/Server\ build-iphoneos/Fnug.build/Fnug.app.xcent /Library/Developer/XcodeServer/Integrations/Caches/017d83d8975db54bc8279c2fcc0304a6/DerivedData/Build/Products/Server\ build-iphoneos/Fnug.app

746ADC85C62D54BEC9FA874A8D777A38D4DB95CA: no identity found
Command /usr/bin/codesign failed with exit code 1

看起来像:“我找不到指定配置文件的证书”。

看起来证书应该在文件 /Library/Developer/XcodeServer/Keychains/Portal.keychain 中——很遗憾,我无法编辑。

我已尝试使用将证书添加到文件中

sudo security import "/Users/administrator/Desktop/Greener Pastures Enterprise Distribution TEST Certificate.p12" -k /Library/Developer/XcodeServer/Keychains/Portal.keychain -A -T /usr/bin/codesign -T /usr/bin/xcodebuild -T /usr/bin/pkgbuild

但这提示我输入“钥匙串密码”。我没有(不,它不是管理员帐户的密码或证书密码)。

有谁知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

尝试首先将您的服务器添加到开发人员门户,并从您的项目中移除所有限制,例如显式配置文件。

如果这不起作用,file a Radar 解释您的配置以及您认为 Apple 应该支持它的原因。

如果您真的非常确定入侵您的服务器是个好主意,可能会破坏它,请使用具有管理员权限的帐户在您的服务器上打开一个终端,然后:

    将 Portal 钥匙串复制到您的桌面:

    > sudo cp /Library/Developer/XcodeServer/Keychains/Portal.keychain ~/Desktop/
    

    Password:你的管理员密码

    > sudo chown `whoami`:staff ~/Desktop/Portal.keychain 
    

    将 Portal 钥匙串密码设置为“123”

    > security set-keychain-password -o "`sudo cat /Library/Developer/XcodeServer/SharedSecrets/PortalKeychainSharedSecret`" ~/Desktop/Portal.keychain 
    

    New Password:123

    Retype New Password:123

    在 Keychain Access 中打开 Keychain:

    > open -b com.apple.keychainaccess ~/Desktop/Portal.keychain
    

    使用密码“123”解锁“门户”钥匙串

    将所需密钥从您的个人“登录”钥匙串复制到“门户”钥匙串。

    确保私钥具有正确的访问权限(在“访问控制”选项卡中),应列出“xcsbuildd”、“xcscontrol”、“xcodebuild”和“codesign”

    李>

    锁定“门户”钥匙串,退出“钥匙串访问”

    重置门户钥匙串密码:

    > security set-keychain-password -p "`sudo cat /Library/Developer/XcodeServer/SharedSecrets/PortalKeychainSharedSecret`" ~/Desktop/Portal.keychain 
    

    Password:your-administrator-password(可选步骤)

    Old Password:123

    它可能会或可能不会再次要求您输入管理员密码,请注意提示。

    将 Portal 钥匙串复制回去

    > sudo chown _xcsbuildd:_xcs ~/Desktop/Portal.keychain
    > sudo cp ~/Desktop/Portal.keychain /Library/Developer/XcodeServer/Keychains/
    

    由于系统缓存打开的钥匙串,请重新启动计算机。

不要只是盲目地将密钥复制到 Portal 钥匙串。如果您需要帮助,请先尝试其他解决方案并询问堆栈溢出问题。 仅在filing a Radar 之后执行此程序,而不仅仅是因为“事情不正常”。当您不确定自己在此做什么时,您将破坏您的系统。


替代程序(高级):

将以下脚本复制为importP12.sh

#!/bin/sh

importP12()

P12FILE="$1"
XCS="/Library/Developer/XcodeServer";
XCBIN="$XCS/CurrentXcodeSymlink/Contents/Developer/usr/bin";
PORTALKC="$XCS/Keychains/Portal.keychain"
PORTALKCS="$XCS/SharedSecrets/PortalKeychainSharedSecret"
sudo security -i <<IMPORT
unlock-keychain -p "`sudo cat $PORTALKCS`" $PORTALKC
import "$P12FILE" -k $PORTALKC -T "$XCBIN/xcsbuildd" -T "$XCBIN/xcscontrol" -T "$XCBIN/xcodebuild" -T /usr/bin/codesign
lock-keychain $PORTALKC
IMPORT


echo "Please enter your account password:"
for p12 in "$@"
do
  importP12 "$p12"  
done

然后做

&gt; importP12.shyour-P12-file.p12

Password:你的管理员密码

应该会出现一个对话框,要求您输入 P12 导入密码并且您已设置完毕。

【讨论】:

对于那些寻找...“xcsbuildd”、“xcscontrol”和“xcodebuild”在 Xcode 二进制文件中...“/Applications/Xcode.app/Contents/Developer/usr/bin”而“codesign”是“usr/bin/codesign”,您可以通过与您添加的证书关联的私钥上的“获取信息”菜单项(或上下文菜单)将这些添加到 ACL 列表中。 您是否提交了 Radar,如果是,是否值得在此处提及该号码以便可以欺骗? 我还没有提交雷达。当我这样做时,我会更新号码 我按照上面的步骤做了两次。有用。但它有一些有趣的副作用。在一种情况下,我不得不重新启动两次而不是一次。我不得不在服务器的 Xcode 服务中重新添加 Xcode 应用程序。后一个操作在系统中创建了 3 个幽灵“管理员”帐户。由于在“切换用户”之后显示自己是“xcsbuildd”,因此我尝试重新启动 _whole 过程而不添加私钥的访问权限。存档仍然成功,但是在将 Xcode 应用程序添加到 Server.app 时仍然创建了我的 3 个幽灵帐户。删除ghost imm。阻止机器人运行。 为我工作!谢谢。作为给其他人的说明,我将其与下面的答案 (***.com/a/25980385) 结合在一起,省略了 KeychainAccess GUI 的使用。就我而言,使用 CLI 导入身份更加稳定。【参考方案2】:

Matt Moriarity 的回答让我找到了解决方案:https://devforums.apple.com/message/1022214#1022214

我刚刚将构建服务器与我们的开发团队重新连接。这使得 Xcode 服务重新初始化它需要的所有证书和配置文件。现在集成构建运行没有错误。

    在 Server > Xcode > Settings > Builds > Development Teams 点击 Edit...

    从列表中删除您的开发团队,然后按确定

    Server.app完成后,“Development Teams”后面应该没有条目,设备列表也是空的。

    现在再次打开 Server > Xcode > Settings > Builds > Development Teams > Edit... 并添加您的开发团队

    在您的团队和设备重新出现后,您可以开始集成构建

不要使用您自己的配置文件,这一点很重要。采取“ios 开发者(自动)”设置。

【讨论】:

【参考方案3】:

如果你让它与旧的 osx 服务器和 xcode 5 一起使用。你只需这样做:

$ mv /Library/Developer/XcodeServer/Keychains/Portal.keychain /Library/Developer/XcodeServer/Keychains/Portal.keychain.bkp

$ ln -s /Library/Keychains/System.keychain /Library/Developer/XcodeServer/Keychains/Portal.keychain

旧服务器使用系统钥匙串。

【讨论】:

这对我也有用。退出并重新登录过程对我不起作用。【参考方案4】:

当您导出 .p12 文件时,Keychain Access 会要求您输入密码。尝试将 p12 文件的密码添加到您的命令中。像这样,

sudo security import "/Users/administrator/Desktop/Greener Pastures Enterprise Distribution TEST Certificate.p12" -P PASSWORD -k /Library/Developer/XcodeServer/Keychains/Portal.keychain -A -T /usr/bin/codesign -T /usr/bin/xcodebuild -T /usr/bin/pkgbuild

我在我们的构建服务器上有一个脚本,它可以从放置文件夹中导入 p12 文件。导入行如下所示:

security import $_ -k /Library/Developer/XcodeServer/Keychains/Portal.keychain -P PASSWORD -A

【讨论】:

干得好!我将来自上述 eik (***.com/a/25934218) 的响应与此响应结合起来,以获得成功的方法。我发现使用 CLI 导入身份更可靠。 我通过首先解锁 Portal 钥匙串来实现这一点:sudo security unlock-keychain -p 'cat /Library/Developer/XcodeServer/SharedSecrets/PortalKeychainSharedSecret' /Library/Developer/XcodeServer/ Keychains/Portal.keychain(在 cat 命令中将 ' 替换为 `)【参考方案5】:

我有同样的问题。我通过以下方法修复它:

Xcode > Preferences > Accounts > View Details > And just refresh the Provisioning Profile 

Then Restart the Xcode and Clean & Build. 

【讨论】:

【参考方案6】:

对于 OX X Server 4.0 和 XCode 6.1 是一种更简单的方法:

    在服务器上使用 XCode 打开您的项目,将您的开发者帐户添加到“帐户”并下载所有必需的配置文件。

    将您的 Privisioning Profiles 从 /Users//Library/MobileDevices/Provisioning Profiles/ 复制到 /Library/Developer/XcodeServer/ProvisioningProfiles/

    为管理员授予文件夹 /Library/Developer/XcodeServer/ProvisioningProfiles/ 的读写权限

    打开 KeyChaine Access 双击配置文件密钥(例如 iOS 开发人员:XY)并允许所有应用程序访问。

完成。

【讨论】:

【参考方案7】:
    在带有 Xcode 服务器的机器上将证书 (*.p12) 安装到钥匙串 在 Keychain.app 中将“登录-我的证书”复制到“系统-我的证书”

【讨论】:

以上是关于如何使用 Xcode 6.0.1 为 OS X Server 3.2.1 添加证书的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5 为 OS X 10.6 开发

如何在 Mac OS X 10.8 / Xcode 4.4 上使用/安装 gcc

如何运行使用 xCode 构建的 OS X 应用程序以查看依赖项是不是有效

如何从 Mac OS X 10.7.3 卸载 XCode 4.3.1?

在 OS X 10.10 上使用 CMake 为 Blender 构建 XCode 项目

如何在 OS X 10.10.3 上运行 Xcode 7 beta 5?