Google Xcode 10 测试版中的 Fabric

Google Fabric in Xcode 10 beta

我安装了 Xcode 10 Beta 6,我正在更新所有内容,在此过程中我 运行 遇到了 Fabric 的一个小问题。 Fabric 的网站有针对 Xcode 10 的特殊说明,上面写着:

当我在 Xcode 10 时,我转到 运行 脚本上的构建阶段,该脚本具有我的 Fabric 密钥,Input Fields[=20 部分下有一个 + 号=]

当我单击 + 时,它会自动生成 $(SRCROOT)/newInputFile,其中 newInputFile 会自动突出显示。

我不明白 Fabric 的说明。我是否在 $(SRCROOT)/ 之后复制 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 我是否将 INFOPLIST_PATH 替换为我的 info.plist 的文件路径?

我已经尝试了所有这些选项,但 Fabric 仍然在 Xcode 10 中崩溃。我知道它是 Fabric 因为我在我的 App Delegate 的 didFinishLaunchingWithOptions 中注释掉了 Fabric.with([Crashlytics.self])

我有同样的问题,如果你的 info.plist 在你的根目录中是这样的:

你应该像这样改变 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH):

我完全按照 Mahdi RB 的建议做了。也按照 official manual guide 上的步骤操作,但没有用。

当我使用 XCode 构建时,我看到它处理了大约 2k 个任务。当我启动 machine、打开 xcode 并执行存档时,结构构建通常会起作用。在那之后,大部分时间构建开始中断。我正在使用 03/OCT/18 下载的最新结构和 crashlytics。这真的很奇怪,因为它适用于我的其他项目,只是这个失败了。这从 XCode 10 - 版本 10.0 (10A255) 开始。它与之前的 XCode 9.

一起工作

这是我所说内容的一些证据:

我的解决方法是在调用 fabric 命令之前添加此命令。例如

sleep 15
"${PROJECT_DIR}/Fabric.framework/run" aaaaa aaaa

我注意到我的 mac 控制台应用加载了这个错误,不确定它是否相关:

IBAgent-iOS - assertion failed - libxpc.dylib - and some numbers here.

XCode

出错
2018-10-03 13:53:58.698 uploadDSYM[46168:550157] Fabric.framework/run 1.7.2 (210)
2018-10-03 13:53:58.704 uploadDSYM[46168:550157] Using API Key: "123"
2018-10-03 13:53:58.704 uploadDSYM[46168:550157] Launched uploader in validation mode
error: Fabric: Info.plist Error

Unable to process Info.plist at path /Users/someuser/Library/Developer/Xcode/DerivedData/SampleApp-amwweapikvrbgafmmnyeyorkiufq/Build/Intermediates.noindex/ArchiveIntermediates/SampleApp/BuildProductsPath/Release-iphoneos/SampleApp.app/Info.plist
This could be a timing issue, make sure the Fabric run script build phase is the last build phase and no other scripts have moved Inspector.app from the location Xcode generated it. You can also add '$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)' as an "Input Files" dependency for your Fabric run script build phase.

我试图打开那个 plist link,它指向一个快捷方式,而那个快捷方式指向一个真实的文件。不知道为什么会失败。我猜这与执行脚本时不存在的文件有关。延迟解决了这个问题。希望对您有所帮助。

  • 出于隐私考虑,我删除了原来的应用程序名称。

仅对于 Xcode 10,在 fabric 的最终设置中遇到问题的用户就是您的项目。

从 Xcode10 开始,您需要在 Build Phase 的输入文件字段中再进行一项设置。

只需复制此 $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 并粘贴到 Build 阶段的输入文件运行 Script 下的字段如下图所示。

阅读更多相关内容 link:https://fabric.io/kits/ios/crashlytics/install

fabric info.plist 错误可以通过更改 Xcode 工作区设置-->构建设置--> 遗留构建系统

来解决

进入目标的构建设置。找到 "Debug Information Format"。将调试和发布中的 "DWARF" 设置为 "DWARF with dSYM File"

我通过将 "Run Script" 移动到构建阶段的底部解决了这个问题。当然我改成了"DWARF with dSYM File"和$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH).

  1. 在构建阶段结束时添加脚本 运行 阶段。
  2. 将脚本阶段的 Shell 设置为 /bin/bash
  3. 将输入文件设置为:

    (1) $(PROJECT_DIR)/$(INFOPLIST_FILE).
    (2) $(PROJECT_DIR)/Scripts/set_bundle_build_number.sh 
        Change path to path of  script so changes you make to the script 
        cause a re-run.
    (3) $(TARGET_BUILD_DIR)/$(INFOPLIST_PATH) 
         Fixes XCode 10 issues of duplicate output phases.
    

Check image for more reference

我的解决方案是像这样用大括号替换圆括号

${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}

如果您在脚本阶段调用echo $(BUILT_PRODUCTS_DIR),您可以检查该路径是否实际存在。使用圆括号在 Xcode 构建控制台 "BUILT_PRODUCTS_DIR: command not found" 中为我提供了以下信息 用大括号替换圆括号将打印实际路径,因此脚本最终对我有用。

None 以上对我有用。如果有人使用 Cocoapods,请执行以下步骤。

  1. $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) 添加到 运行 脚本部分的输入文件。

  2. 将 运行 脚本框中的 ./Fabric.framework/run 替换为 "${PODS_ROOT}/Fabric/run"

  3. 转到构建设置,搜索 Debug Information,将其更改为 DWARF with dSYM File

至少对我有用。

对我来说,将构建系统更改为 "Legacy Build system" 修复了存档错误​​。 要更改构建系统,请转到文件 -> 工作区设置,并将构建系统从默认 "New Build system" 更改为 "Legacy Build system".