-allowProvisioningUpdates不起作用

时间:2017-09-19 08:14:45

标签: ios xcode continuous-integration xcode9

我们正在使用Jenkins进行连续集成。为了编译我们的应用程序,我们需要做的一切都是通过命令行(bash脚本)来完成的,因为我们有几台机器可以在没有人工访问设备的情况下完成构建。

您可以想象我很高兴在XCode9中看到新的xcodebuild功能标志-allowProvisioningUpdates。

据我所知,我需要将Apple ID的凭据添加到XCode设置中。

凭据会添加到“首选项”中的“XCode帐户”标签中,但是当我尝试使用“xcodebuild ... -allowProvisioningUpdates”进行编译时,会显示以下错误消息:

 2017-09-19 09:47:59.692 xcodebuild[74979:3824315]  DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/DVTFrameworks/DVTFrameworks-13231/DVTFoundation/Portal/DVTDeveloperAccountCredentialsManager.m:38  
Details:  Unable to find default keychain.  
Object:   <DVTDeveloperAccountCredentialsManager>  
Method:   +defaultAccountCredentialsManager  
Thread:   <NSThread: 0x7fe17860aa40>{number = 4, name = (null)}  
Please file a bug at http:/  
2017-09-19 09:47:59.792 xcodebuild[74979:3824308] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fe17d45cf20>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(  
    "Error Domain=DVTServicesSessionErrorDomain Code=0 \"Unable to log in with account 'xxx@yyy.com'.\" UserInfo={NSLocalizedFailureReason=Unable to log in with account 'xxx@yyy.com'., NSLocalizedRecoverySuggestion=The login details for account 'xxx@yyy.com' were rejected., DVTDeveloperAccountErrorAccount=<DVTAppleIDBasedDeveloperAccount 0x7fe179b016c0: username: xxx@yyy.com>, NSUnderlyingError=0x7fe179e8ee60 {Error Domain=DVTDeveloperAccountErrorDomain Code=4 \"xxx@yyy.com could not sign in.\" UserInfo={NSLocalizedRecoverySuggestion=Cannot sign in to this account. Try signing into it again in the Accounts preference pane., NSLocalizedDescription=xxx@yyy.com could not sign in., DVTDeveloperAccountErrorAccount=<DVTAppleIDBasedDeveloperAccount 0x7fe179b016c0: username: xxx@yyy.com>}}}",  
    "Error Domain=IDEProfileLocatorErrorDomain Code=1 \"No profiles for 'com.yyy.CITestProject' were found\" UserInfo={NSLocalizedDescription=No profiles for 'com.yyy.CITestProject' were found, NSLocalizedRecoverySuggestion=Xcode couldn't find any iOS App Store provisioning profiles matching 'com.yyy.CITestProject'.}"  
)}  
error: exportArchive: The operation couldn’t be completed. Unable to log in with account 'xxx@yyy.com'.

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

更新:我们使用此插件启动我们的Jenkins从属的ssh会话以执行buildjob:https://wiki.jenkins.io/display/JENKINS/SSH+Slaves+plugin

7 个答案:

答案 0 :(得分:4)

我有同样的问题。我向Apple报告了这个漏洞,但没有用。为了继续使用Xcode 9,我只切换到Jenkins的手动签名。 (开发人员仍然使用自动签名。)

/usr/bin/xcodebuild -exportArchive \
    DEVELOPMENT_TEAM=*your-dev-team-id* \
    CODE_SIGN_STYLE=Manual \
    CODE_SIGN_IDENTITY="iPhone Distribution: *your cert*" \
    PROVISION_PROFILE="*your*.mobileprovision" \
    *rest of your parameters*

答案 1 :(得分:2)

-allowProvisioningUpdates 在Xcode 9最终版本中为我工作。

验证您可以使用Xcode IDE构建自动签名Xcode项目

  • 1)打开配置为自动签名的Xcode项目
    • 目标&gt;中选择目标一般&gt;签名
    • [x]自动管理签名
    • 输入您的团队帐户凭据
  • 2)构建项目并验证构建成功

使用带有选项-allowProvisioningUpdates的xcodebuild关闭Xcode和Build项目

  • 1)添加选项“xcodebuild ... -allowProvisioningUpdates
  • 2)出现提示时,“xcode想要在您的钥匙串中访问密钥”xcode apple id access“
    • 输入凭据并按下按钮始终允许

现在Jenkins命令行构建应该可以工作。

答案 2 :(得分:1)

我最近从XCode 7.x更新到9.3版本后,我遇到了同样的问题。

除了xcodebuilder的 -allowProvisioningUpdates 之外,我的解决方案还是参数 -allowProvisioningDeviceRegistration

#Collection > .grid--view-items
{
display: flex;
flex-flow: row wrap;
}

#Collection .grid__item
{
display: flex;
}

#Collection .grid-view-item
{
display: flex;
flex-direction: column;
}

#Collection a.grid-view-item__link.grid-view-item__image-container
{ flex: 1 0 0; }

与詹金斯完美搭配。

答案 3 :(得分:1)

这看起来像是一个老问题。但我今天来到这里是因为我遇到了同样的问题。由于“allowProvisioningUpdates 不起作用”,我无法在模拟器上运行 flutter 应用程序。

无论如何,我终于通过在 Xcode 上打开 flutter 应用程序解决了这个问题。然后在 Xcode 上更新我的帐户首选项。看来您时不时要手动登录Apple ID帐户。

谢谢,

答案 4 :(得分:0)

Xcode将凭据保存在默认钥匙串中。为了让它通过ssh访问它,首先需要解锁该钥匙串:

/usr/bin/security unlock-keychain /Users/xxx/Library/Keychains/login.keychain-db

使用jenkins时,您需要在构建作业内或启动代理时解锁钥匙串。例如,您可以将其添加到/Library/Application Support/Jenkins/jenkins-slave-runner.sh

“Montain的Ed”的回答只有效,因为xcodebuild会检查/Library/MobileDevice/ProvisioningProfiles(和其他)目录中的有效配置文件,如果找到了,那么-allowProvisioningUpdates选项只会使用此配置文件并且不需要登录。

答案 5 :(得分:0)

当您通过SSH处理Xcode错误时,通常最好使用GUI尝试相同的命令。它通常会向您显示它尝试访问的哪些钥匙串条目。

就我而言,它促使我允许xcodebuild访问我的钥匙串中的Xcode-AlternateDSIDXcode-Token。我通过“始终允许”授予了访问权限。您还可以在Keychain Access中编辑这些条目,并允许所有应用程序访问它们,如果您不太担心安全性。

在运行xcodebuild之前我已经运行security unlock-keychain -p mypassword /Users/myuser/Library/Keychains/login.keychain-db,所以这可能也是必要的。

这样做之后,出口就有效了。

答案 6 :(得分:0)

我已修复它。问题是我使用team_id Fastlane命令指定了团队。您应该改用enable_automatic_code_signing。另外,未指定配置。现在我有了这个脚本:

    enable_automatic_code_signing(
        team_id: <YOUR_TEAM_ID_REQUIRED_HERE>,
    )
    gym(
        scheme: <YOUR_SCHEME_REQUIRED HERE>,
        configuration: <YOUR_CONFIGURATION_REQUIRED HERE>,
        export_method: "development",
        xcargs: "-allowProvisioningUpdates",
    )

我还找到了this页。我同时尝试了上述更改,所以我不知道是什么帮助了我。但是我已经从页面还原了更改,但仍然可以使用。所以我认为问题出在team_idconfiguration