fastlane: upload_symbols_to_crashlytics is reporting success, but Fabric is reporting missing dSYMs

New Issue Checklist

Issue Description

upload_symbols_to_crashlytics is reporting success, but Fabric is reporting missing dSYMs

I’ve read through these, and believe this to be a different issue. If I’m mistaken, I can close this and copy my issue over to one of these:

Other notes:

  • I very recently upgraded to Xcode 8 & Swift 3. Unsure if related
  • Shell command exited with exit status 8 instead of 0 has been there for a while but hasn’t had an adverse effect
Complete output when running fastlane, including the stack trace and command used

You can use: --capture_output as the last commandline argument to get that collected for you

Captured Output

Please see this gist. The output was too big for this ticket

Environment

Please run fastlane env and copy the output below. This will help us help you 👍 If you used --capture_output option please remove this block - as it is already included there.

Adding this here because captured output is in a gist

✅ fastlane environment ✅

Stack

Key Value
OS 10.12.2
Ruby 2.3.0
Bundler? true
Git git version 2.8.1
Installation Source ~/.rvm/gems/ruby-2.3.0/bin/fastlane
Host Mac OS X 10.12.2 (16C68)
Ruby Lib Dir ~/.rvm/rubies/ruby-2.3.0/lib
OpenSSL Version OpenSSL 1.0.2e 3 Dec 2015
Is contained false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 8.2.1

System Locale

Variable Value
LANG en_US.UTF-8
LC_ALL
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md
# can also be listed using the `fastlane actions` command

# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "1.89.0"

default_platform :ios

platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    cocoapods
  end

  desc "Runs all the tests"
  lane :test do
    scan
  end

  desc "Submit a new Beta Build to Apple TestFlight"
  desc "This will also make sure the profile is up to date"
  lane :testflight do
    # match(type: "appstore") # more information: https://codesigning.guide
    gym(scheme: "KidFund") # Build your app - more options available
    pilot

    # sh "your_script.sh"
    # You can also use other beta testing services here (run `fastlane actions`)
  end

  desc "Deploy to Fabric Dev"
  lane :dev do
    update_fastlane
    increment_build_number
    gym(
        scheme: "KidFund",
        configuration: "Dev",
        use_legacy_build_api: true,
        clean: false,
        )
    crashlytics(
        api_token: "####",
        build_secret: "#####"
    )
    upload_symbols_to_crashlytics
    upload_symbols_to_sentry(
      auth_token: '#####',
      org_slug: 'kidfund',
      project_slug: 'qa-app',
    )
  end

  desc "Deploy to Fabric QA"
  lane :qa do
    increment_build_number
    match(
      type: "adhoc",
      app_identifier: "com.kidfund.kidfund1.qa",
      )
    gym(
        scheme: "KidFund",
        configuration: "QA",
        use_legacy_build_api: true,
        clean: false,
        )
    crashlytics(
        api_token: "####",
        build_secret: "###"
    )
    upload_symbols_to_crashlytics(
      api_token: "####",
    )
    sentry_upload_dsym(
      auth_token: '###',
      org_slug: 'kidfund',
      project_slug: 'qa-app',
    )
  end

  desc "Deploy to Fabric Beta"
  lane :beta do
    gym(
        scheme: "KidFund",
        configuration: "Beta",
        use_legacy_build_api: true,
        clean: false,
        )
    crashlytics(
        api_token: "###",
        build_secret: "###"
    )
    upload_symbols_to_crashlytics
  end

  desc "Deploy to Fabric Prod"
  lane :prod do
    #increment_build_number
    match(
      type: "adhoc",
      app_identifier: "com.kidfund.kidfund1",
      )
    gym(
        scheme: "KidFund",
        configuration: "Release",
        use_legacy_build_api: true,
        clean: false,
        )
    crashlytics(
        api_token: "###",
        build_secret: "###"
    )
    upload_symbols_to_crashlytics
  end

  desc "Deploy a new version to the App Store"
  lane :appstore do
    match(
      type: "appstore",
      app_identifier: "com.kidfund.kidfund1",
      )
    # snapshot
    gym(
      scheme: "KidFund",
      configuration: "Release",
      use_legacy_build_api: true,
      configuration: "Release",
    ) # Build your app - more options available
    deliver(
      force: true,
      app_identifier: "com.kidfund.kidfund1",
    )
    # frameit
  end

  # You can define as many lanes as you want

  after_all do |lane|
    # This block is called, only if the executed lane was successful

    # slack(
    #   message: "Successfully deployed new App Update."
    # )
  end

  error do |lane, exception|
    # slack(
    #   message: exception.message,
    #   success: false
    # )
  end
end


# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md

# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer
`./fastlane/Appfile`
app_identifier "com.kidfund.kidfund1" # The bundle identifier of your app
apple_id "tim@kidfund.us" # Your Apple email address

team_id "RY8MZ29XP2"  # Developer Portal Team ID

# you can even provide different app identifiers, Apple IDs and team names per lane:
# More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md

fastlane gems

Gem Version Update-Status
fastlane 2.12.0 ✅ Up-To-Date

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-sentry 0.1.2 ✅ Up-To-Date
Loaded gems
Gem Version
did_you_mean 1.0.0
io-console 0.4.5
CFPropertyList 2.3.5
i18n 0.7.0
json 1.8.6
minitest 5.10.1
thread_safe 0.3.5
tzinfo 1.2.2
activesupport 4.2.7.1
public_suffix 2.0.5
addressable 2.5.0
babosa 1.0.2
bundler 1.12.5
claide 1.0.1
fuzzy_match 2.0.4
nap 1.1.0
cocoapods-core 1.1.1
cocoapods-deintegrate 1.0.1
cocoapods-downloader 1.1.3
cocoapods-plugins 1.0.0
cocoapods-search 1.0.0
cocoapods-stats 1.0.0
netrc 0.7.8
cocoapods-trunk 1.1.2
cocoapods-try 1.1.0
colored 1.2
escape 0.0.4
fourflusher 2.0.1
gh_inspector 1.0.3
molinillo 0.5.4
nanaimo 0.2.3
xcodeproj 1.4.2
cocoapods 1.1.1
redcarpet 3.4.0
cocoapods-acknowledgements 1.1.2
highline 1.7.8
commander 4.4.3
unf_ext 0.0.7.2
unf 0.1.4
domain_name 0.5.20161129
dotenv 2.2.0
excon 0.54.0
multipart-post 2.0.0
faraday 0.11.0
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
faraday_middleware 0.11.0.1
fastimage 2.0.1
jwt 1.5.6
little-plugger 1.1.4
multi_json 1.12.1
logging 2.1.0
memoist 0.15.0
os 0.9.6
signet 0.7.3
googleauth 0.5.1
httpclient 2.8.3
hurley 0.2
mime-types 1.25.1
uber 0.0.15
representable 2.3.0
retriable 2.1.0
google-api-client 0.9.26
mini_magick 4.5.1
multi_xml 0.6.0
plist 3.2.0
rubyzip 1.2.0
security 0.1.3
slack-notifier 1.5.1
terminal-notifier 1.7.1
unicode-display_width 1.1.3
terminal-table 1.7.3
word_wrap 1.0.0
rouge 1.11.1
xcpretty 0.2.4
xcpretty-travis-formatter 0.0.4
rest-client 1.6.9
fastlane-plugin-sentry 0.1.2

generated on: 2017-01-30

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 30 (3 by maintainers)

Most upvoted comments

My situation has been resolved but I think this can be clearer from fastlane’s POV

Issue There is an issue with Fabric < 1.6.9. Upgrading the pod to the latest version fixes this in Sierra

Running upload-symbols by hand revealed an issue with Fabric & Sierra

Pods/Fabric/upload-symbols -a ###### -p ios /Users/timbroder/workspace/kidfund/xcode82/KidFund/KidFund.app.dSYM
Submitting symbols from /Users/timbroder/workspace/kidfund/xcode82/KidFund/KidFund.app.dSYM
error: Optional(Error Domain=com.crashlytics.mac.error-domain.process-dsym Code=4 "This version of OSX is not able to perform the necessary dSYM transformations." UserInfo={NSLocalizedFailureReason=This version of OSX is not able to perform the necessary dSYM transformations.})

Fastlane improvement upload_symbols_to_crashlytics looks like it fails silently if it cannot upload the dSYMs. I think there is a difference between “couldn’t upload this dSYM for X reason” and “cannot upload them at all on this machine”

What do you think? Thanks!

@joshdholtz Sorry for not responding, I have been on vacation. As I can see from the changelogs, this seems to be fixed now. Thank you!

Am seeing this problem with Fabric.
I see it upload all of the dSYMs, and says Successfully uploaded dSYM files to Crashlytics 💯 but their site says they are missing and then I have to drag and drop the zip file of all the dSYMs to their upload page… I ran the upload command with --verbose and nothing seems out-of-the-ordinary.

fastlane v2.86.2 fabric pod version: - Fabric (1.7.6) running macOS High Sierra

I can confirm the problem was fixed for us after updating Fabric from 1.6.12 to 1.6.13

I figured out that the problem was in old Fabric pod or/and Fastlane. After updating all of them, the problem is gone. More details here https://github.com/fastlane/fastlane/issues/9840.

Still getting shell command exited with exit status 8 instead of 0. on upload_symbols_to_crashlytics.

🚫 fastlane environment 🚫

Stack

Key Value
OS 10.13.2
Ruby 2.3.3
Bundler? false
Git git version 2.14.3 (Apple Git-98)
Installation Source /usr/local/bin/fastlane
Host Mac OS X 10.13.2 (17C88)
Ruby Lib Dir /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib
OpenSSL Version LibreSSL 2.2.7
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 9.2

System Locale

Error
No Locale with UTF8 found 🚫

fastlane files:

`./fastlane/Fastfile`
fastlane_version "2.78.0"

default_platform :ios

platform :ios do
  before_all do
    ENV["SLACK_URL"] = "https://hooks.slack.com/services/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"
    ENV["WHOM_TO_NOTIFY"] = "<@sorlas> <@perfilkina> <@ak> <@semyon.belokovsky> <@aminbenarieb> <@U3CRJ9ASJ>"
    ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
  end

  desc "Submit a new Skyeng Production Build to Apple TestFlight"
  lane :skyeng_release do
    configuration = "Release"
    target = "Words"

    setup_jenkins
    inc_build_number(target: target)
    match(
      username: "alevtina.tsoie@gmail.com",
      git_url: "git@github.com:skyeng/words-match-ios.git",
      type: "appstore",
      app_identifier: [
        "com.skyeng.Words",
        "com.skyeng.Words.Words-Widget"
      ],
      force: true,
      keychain_name: ENV["MATCH_KEYCHAIN_NAME"],
      keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"]
    )
    gym(
      scheme: "Words",
      configuration: configuration,
      export_method: 'app-store',
      include_bitcode: true,
      include_symbols: true,
      clean: true,
      skip_build_archive: false
      )
    pilot(
      username: "alevtina.tsoie@gmail.com",
      app_identifier: "com.skyeng.Words",
      skip_submission: true,
      skip_waiting_for_build_processing: false
    )
    commit_version(target: target, configuration: configuration)
    slack_testflight_success(target: target, appname: "skyeng")
  end

  desc "Submit a new Aword Beta Build to Apple TestFlight"
  lane :aword_release do
    configuration = "Release"
    target = "Words External"
    scheme = "Words External"

    setup_jenkins
    inc_build_number(target: target)
    match(
      username: "alevtina.tsoie@gmail.com",
      git_url: "git@github.com:skyeng/words-match-ios.git",
      type: "appstore",
      app_identifier: [
        "com.skyeng.external.Words",
        "com.skyeng.external.Words.Words-Widget"
      ],
      force: true,
      keychain_name: ENV["MATCH_KEYCHAIN_NAME"],
      keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"]
    )
    gym(
      scheme: scheme,
      configuration: configuration,
      export_method: 'app-store',
      include_bitcode: true,
      include_symbols: true,
      clean: true,
      skip_build_archive: false
      )
    pilot(
      username: "alevtina.tsoie@gmail.com",
      app_identifier: "com.skyeng.external.Words",
      skip_submission: true,
      skip_waiting_for_build_processing: false
    )
    commit_version(target: target, configuration: configuration)
    slack_testflight_success(target: target, appname: "aword")
  end

  private_lane :inc_build_number do |options|
    target = options[:target]
    build_number = get_build_number_from_plist(
      xcodeproj: "Words.xcodeproj",
      target: target,
    )
    build_number = (build_number.to_i+1).to_s

    increment_build_number_in_plist(
      build_number: build_number,
      target: target
    )

    target = target + " Development"
    increment_build_number_in_plist(
      build_number: build_number,
      target: target
    )

    target = options[:target] + " Widget"
    increment_build_number_in_plist(
      build_number: build_number,
      target: target
    )

    target = options[:target] + " Development Widget"
    increment_build_number_in_plist(
      build_number: build_number,
      target: target
    )
  end

  private_lane :commit_version do |options|
    target = options[:target]
    configuration = options[:configuration]
    title = target
    title[0] = title[0].capitalize
    build_number = get_build_number_from_plist(
      xcodeproj: "Words.xcodeproj",
      target: target,
      build_configuration_name: configuration
    )
    message = "#{title} #{get_version_number} (#{build_number})"
    tag = "#{title.tr(" ", "_")}_#{get_version_number}_#{build_number}"
    sh("git commit -am \"#{message}\"")
    sh("git tag -a #{tag} -m '#{message}'")
    sh("git push origin --tags")
  end

  private_lane :slack_testflight_success do |options|
    appname = options[:appname]
    target = options[:target]
    title = target
    title[0] = title[0].capitalize
    build_number = get_build_number_from_plist(
      xcodeproj: "Words.xcodeproj",
      target: target
    )
    slack(
      message: ":#{target}: `#{appname.capitalize} #{get_version_number} (#{build_number})` доступен в TestFlight.\n",
      success: true,
      username: "Anutka",
      channel: "mobile",
      default_payloads: [],
      payload: {
        "Built by" => sh("whoami"),
      },
      attachment_properties: {
      fields: [{
        title: "Задачи в билде:",
        value: sh("cat ./#{appname}/tasks.txt")
      },
      {
        title: "Задача для тестирования:",
        value: sh("cat ./#{appname}/task_to_test.txt")
        },
        {value: "#{ENV['WHOM_TO_NOTIFY']}"}]
      }
    )

  end

  lane :refresh_dsyms do |options|
  	app_identifier = options[:app_identifier]
  	download_dsyms(username: "alevtina.tsoie@gmail.com", app_identifier: app_identifier)
  	upload_symbols_to_crashlytics(api_token: "90508fbcbeb733960cd2b286a00a2b5c28cba94e")
  	clean_build_artifacts
  	# ENV["FABRIC_API_KEY"]
  end

  after_all do |lane|
    # This block is called, only if the executed lane was successful

    # slack(
    #   message: "Successfully deployed new App Update."
    # )
  end

  error do |lane, exception|
    # slack(
    #   message: exception.message,
    #   success: false
    # )
  end
end

`./fastlane/Appfile`
for_platform :ios do
  team_id "Z4ZD78V8TY" # Developer Portal Team ID
end

# you can even provide different app identifiers, Apple IDs and team names per lane:
# More information: https://docs.fastlane.tools/advanced/#appfile

fastlane gems

Gem Version Update-Status
fastlane 2.78.0 ✅ Up-To-Date

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-versioning undefined 💥 Check failed
fastlane-plugin-versioning undefined 💥 Check failed
Loaded gems
Gem Version
did_you_mean 1.0.0
slack-notifier 2.3.2
rouge 2.0.7
xcpretty 0.2.8
terminal-notifier 1.8.0
unicode-display_width 1.3.0
terminal-table 1.8.0
plist 3.4.0
multipart-post 2.0.0
word_wrap 1.0.0
public_suffix 2.0.5
tty-screen 0.6.4
tty-cursor 0.5.0
tty-spinner 0.8.0
babosa 1.0.2
colored 1.2
highline 1.7.10
commander-fastlane 4.4.5
excon 0.60.0
faraday 0.13.1
unf_ext 0.0.7.4
unf 0.1.4
domain_name 0.5.20170404
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
fastimage 2.1.1
gh_inspector 1.0.3
mini_magick 4.5.1
multi_json 1.12.2
multi_xml 0.6.0
rubyzip 1.2.1
security 0.1.3
xcpretty-travis-formatter 1.0.0
dotenv 2.2.1
bundler 1.16.1
faraday_middleware 0.12.2
uber 0.1.0
declarative 0.0.10
declarative-option 0.1.0
representable 3.0.4
retriable 3.1.1
addressable 2.5.2
mime-types-data 3.2016.0521
mime-types 3.1
little-plugger 1.1.4
logging 2.2.2
jwt 2.1.0
memoist 0.16.0
os 0.9.6
signet 0.8.1
googleauth 0.6.2
httpclient 2.8.3
google-api-client 0.13.6
io-console 0.4.5
CFPropertyList 2.3.6
libxml-ruby 2.9.0
json 2.1.0
claide 1.0.2
colored2 3.1.2
nanaimo 0.2.3
xcodeproj 1.5.4
psych 2.1.0

generated on: 2018-01-29

Could we get an option to fail the action if crashlytics fails?