Xcode 10 命令行构建:使用 Fabric Info.plist 错误进行归档失败

17

我有一个 Jenkins 服务器,用于自动构建 iOS 项目,该项目有两个目标。

项目使用命令行实用程序 xcodebuild 进行构建。

完整的命令如下:

/usr/bin/xcodebuild -workspace "Our project.xcworkspace"
    -scheme "First target"
    -configuration Release
    archive
    DEVELOPMENT_TEAM=TEAMCODE
    -allowProvisioningUpdates

以及

/usr/bin/xcodebuild -workspace "Our project.xcworkspace"
    -scheme "Second target"
    -configuration Release
    archive
    DEVELOPMENT_TEAM=TEAMCODE
    -allowProvisioningUpdates

在我更新 Xcode 到版本 10 后,它就无法正常工作了。但每次都会出现错误:

Error: Fabric: Info.plist 错误

无法处理路径为 /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData/Our_project-xxxx/Build/Intermediates.noindex/ArchiveIntermediates/Our project/BuildProductsPath/Release-iphoneos/First application.app/Info.plist 的 Info.plist。 这可能是一个时间问题,请确保 Fabric 运行脚本构建阶段是最后一个构建阶段,并且没有其他脚本将 Our application.app 从 Xcode 生成的位置移动。您还可以将 '$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)' 添加为 Fabric 运行脚本构建阶段的 “Input Files” 依赖项。

** 归档失败 **

通过搜索和阅读错误描述后,我打开了 Xcode 中的 Build phases 选项卡并进行了设置(将 Run script 项目移到底部,勾选只有在安装时运行脚本,并将 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 添加到输入文件中,同时删除空的 Run script 项目)。

现在,手动从命令行构建工作正常 - 看起来问题已解决。即使 Jenkins 第一个目标也构建成功!但是第二个目标出现了相同的错误。

我打开项目,查看 Build phases 选项卡,发现 Run script 项目移动到了上方,并出现了新的空的 Run script 项目。 之后我进行了实验:在 Xcode GUI 中设置 Build phases,重新构建项目,发现相位被重新排序。因此,这似乎是在构建期间或之后发生的。

我该如何修复这个错误?

请问,我能否通过命令行手动排序构建阶段?如果可以,我只需在 Jenkins 步骤中添加一行。

此外:此错误仅在命令行构建时出现。当我在 Xcode GUI 中构建项目时,它总是成功的。

7个回答

19

好的,我从Fabrics那里得到了解决方案。 对于Xcode 10,在XCode中的构建阶段的输入文件(Input Files)中添加此路径: $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

在这里输入图片描述


4
但我也添加了这个步骤: “在搜索并阅读错误描述后,我打开了Xcode中的“Build phases”选项卡,并进行了设置(将“Run script”项目移动到底部,勾选“仅在安装时运行脚本”,并添加“$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)”到输入文件中,同时删除空的“Run script”项目)。” - General Failure
当我将旧的Xcode 10项目移植到Xcode 10.2.1并删除旧的派生数据时,这对我很有效。 - Echelon
我曾经遇到过这个问题,后来发现是脚本运行得太早了。最好在接近最后的时候运行。 - Jay Strawn

19

我将crashlytics的“Run Script”移至“Embed pods Frameworks”和“Copy pods Resources”之后,这有所帮助。enter image description here


8
我找到了一个权宜之计:在Xcode GUI中选择文件->工作区设置->构建系统,并选择旧版构建系统
为什么这个方法不好呢?因为:
  • 旧版构建系统新版构建系统(默认)慢。

  • 这不是Xcode的设置,而是工作区的设置。即,在Jenkins或某些版本控制系统操作中清除工作区文件后,此设置将重置为默认值,并再次选择无效的选项。


你有其他的解决方案吗? - Jatin Patel - JP
很遗憾,还没有。 - General Failure

6

我删除了项目的派生数据,问题得到了解决。


6
使用以下方法完成Crashlytics和/或Fabric的安装设置:
  1. 进入Build Settings
  2. 搜索“Debug Information Format”
  3. 将“Debug”值从“DWARF”更改为“带有dSYM文件的DWARF”
  4. 重新构建您的项目。
将“DWARF”更改为“带有dSYM文件的DWARF”

enter image description here

将“带有dSYM文件的DWARF”更改为“DWARF”

enter image description here


2
我已经有了Debug Information Format选项的DWARF with dSYM File - General Failure
@GeneralFailure 你能看一下这个吗?它可能会有帮助。 https://stackoverflow.com/a/53852817/3122406 - Bhavik Modi
@GeneralFailure,你找到解决方案了吗? - SriTeja Chilakamarri
抱歉,我现在无法检查它,因为我更换了工作项目。 - General Failure
1
这对我有用。看起来Fabric需要那个dSYM文件来检测并继续前进。谢谢@BhavikModi - Anish Kumar

1
Xcode 15.0:
将“Run script”项目移至底部,勾选“仅在安装时运行脚本”,并将$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)添加到输入文件中。

以下是将英文翻译成中文的步骤/要点: - undefined

0
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)放在您的Build Phases Run ScriptInput Files下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接