使用嵌入式库进行xcode测试时手动签名失败。可以分解吗?

时间:2016-10-10 08:58:30

标签: ios testing xcodebuild

我试图运行Facebook的WebDriverAgent,以便在真实设备上进行测试:https://github.com/facebook/WebDriverAgent

我们的管理员不是Apple自动签名的粉丝,所以我们正在尝试手动。当我把

 xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id='4xxx9' test DEVELOPMENT_TEAM=xxxx PROVISIONING_PROFILE=xxxxx

它说

Testing failed:
WebDriverAgentLib has conflicting provisioning settings. WebDriverAgentLib is automatically signed, but provisioning profile xxxx has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor.

我在所有内容上设置了手动签名(在xcode中),然后再试一次:

xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id='4xxx9' test DEVELOPMENT_TEAM=xxxx PROVISIONING_PROFILE=xxxxx

Testing failed:
WebDriverAgentLib does not support provisioning profiles. WebDriverAgentLib does not support provisioning profiles, but provisioning profile xxxx has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor.

我似乎需要分解测试'在没有配置文件的情况下构建库的操作,以及配置文件中的所有其他操作,然后触发测试。

这可以用于xcodebuild测试'命令被重写为几个命令来实现这样的构建/测试?我需要一个命令行解决方案,因为这是持续集成的一部分。

提前致谢!

3 个答案:

答案 0 :(得分:3)

这发生在我身上,使用手动签名并包含Cocoapods依赖项。这可能是Cocoapods(https://github.com/CocoaPods/CocoaPods/pull/6964)的一个已知问题。他们的解决方法是在PROVISIONING_PROFILE_SPECIFIER的{​​{1}}挂钩中指定''Podfile,但这对我们不起作用,因为我们提交了我们的Pod,所以{我们构建时,{1}}挂钩不会运行。

但是,除了将选项post_install传递给post_install之外,我们还可以通过在 Pods.xcodeproj / project.pbxproj 中为每个选项设置以下选项来构建目标/构建配置:

PROVISIONING_PROFILE_SPECIFIER=xxxxx

我主要不是iOS开发人员,但根据我的理解,xcodebuild已被弃用,同时指定CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; PROVISIONING_PROFILE = ''; PROVISIONING_PROFILE_SPECIFIER = ''; PROVISIONING_PROFILE可能是多余的,但无论如何我们都是在我们的项目中的时刻。

答案 1 :(得分:2)

尝试使用PROVISIONING_PROFILE_SPECIFIER=xxxxx而不是设置PROVISIONING_PROFILE,这是从Xcode8开始不推荐的。

如果仍然出现错误,请尝试既不设置DEVELOPMENT_TEAM也不设置PROVISIONING_PROFILE_SPECIFIER,因为这些代码签名相关的构建集只是相关的,如果您实际构建的是应用程序(但您只是在已构建的应用程序包上执行xcodebuild测试)

如果您想通过一次xcodebuild调用构建和测试该应用,建议您执行xcodebuild ... clean build test

修改

在查看WebDriverAgent项目之后,问题与WebDriverAgentLib是动态框架和WebDriverAgentRunner-Bundle的目标依赖性有关。动态框架根本不喜欢在Xcode8的构建阶段进行协同处理(它们现在应该在被复制到构建产品时动态编码)。通过在命令行(DEVELOPMENT_TEAM等)上指定代码签名相关的构建设置,Xcode8将为动态框架目标抱怨这一点,并使构建失败。

解决方案1:从xcodebuild调用中移除所有与代码签名相关的构建设置(PROVISIONING_PROFILE_SPECIFIER,PROVISIONING_PROFILE,DEVELOPMENT_TEAM,CODE_SIGN_IDENTITY),并为WebDriverAgentRunner-Target设置这些设置(在Xcode UI中或通过命令行使用plistbuddy对项目进行设置) .pbxproj)。

解决方案2:不要在真实设备上进行测试,而只是在模拟器上进行测试。由于不需要为模拟器配置可执行文件和/或测试包,您可以安全地省略xcodebuild调用中的任何与编码相关的参数。

解决方案3:坚持使用自动CodeSigning,并确保在构建机器的Xcode中有正确的开发者帐户的有效登录。

答案 2 :(得分:0)

我遇到此错误,https://stackoverflow.com/a/39923121/713391建议我检查"启用自动签名"然后单击取消而不做任何事情,这确实修复了它。代码差异显示更改是添加

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;

或在Xcode中称为Always Embed Swift Standard Libraries