我有用于自动构建 iOS 项目的 Jenkins 服务器,该项目有两个目标。 使用命令行实用程序构建项目
xcodebuild
。
完整命令是
/usr/bin/xcodebuild -workspace "我们的项目.xcworkspace" - 计划“第一目标” -配置发布 档案 DEVELOPMENT_TEAM=团队代码 -允许配置更新
和
/usr/bin/xcodebuild -workspace "我们的项目.xcworkspace" - 计划“第二个目标” -配置发布 档案 DEVELOPMENT_TEAM=团队代码 -允许配置更新
在我将 Xcode 更新到版本 10 之前,它运行得很好。但每次更新后我都会看到错误
错误:结构: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信息表 这可能是一个计时问题,请确保 Fabric 运行脚本构建阶段是最后一个构建阶段,并且没有其他脚本将我们的 application.app 从 Xcode 生成它的位置移动。您还可以添加 '$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)' 作为 Fabric 运行脚本构建阶段的“输入文件”依赖项。
** 存档失败 **
在谷歌搜索并阅读错误描述后,我确实在 Xcode 中打开
Build phases
选项卡并进行设置(将 Run script
项目移动到底部,检查 Run script only when installing
并将 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
添加到输入文件,并删除空 Run script
项目) .
现在可以从命令行手动构建 - 问题似乎已经解决。甚至詹金斯也建立了第一个目标!但第二个目标没有出现同样的错误。
我确实打开了项目,查看“构建阶段”选项卡,看到
Run script
项目移到了上面,并出现了新的空 Run script
。
之后我做了实验:设置构建阶段,在 Xcode GUI 中重建项目,并看到这些阶段再次重新排序。因此,它发生在构建期间或之后。
如何修复这个错误?
我可以从命令行手动订购构建阶段吗?如果是,我只需在 Jenkins 步骤中添加行。
另外:这个错误只出现在命令行构建中。当我从 Xcode GUI 构建项目时,它总是成功。
我找到了类似拐杖的解决方案:在 Xcode GUI 中的
Legacy Build System
-> File
-> Workspace Settings
处选择 Build System
。
为什么这个解决方案不好?因为:
Legacy Build System
比 New Build System (Default)
慢。这不是 Xcode 设置,而是工作区。 IE。清理 Jenkins 中的工作区文件夹或某些版本控制系统操作后,会将此设置重置为默认值,并且将再次选择非工作选项。
我删除了项目的派生数据并解决了问题
Xcode 15.0:
将运行脚本项移至底部,选中仅在安装时运行脚本并将 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 添加到输入文件
将
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
放在 Input Files
中的 Build Phases
Run Script
中
我的问题是我正在使用 flutter 并更改了版本。 我通过运行 flutter doctor 来解决这个问题,让我的 IDE 引用我的 flutter 版本的正确文件夹,它成功了。