iOS 生成故障排除

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方案。

找不到 Xcode 方案

xcworkspace生成 或 需要xcproject共享的 Xcode 方案。 Xcode 方案保存在本地,以便 Xcode 可以访问它们。 默认情况下,方案不会与他人共享或包含在源代码管理中。

若要在 Xcode 中共享方案,请使用以下步骤:

  1. 选择“ 产品 > 方案 > 管理方案”。
  2. 将 xcproject/xcworkspace 的方案设置为 共享
  3. 方案的容器必须设置为要生成的 Xcode 项目或工作区。
  4. .xcscheme文件添加到源代码管理并推送到远程存储库,以便 App Center 可以访问它。

将方案标记为共享

警告

确保你的 xcshareddata/xcschemes/ 文件夹不在文件中 .gitignore 。 这是 Xcode 存储文件的位置 .xcscheme 。 App Center 依赖于这些文件来正确生成项目。 仅将 .xcscheme 导出到其他文件夹中将 不起作用。

我的 iOS 生成失败,出现“clang: error: linker 命令失败,退出代码 1”

此错误可能是使用 xcodeproj 而不是工作区生成 App Center 造成的。 将 CocoaPods 添加到项目时,在 App Center 中生成时切换到使用工作区。

指示器:在生成日志中查找此行:

ld: library not found for -lPods-GarageController
clang: error: linker command failed with exit code 1 (use -v to see invocation)

** ARCHIVE FAILED **

若要修复此错误,请打开项目的“生成”配置,然后单击“ 保存”。 App Center 将自动正确选择工作区,以便将来生成。

iOS 签名问题说明

注意

使用非 ascii 字符的签名标识在生成中不受支持。

处理预配配置文件和证书可能是一个具有挑战性的过程。 以下提示应可帮助你成功对 iOS 应用进行签名:

  1. 将签名更改推送到项目后,请在 App Center 中保存生成配置。 在 App Center 中,任何分支的生成配置都存储 Xcode 项目的两个值:CODE_SIGN_STYLE) 文件夹中的 文件中.xcodeproj设置project.pbxproj的 和 DEVELOPMENT_TEAM (。 每当在手动签名和自动签名之间更改或切换开发团队时,请确保在推送更改后将生成配置保存在 App Center 上。 如果在推送后未保存,生成可能会失败并出现签名错误。

  2. 使用自动签名时拖放正确的预配配置文件。 在 Xcode 中,在“ 签名”下目标的“常规”选项卡中,单击 “Xcode 托管配置文件”旁边的信息图标。 然后,你将看到一个包含配置文件信息的弹出窗口。 单击左上角的 PROV 图标并将其拖动到所需位置 (,如下所示) 。

  3. 使用手动和自动签名时,请记下 App Center 当前支持的选项。 App Center 完全支持手动 iOS 应用签名,因此可以使用任何类型的配置文件或证书。 验证上传到 App Center 的预配配置文件和证书与在项目中指定的内容匹配。 如果已启用自动管理 Xcode 中的 登录 ,App Center 支持使用开发人员证书和配置文件进行应用签名, (不支持分发) 。 上传到 App Center 时,需要使用 Xcode 中自动生成的预配配置文件。

仍然遇到麻烦?

若要排查并启动并运行生成注册,我们建议执行以下步骤:

  1. 在 Xcode 项目中设置手动登录,并确保它在本地工作。
  2. 验证后,提交更改并将其推送到存储库。
  3. 准备在 Xcode 目标中选择的预配配置文件和证书,并将其上传到 App Center 生成配置。
  4. 最重要的是:在将新证书和配置文件保存到生成配置之前,请确保已推送项目的最新状态。

我的 .ipa 文件在哪里?

Xcodebuild 与 xcrun 不同,如果生成未签名,则不允许生成 .ipa 文件。 未签名的生成将改为生成 .xcarchive 。 如果要生成包含 .ipa 未签名生成的项目的文件,可以使用 该文件 .xcarchive 执行此操作。

使用 xcode 导出 xcarchive 文件

使用 Xcode 的 iOS 应用失败,出现位码版本无效错误

如果生成失败,则 error: Invalid bitcode version (Producer: '802.0.38.0_0' Reader: '800.0.42.1_0')使用的是由比项目更新版本的 Xcode 生成的库或 Pod。 可以在 App Center 中更新项目和生成配置,以使用较新版本的 Xcode,或者切换到问题库的备用版本,该库使用匹配的 Xcode 版本进行编译。

我的 iOS 应用无法运行测试

测试失败的一个常见原因是链接器命令遇到类似于以下错误:

 ld: directory not found for option iPhoneSimulator10.3.sdk/Developer/Library/Frameworks 
  ❌ ld: embedded dylibs/frameworks are only supported on iOS 8.0 and later (@rpath/XCTest.framework/XCTest) for architecture x86_64 
  ❌ clang: error: linker command failed with exit code 1 (use -v to see invocation)  

此错误的可能原因是 Apple Mach-O 链接器 的链接类型未设置为 静态库。 若要成功生成和测试应用,请确保测试目标中的 Apple Mach-O 链接器的链接类型设置为静态库

Apple Mach-O 链接器

我在 Xcode 9 上使用 CocoaPods 的 iOS 生成一直失败,我该怎么办?

这可能是因为 Pod 项目中的签名配置与 Main 项目中的签名配置不同。 Pod 是否已签入存储库? 如果是这样,Pod 项目必须使用与 Main 项目相同的签名方法。

如果 Pod 未签入,可能存在不同的问题。 在预生成脚本GitHub 问题中,可以使用一些解决方法。

由于我已将项目升级到 Xcode 10 beta,我的应用无法生成,并出现 错误“目标之间的依赖项周期”

Xcode 10 的新生成系统检测生成中的依赖项周期,如果存在,则生成失败。

有关如何修复生成的详细信息,请参阅 Apple 有关解析常见依赖项周期类型的文档