Xcode 10命令行构建:存档失败,并显示Fabric Info.plist错误

时间:2018-09-26 05:34:49

标签: ios xcode xcode10 auto-build

我有用于自动构建具有两个目标的iOS项目的Jenkins服务器。 使用命令行实用程序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之前,它可以正常工作。但是每次更新后,我都会看到错误

  

错误:结构:Info.plist错误

     

无法处理路径/Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData/Our_project-xxxx/Build/Intermediates.noindex/ArchiveIntermediates/我们的项目/ BuildProductsPath / Release-iphoneos / First应用程序中的Info.plist。 app / Info.plist   这可能是一个计时问题,请确保Fabric运行脚本构建阶段是最后一个构建阶段,并且没有其他脚本将Xcode生成位置的我们的application.app移走了。您还可以为Fabric运行脚本构建阶段添加“ $(BUILT_PRODUCTS_DIR)/ $(INFOPLIST_PATH)”作为“输入文件”依赖项。

     

**归档失败**

在谷歌搜索并阅读错误描述后,我确实在Xcode中打开了Build phases标签并进行了设置(将Run script项移至底部,选中Run script only when installing并将$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)添加到Input文件,并删除空的Run script项目)。

现在可以从命令行手动构建-看来问题已解决。甚至詹金斯也确实建立了第一个目标!但是secong目标没有相同的错误。

我确实打开了项目,查看“构建阶段”选项卡,发现Run script项移至上方,并且出现了新的空白Run script。 之后,我进行了实验:设置Build阶段,在Xcode GUI中重建项目,然后看到这些阶段再次重新排序。因此,它发生在构建期间或构建之后。

如何解决此错误?

可以,我可以从命令行手动订购构建阶段吗?如果是的话,我只需在詹金斯步骤中追加一行。

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

6 个答案:

答案 0 :(得分:5)

我找到了类似拐杖的解决方案:在Xcode GUI中的Legacy Build System-> File-> Workspace Settings中选择Build System

为什么这是不好的解决方案?由于:

  • Legacy Build SystemNew Build System (Default)慢。

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

答案 1 :(得分:5)

好的,我从Fabrics得到了解决方案。 对于Xcode 10,将此路径添加到XCode的Build阶段的Input Files中。 $(BUILT_PRODUCTS_DIR)/ $(INFOPLIST_PATH)

enter image description here

答案 2 :(得分:4)

使用以下方法完成Crashlytics和/或Fabric设置的解决方案: 1.转到构建设置 2.搜索“调试信息格式” 3.将“调试”的值从“ DWARF”更改为“带有dSYM文件的DWARF” 4.再次构建您的项目。

更改“ DWARF”

enter image description here

到“带有dSYM文件的DWARF”

enter image description here

答案 3 :(得分:1)

在“嵌入Pod框架”和“复制Pod资源”之后,我将带有crashlytics的“运行脚本”移到了结尾,这enter image description here

答案 4 :(得分:1)

$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 放在 Input Files 下的 Build Phases Run Script

答案 5 :(得分:0)

我删除了项目的派生数据并解决了问题