通过 Fastlane 将 dSYMS 上传到 Firebase

问题描述 投票:0回答:7

我正在努力通过 Fastlane 将 dSYM 文件上传到 Firebase。 我有一条如下所示的车道:

desc "Fetch and upload dSYM files to Firebase Crashlytics"
lane :refresh_dsyms_firebase do |options|
  download_dsyms(version: options[:version])        
  upload_symbols_to_crashlytics(gsp_path: "./App/GoogleService-Info.plist") 
  clean_build_artifacts
end

我确认这是

plist
文件的正确路径,但是当我第一次尝试运行该通道时,我看到以下内容:

[17:22:47]: invalid byte sequence in UTF-8
[17:22:47]: invalid byte sequence in UTF-8
[17:22:47]: invalid byte sequence in UTF-8

然后为找到的每个 dSYM 文件选择其中之一:

[17:22:48]: Uploading '70DBE65E-227E-3754-89F2-EEFA6B8EEC2F.dSYM'...
[17:22:48]: Shell command exited with exit status  instead of 0.

我正在尝试确定我在这个过程中到底缺少了什么。 有人有想法吗? 我对 Fastlane 相当陌生,所以绝对假设我可能会错过一些基本的东西。 (不过,空的退出状态有点奇怪)。

快车道2.107.0

编辑(2021 年 6 月 7 日:2021 年): 我将自己的答案更新为在撰写本文时对我有帮助的答案。

此页面上还有许多有关使用 Fastlane 的其他精彩答案 - 请查看它们

firebase continuous-integration fastlane
7个回答
14
投票

对于大多数人来说这可能不是一个选择,但我最终通过重新开始解决了这个问题。如果你是从 Fabric 过来的,这一点可能并不完全明显,但我想我会撕掉创可贴。我最初的设置是使用 Fabric(Answers)/Firebase Crashlytics,这是 Fabric->Firebase 迁移路径,虽然很微妙,但两者之间的配置略有不同,并会导致

upload_symbols_to_crashlytics

的问题
  1. 删除对 Fabric 答案的支持,或替换为 https://firebase.google.com/docs/analytics/ios/start
  2. 删除
    Fabric
     中的 
    Info.plist
  3. 声明
  4. 在 BuildPhases 中修改现有的运行脚本:将现有的运行脚本替换为
    "${PODS_ROOT}/Fabric/run"
    并将
    $(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
    添加到输入文件
  5. 在您中
    AppDelegate
    删除
    Fabric.with([Crashlytics.self])
    ,您还可以杀死
    import Fabric
    ,因为这现在已被 Firebase 覆盖
  6. 取消关联结构,重新加载 Firebase crashlytics,然后选择新的集成。
desc "Upload any dsyms in the current directory to crashlytics"
lane :upload_dsyms do |options|
  download_dsyms(version: version_number, build_number: build_number)
  upload_symbols_to_crashlytics(gsp_path: "./App/Resources/GoogleService-Info.plist")
  clean_build_artifacts
end

9
投票

对此感兴趣的任何人都可以关注这里的线程:https://github.com/fastlane/fastlane/issues/13096

TL;DR:当你打电话时

upload_symbols_to_crashlytics(gsp_path: "./App/GoogleService-Info.plist")

它将从已安装的 Fabric pod 中调用一个名为

upload_symbols
的二进制文件,看起来像这样:

./Pods/Fabric/upload-symbols -a db4d085462b3cd8e3ac3b50f118e273f077497b0 -gsp ./App/GoogleService-Info.plist -p ios /private/var/folders/x1/x6nqt4997t38zr9x7zwz72kh0000gn/T/d30181115-8238-1fr38bo/D4CE43B9-9350-3FEE-9E71-9E31T39080CD.dSYM

您会注意到它使用 Fabric API 密钥和 GoogleService-Info.plist 路径来调用它。 我不知道为什么,但这会导致它无法上传。 在运行 fastlane 通道之前,您必须暂时从

Info.plist
文件中删除结构配置信息。 (记得重新添加结构配置)。


5
投票

首先,您需要使用

upload_symbols_to_crashlytics
,但在使用它之前,您需要从 App Store Connect 下载 dsym,为此,您应该使用
download_dsyms
以及一些参数
version
build_number
,并且 Fastlane 将询问您的
app_identifier
,因此我建议您使用它来在得到答案之前不要中断构建。

desc "Upload any dsyms in the current directory to Crashlytics of firebase"
lane :upload_dsyms do |options|

  version_number = get_version_number(target: "your_app_target")
  build_number = get_build_number
  download_dsyms(
    app_identifier: "your_app_identifier",
    version: version_number,
    build_number: build_number
  )
  upload_symbols_to_crashlytics(gsp_path: "./your_app_name or your_app_target/another_directroy/GoogleService-Info.plist")
  clean_build_artifacts
end

我的应用程序是

desc "Upload any dsyms in the current directory to Crashlytics of firebase"
lane :upload_dsyms do |options|

  version_number = get_version_number(target: "Movies")
  build_number = get_build_number
  download_dsyms(
    app_identifier: "com.vngrs.Movies.demo",
    version: version_number,
    build_number: build_number
  )
  upload_symbols_to_crashlytics(gsp_path: "./Movies/Resources/GoogleService-Info.plist")
  clean_build_artifacts
end

2
投票

详情

  • Xcode 版本 11.3.1 (11C504)
  • Firebase 工具 7.14.0
  • 快车道2.143.0

解决方案

./fastlane/插件文件

gem 'fastlane-plugin-firebase_app_distribution'

before_all do
    # Update fastlane
    update_fastlane
    # Update fastlane plugins
    sh("fastlane update_plugins")
    # Update firebase tools
    sh("curl -sL firebase.tools | upgrade=true bash")
end

用法1.

从 AppStore 下载 dsyms 并上传到 firebase

download_dsyms(version: '1.0', build_number: '1')
upload_symbols_to_crashlytics(gsp_path: "./App/Environment/production/GoogleService-Info-production.plist")

用法2.

从存档中获取 dsyms(构建后)并上传到 firebase

gym(
    configuration: 'Release',
    scheme: 'MyApp',
    include_bitcode: true
   )
upload_symbols_to_crashlytics(gsp_path: "./App/Environment/production/GoogleService-Info-production.plist")

信息


1
投票

这对我有用。

1。在 Fastfile 上创建新通道

# Fastfile
default_platform(:ios)

# Constants
XCODE_PROJECT = "PROJECT.xcodeproj"
XCODE_WORKSPACE = "PROJECT.xcworkspace"
PRODUCTION_GSP_PATH = "./APP_ROOT/GoogleService-Info.plist"


platform :ios do
  desc "Push a production build to TestFlight"
  lane :upload_crashlytics_prod do 
    download_dsyms(
        version: get_version_number(xcodeproj: XCODE_PROJECT), 
        build_number: get_build_number(xcodeproj: XCODE_PROJECT)
    )
    upload_symbols_to_crashlytics(gsp_path: PRODUCTION_GSP_PATH)
  end
end

2。现在从 shell 脚本或终端调用

fastlane upload_crashlytics_prod

0
投票

这对我有用

  desc "Downlaod and Uplaod dSYMS to Firebase"
  lane :uplaod_dsyms do 
  download_dsyms # This will download all version 
  upload_symbols_to_crashlytics(
      gsp_path: "Path to your google plist",
      binary_path: "./Pods/FirebaseCrashlytics/upload-symbols") # this goes to cocoapods of FirebaseCrashlytics 
  clean_build_artifacts # Delete the local dSYM files 
 end

0
投票

我想帮助其他可能面临这个问题的人。在这种情况下,可能会出现各种问题。我也遇到了类似的问题,但我的问题不同。

问题:如何找出导致问题的原因?

答案:在

upload_symbols_to_crashlytics
通道中,添加
debug: true
选项。这将允许您调试您的问题。就我而言,问题出在连接访问上,我修复了它。

来自亚美尼亚。

© www.soinside.com 2019 - 2024. All rights reserved.