Xcode构建随机失败

时间:2014-07-10 12:09:03

标签: ios xcode xcodebuild codesign

我们有一个iOS自动构建系统,它随机地使某些项目的协同设置失败。

构建系统使用xcodebuild(后跟xcrun)来构建和打包应用程序。我们在多个应用中使用此流程。我们运行它的构建机器有多个分发签名证书,并运行Xcode 5.1.1(5B1008)和10.9.4。我们已经使用该系统大约两年了,并且构建工作正常。当它们不起作用时,通常会有一个明确的xcodebuild错误消息。但是现在我们正在xcodebuild上为我们的两个应用程序发出随机失败的codesign调用。

xcodebuild命令如下:

xcodebuild -verbose -project ./src_dir/TechApp.xcodeproj ONLY_ACTIVE_ARCH=NO ARCHS="armv7 armv7s arm64" -scheme ${SCHEME} QA PROVISIONING_PROFILE=${PROFILE} CODE_SIGN_IDENTITY=${IDENTITY} CONFIGURATION_BUILD_DIR=./bld_dir/builds/QA build

并且,经过大量的xcodebuild编译语句后,它失败并出现以下内容:

CodeSign /Users/bldUser/buildScripts/archive_dir/1404933111/bld/bld_dir/builds/QA/Tech\ App.app
    cd /Users/bldUser/buildScripts/archive_dir/1404933111/bld/src_dir
    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:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin"
    Using code signing identity "iPhone Distribution: Build Certificate" and provisioning profile "BuildWildcard" (C137C14D-630F-4D67-BD2B-2FD4AB4F2BA4)
    /usr/bin/codesign --force --sign 637514541007B62BCEA94ACC41A98A0E1391C3D4 --resource-rules=/Users/bldUser/buildScripts/archive_dir/1404933111/bld/bld_dir/builds/QA/Tech\ App.app/ResourceRules.plist --entitlements /Users/bldUser/buildScripts/archive_dir/1404933111/bld/build/TechApp.build/Debug-iphoneos/TechApp\ QA.build/Tech\ App.xcent /Users/bldUser/buildScripts/archive_dir/1404933111/bld/bld_dir/builds/QA/Tech\ App.app


** BUILD FAILED **

失败的项目是大型应用程序......并且它们附加了多个依赖项目(我认为可能是依赖项目导致了编码的随机失败,但我'我不确定。)

事情是,这个声明随机失败。如果我再次运行它,它将正常工作。所以这是随机性让我感到困惑。并且确实没有任何错误消息。它只是说“建立失败”。有些事情我试图让它起作用:

  1. 我已将其他参数传递到xcodebuild OTHER_CODE_SIGN_FLAGS=--verbose=4 --continue --deep,以查看这些参数的任何组合是否“有用”。这是基于this link中描述的问题,因为它似乎与我们失败的特定项目的失败条件相匹配。这篇文章让我最感兴趣,因为看起来这个问题可能与OS +构建环境有关+这个项目失败的事实附加了很多子项目。
  2. 我们目前在login.keychain中拥有所有证书...但是,根据this link(其中包括),建议从特定于构建的钥匙串运行证书。这很棒,而且是一种更清洁的做事方式 - 但是,在尝试之后,这对上述问题没有任何影响。
  3. 我想也许这可能与证书上的混淆有关 - 所以我删除了除了这些应用程序所需的所有iPhone发行版证书,但它仍然会出现此错误。
  4. 我已经进入项目的每个目标,包括子项目,并放入代码签名身份,以确保不存在某些项目或子项目设置的可能性会选错了证书。另外,在上面的xcodebuild命令中,我已经输入了显式方案名称和配置文件ID - 所以这不是一个无法找到供应配置文件/证书组合的问题(或者至少我没有认为它是 - 没有指示它找不到配置文件或证书)
  5. 鉴于它是随机的,我怀疑它是(1)存在一些未设置的代码签名值的情况,因此随机选择一个;或(2)xcode或最近才引入的操作系统的一些问题。

    任何关于尝试什么的想法或想法都会非常感激。

    一次更新: 这在通过Xcode运行时工作得很好。所以这是针对这些项目的xcodebuild特有的。通过Xcode编译时:它可以100%的时间工作。通过xcodebuild编译时:它的工作时间为25-50%。所以我真的希望xcodebuild命令中缺少一些东西,这不需要实际的项目更改(因为它直接通过Xcode编译时有效)。

    更新trojanfoe的问题: 空间可能存在问题。这是其中一个项目的实际xcodebuild调用:

    xcodebuild -verbose -project /Users/bldUser/buildScripts/archive_dir/1404904225/bld/src_dir/MyTechApp.xcodeproj ONLY_ACTIVE_ARCH="NO" ARCHS="armv7 armv7s arm64" -scheme "TechApp Dev" PROVISIONING_PROFILE="" CODE_SIGN_IDENTITY="iPhone Distribution: Build Certificate" CONFIGURATION_BUILD_DIR="/Users/bldUser/buildScripts/archive_dir/1404897462/bld/bld_dir/builds/Dev" build
    

    运行上面的命令后,有(很多)构建命令(有很多很多警告,但没有错误)。它最终停在以下位置:

    CodeSign /Users/bldUser/buildScripts/archive_dir/1404897462/bld/bld_dir/builds/Dev/Tech\ App.app
        cd /Users/bldUser/buildScripts/archive_dir/1404904225/bld/src_dir
        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:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin"
        Using code signing identity "iPhone Distribution:  Build Certificate" and provisioning profile "BuildWildcard" (C137C14D-630F-4D67-BD2B-2FD4AB4F2BA4)
        /usr/bin/codesign --force --sign 637514541007B62BCEA94ACC41A98A0E1391C3D4 --resource-rules=/Users/bldUser/buildScripts/archive_dir/1404897462/bld/bld_dir/builds/Dev/Tech\ App.app/ResourceRules.plist --entitlements /Users/bldUser/buildScripts/archive_dir/1404904225/bld/build/MyTechApp.build/Debug-iphoneos/TechApp\ Dev.build/Tech\ App.xcent /Users/bldUser/buildScripts/archive_dir/1404897462/bld/bld_dir/builds/Dev/Tech\ App.app
    
    ** BUILD FAILED **
    

    所有“cd”命令和“export”命令都作为codesign命令的一部分运行。就xcodebuild语句而言,我们将配置文件留空,以便它获取默认值 - 尽管即使我指定了特定的配置文件,它仍然会失败(并且从上面的代码符号开始,它正在拾取正确的配置文件)。以上还规定了该方案。这通常是从bash脚本运行的,它将遍历一系列方案,并通过xcodebuild为每个方案生成构建。正如您在上面所看到的,方案和项目以及产品名称中都有空格,所以如果这在某种程度上是一个问题我也不会感到惊讶。我不确定为什么它会工作一次而不是另一次,但我会尝试去除空格。 src_dir和funky archive_dir数字是由我们的构建系统创建的目录,因此这些文件都被检出到src_dir位置。

0 个答案:

没有答案