fastlane: upload_symbols_to_crashlytics Permission denied - Crashlytics.framework

New Issue Checklist

Issue Description

When trying to run on Jenkins getting this:

[12:16:14]: -------------------------------------------
[12:16:14]: --- Step: upload_symbols_to_crashlytics ---
[12:16:14]: -------------------------------------------
[12:16:14]: Extracting '/Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Binaries/IOS/FutureMobile.dSYM.zip'...
[12:16:14]: $ unzip -qo /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Binaries/IOS/FutureMobile.dSYM.zip
[12:16:15]: Uploading 'FutureMobile.dSYM'...
[12:16:15]: Permission denied - /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Plugins/Crashlytics/Extras/iOS/Crashlytics/iOS/Crashlytics.framework
[12:16:15]: Successfully uploaded dSYM files to Crashlytics 💯

I’ve tried to add sh "cd .. && chmod -R 777 #{submit_path}" before calling action, but no luck.

Jenkins output

Started by user Ruslan K

git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository git config remote.origin.url ssh://git@10.11.36.207:7999/lit/build_config.git # timeout=10 Fetching upstream changes from ssh://git@10.11.36.207:7999/lit/build_config.git git --version # timeout=10 using GIT_SSH to set credentials Jenkins BitBucket No Pass git fetch --tags --progress ssh://git@10.11.36.207:7999/lit/build_config.git +refs/heads/:refs/remotes/origin/ # timeout=200 git rev-parse refs/remotes/origin/ios-dev^{commit} # timeout=10 git rev-parse refs/remotes/origin/refs/heads/ios-dev^{commit} # timeout=10 Checking out Revision 6af141b3798e60625f5bee5ff96fb5c0ff708882 (refs/remotes/origin/ios-dev) git config core.sparsecheckout # timeout=10 git checkout -f 6af141b3798e60625f5bee5ff96fb5c0ff708882 # timeout=200 git rev-list 5abdf53bdeda212de0b5eb4ba3531bfb7b19898a # timeout=10 [Pipeline] node Running on Mac Pro Node in /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe [Pipeline] { [Pipeline] stage [Pipeline] { (Checkout script) [Pipeline] git git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository git config remote.origin.url ssh://git@10.11.36.207:7999/lit/build_config.git # timeout=10 Fetching upstream changes from ssh://git@10.11.36.207:7999/lit/build_config.git git --version # timeout=10 using GIT_SSH to set credentials Jenkins BitBucket No Pass git fetch --tags --progress ssh://git@10.11.36.207:7999/lit/build_config.git +refs/heads/:refs/remotes/origin/ git rev-parse refs/remotes/origin/ios-dev^{commit} # timeout=10 git rev-parse refs/remotes/origin/origin/ios-dev^{commit} # timeout=10 Checking out Revision 6af141b3798e60625f5bee5ff96fb5c0ff708882 (refs/remotes/origin/ios-dev) git config core.sparsecheckout # timeout=10 git checkout -f 6af141b3798e60625f5bee5ff96fb5c0ff708882 git branch -a -v --no-abbrev # timeout=10 git branch -D ios-dev # timeout=10 git checkout -b ios-dev 6af141b3798e60625f5bee5ff96fb5c0ff708882 [Pipeline] load [Pipeline] { (common_jenkinsfile) [Pipeline] } [Pipeline] // load [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Checkout Project) [Pipeline] dir Running in /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT [Pipeline] { [Pipeline] } [Pipeline] // dir [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Environment Setup) [Pipeline] sh [iOS-LiT-Dev-Pipe] Running shell script

  • brew ls --versions imagemagick
  • echo ‘imagemagick is already installed’ imagemagick is already installed [Pipeline] sh [iOS-LiT-Dev-Pipe] Running shell script
  • brew ls --versions node
  • echo ‘node is already installed’ node is already installed [Pipeline] sh [iOS-LiT-Dev-Pipe] Running shell script
  • gem install bundler Bundler and RubyGems.org are free for anyone to use, but maintaining them costs more than $25,000 USD every month. Help us cover those costs so that we can keep the gem ecosystem free for everyone: https://ruby.to/support-bundler Successfully installed bundler-1.14.3 Parsing documentation for bundler-1.14.3 Done installing documentation for bundler after 4 seconds 1 gem installed
  • bundle install --deployment Fetching gem metadata from https://rubygems.org/… Fetching version metadata from https://rubygems.org/… Fetching dependency metadata from https://rubygems.org/. Installing CFPropertyList 2.3.5 Installing i18n 0.8.0 Using json 1.8.6 Using minitest 5.10.1 Using thread_safe 0.3.5 Using public_suffix 2.0.5 Using babosa 1.0.2 Using bundler 1.14.3 Using colored 1.2 Using highline 1.7.8 Installing dotenv 2.2.0 Using excon 0.54.0 Using multipart-post 2.0.0 Using unf_ext 0.0.7.2 Using gh_inspector 1.0.3 Using jwt 1.5.6 Using little-plugger 1.1.4 Using multi_json 1.12.1 Using memoist 0.15.0 Using os 0.9.6 Using httpclient 2.8.3 Using hurley 0.2 Using mime-types-data 3.2016.0521 Using uber 0.0.15 Using retriable 2.1.0 Using mini_magick 4.5.1 Using multi_xml 0.6.0 Using plist 3.2.0 Using rubyzip 1.2.0 Using security 0.1.3 Using slack-notifier 1.5.1 Using terminal-notifier 1.7.1 Using unicode-display_width 1.1.3 Using word_wrap 1.0.0 Using claide 1.0.1 Using nanaimo 0.2.3 Using rouge 1.11.1 Using fastlane-plugin-act 1.0.1 Using tzinfo 1.2.2 Using addressable 2.5.0 Using commander 4.4.3 Using faraday 0.11.0 Using unf 0.1.4 Using logging 2.1.0 Using mime-types 3.1 Using representable 2.3.0 Using fastlane-plugin-appicon 0.4.1 Using terminal-table 1.7.3 Using xcpretty 0.2.4 Using activesupport 4.2.7.1 Using fastimage 2.0.1 Using faraday_middleware 0.11.0.1 Using signet 0.7.3 Using domain_name 0.5.20161129 Using xcpretty-travis-formatter 0.0.4 Using xcodeproj 1.4.2 Using googleauth 0.5.1 Using http-cookie 1.0.3 Installing google-api-client 0.9.26 Using faraday-cookie_jar 0.0.6 Installing fastlane 2.14.2 Using badge 0.7.1 Bundle complete! 5 Gemfile dependencies, 62 gems now installed. Bundled gems are installed into ./vendor/bundle. [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Fastlane Build & Install) [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Upload to Fabric) [Pipeline] sh [iOS-LiT-Dev-Pipe] Running shell script
  • bundle exec fastlane fabric ±------------------------±--------±----------------+ | Used plugins | ±------------------------±--------±----------------+ | Plugin | Version | Action | ±------------------------±--------±----------------+ | fastlane-plugin-appicon | 0.4.1 | android_appicon | | | | appicon | | fastlane-plugin-act | 1.0.1 | act | ±------------------------±--------±----------------+

[12:15:07]: ------------------------------------------------- [12:15:07]: — Step: Verifying required fastlane version — [12:15:07]: ------------------------------------------------- [12:15:07]: Your fastlane version 2.14.2 matches the minimum requirement of 1.108 ✅ [12:15:07]: ------------------------------ [12:15:07]: — Step: default_platform — [12:15:07]: ------------------------------ [12:15:07]: Driving the lane ‘ios fabric’ 🚀 [12:15:07]: ----------------------------------------------------------------------------------------------------------------------------------- [12:15:07]: — Step: cd … && chmod -R 777 LIT/Projects/FutureMobile/Plugins/Crashlytics/Extras/iOS/Crashlytics/iOS/Crashlytics.framework/ — [12:15:07]: ----------------------------------------------------------------------------------------------------------------------------------- [12:15:07]: $ cd … && chmod -R 777 LIT/Projects/FutureMobile/Plugins/Crashlytics/Extras/iOS/Crashlytics/iOS/Crashlytics.framework/ [12:15:07]: -------------------- [12:15:07]: — Step: resign — [12:15:07]: -------------------- /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/vendor/bundle/ruby/2.3.0/gems/fastlane-2.14.2/sigh/lib/assets/resign.sh /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Build/IOS/FutureMobile.ipa CD0260902AD548435FA7DABDCE99DC08AF9C5093 -p /Users/App/Library/MobileDevice/Provisioning\ Profiles/c4b77347-ebd3-4403-bd7f-85bf05333cbd.mobileprovision --use-app-entitlements /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Build/IOS/FutureMobile.ipa Executable=/Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/_floatsignTemp/Payload/FutureMobile.app/FutureMobile _floatsignTemp/Payload/FutureMobile.app: replacing existing signature

[12:15:21]: Successfully signed /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Build/IOS/FutureMobile.ipa! [12:15:21]: Successfully re-signed .ipa 🔏. [12:15:21]: ------------------------- [12:15:21]: — Step: crashlytics — [12:15:21]: ------------------------- [12:15:21]: Uploading the build to Crashlytics Beta. Time for some ☕️. [12:16:14]: Build successfully uploaded to Crashlytics Beta 🌷 [12:16:14]: Visit https://fabric.io/_/beta to add release notes and notify testers. [12:16:14]: ------------------------------------------- [12:16:14]: — Step: upload_symbols_to_crashlytics — [12:16:14]: ------------------------------------------- [12:16:14]: Extracting ‘/Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Binaries/IOS/FutureMobile.dSYM.zip’… [12:16:14]: $ unzip -qo /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Binaries/IOS/FutureMobile.dSYM.zip [12:16:15]: Uploading ‘FutureMobile.dSYM’… [12:16:15]: Permission denied - /Volumes/Jenkins_Support/workspace/iOS-LiT-Dev-Pipe/LIT/Projects/FutureMobile/Plugins/Crashlytics/Extras/iOS/Crashlytics/iOS/Crashlytics.framework [12:16:15]: Successfully uploaded dSYM files to Crashlytics 💯 [12:16:15]: -------------------- [12:16:15]: — Step: rocket — [12:16:15]: --------------------

    ____
   /    \
  |      |
  |      |
  |      |
   \____/
   |    |
   |    |
   |    |
   |____|
  {|    |}
   |    |
   |    |
   | F  |
   | A  |
   | S  |
   | T  |
   | L  |
   | A  |
  /| N  |\
  || E  ||
  ||    ||
  \|____|/
   /_\/_\
   ######
  ########
   ######
    ####
    ####
     ##
     ##
     ##
     ##

±-----±--------------------------------------------------------------±------------+ | fastlane summary | ±-----±--------------------------------------------------------------±------------+ | Step | Action | Time (in s) | ±-----±--------------------------------------------------------------±------------+ | 1 | Verifying required fastlane version | 0 | | 2 | default_platform | 0 | | 3 | cd … && chmod -R 777 LIT/Projects/FutureMobile/Plugins/Crash | 0 | | 4 | resign | 13 | | 5 | crashlytics | 52 | | 6 | upload_symbols_to_crashlytics | 0 | | 7 | rocket | 0 | ±-----±--------------------------------------------------------------±------------+

[12:16:15]: fastlane.tools finished successfully 🎉 [Pipeline] } [Pipeline] // stage [Pipeline] step Archiving artifacts Recording fingerprints [Pipeline] step Recording test results [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS

Environment

🚫 fastlane environment 🚫

Stack

Key Value
OS 10.12.2
Ruby 2.3.1
Bundler? true
Git git version 2.10.1
Installation Source /usr/local/bin/fastlane
Host Mac OS X 10.12.2 (16C67)
Ruby Lib Dir /usr/local/Cellar/ruby/2.3.1_2/lib
OpenSSL Version OpenSSL 1.0.2j 26 Sep 2016
Is contained false
Is homebrew false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 8.2.1

System Locale

Error
No Locale with UTF8 found 🚫

fastlane files:

`./fastlane/Fastfile`
# 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.108"

default_platform :ios

platform :ios do
  before_all do
    ENV['ROOT_PATH'] = File.dirname(Dir.pwd) # sh("dirname $PWD").rstrip
    ENV['SLACK_URL'] = 'https://hooks.slack.com/services/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'
  end

  skip_docs

  desc "Build for test & deliver to Fabric"
  lane :build_for_test do |options|

    # ensure_git_branch(branch: "develop")
    check_build_options(options)

    ENV['MATCH_APP_IDENTIFIER'] = 'com.futuregroup.futureuniverse.test'
    match_with_context(type: "development", force_for_new_devices: true)

    options[:shipping] = false
    build(options)

    shield = "DEV-#{options[:version]}(#{options[:build]})-blue"
    icon(
      shield: shield,
      distribution: false
    )

    fabric(
      groups: "qa-1,managers,dev"
      )

    slack(
      message: "New iOS-LiT-TEST #{options[:version]}(#{options[:build]}) is available on Fabric 🔬",
      channel: "new_builds",
      success: true
    )

  end

  desc "Build pull request and try to run it on connected device via USB. Pass feature name as 'build'"
  lane :build_pr do |options|

    check_build_options(options)

    ENV['MATCH_APP_IDENTIFIER'] = "*"
    match_with_context(type: "development", force_for_new_devices: true)

    pr_name = feature_name()
    raise "Can't get PR name" unless pr_name
    UI.message "PR name is #{pr_name} 🔮"

    ENV['MATCH_APP_IDENTIFIER'] = "com.futuregroup.futureuniverse.#{pr_name}"
    options[:shipping] = false
    build(options)

    shield = "pr-#{pr_name}-orange"
    icon(
      shield: shield,
      distribution: false
    )
    resign(
      signing_identity: ENV['CERT'],
      use_app_entitlements: true
    )
    deploy_on_local_device
  end

  def feature_name
    # name = git_branch
    name = ENV['JOB_NAME'] if name.nil? || name.empty?
    name = "UNKNOWN_FEATURE" if name.nil? || name.empty?
    File.basename(name.gsub("%2F", "/"))
  end

  desc "Build for stage & deliver to Fabric"
  lane :build_for_stage do |options|

    # ensure_git_branch(branch: "stage")

    check_build_options(options)

    ENV['MATCH_APP_IDENTIFIER'] = 'com.futuregroup.futureuniverse' # add .stage
    match_with_context(type: "adhoc", force_for_new_devices: true)

    options[:shipping] = true
    build(options)
    icon(distribution: true)
    fabric

    slack(
      message: "New iOS-LiT-STAGE #{options[:version]}(#{options[:build]}) is available on Fabric 🚀",
      channel: "new_builds",
      success: true
    )

  end

  desc "Build for beta & deliver to TestFlight"
  lane :build_for_beta do |options|

    # ensure_git_branch(branch: "stage")

    check_build_options(options)

    ENV['MATCH_APP_IDENTIFIER'] = 'com.futuregroup.futureuniverse'
    match_with_context(type: "appstore")

    options[:shipping] = true
    build(options)
    icon(distribution: true)
    beta

    slack(
      message: "New iOS-LiT-BETA #{options[:version]}(#{options[:build]}) is available on TestFlight ✈️",
      channel: "new_builds",
      success: true
    )

  end

  desc "Build for dev"
  lane :build_for_dev do |options|

    # ensure_git_branch(branch: "stage")

    check_build_options(options)

    ENV['MATCH_APP_IDENTIFIER'] = 'com.futuregroup.futureuniverse.dev'
    match_with_context(type: "development")

    sh "cd .. && ruby configure.rb dev #{ENV['BUILD_NUMBER']} LIT"
    build(options)
    icon(distribution: false)

    write_env
    #
    # slack(
    #   message: "New iOS-LiT-BETA #{options[:version]}(#{options[:build]}) is available on TestFlight ✈️",
    #   channel: "new_builds",
    #   success: true
    # )

  end

  desc "Match that sets up Lane_context. Call separately for different types."
  lane :match_with_context do |options|
    if is_ci?
      unlock_keychain(
        path: "login",
        password: "tfg2015"
      )
    end

    # Might fail
    begin
      register_devices(devices_file: "fastlane/devices.txt")
    rescue => ex
      UI.error(ex)
    end

    type = options[:type]
    case type
    match(options)

    ENV['PROVISIONING'] = ENV["sigh_#{ENV['MATCH_APP_IDENTIFIER']}_" + type] + '.mobileprovision'
    Actions.lane_context[SharedValues::SIGH_UUID] = ENV["sigh_#{ENV['MATCH_APP_IDENTIFIER']}_" + type]
    Actions.lane_context[SharedValues::SIGH_PROFILE_PATH] =
      File.expand_path(File.join("~/Library/MobileDevice/Provisioning Profiles/", ENV['PROVISIONING']))
    ENV['PROVISIONING_PATH'] = Actions.lane_context[SharedValues::SIGH_PROFILE_PATH]

    ENV['CERT'] = type == "development" ? 'iPhone Developer: Hans Svilosen (RDGBAA364X)'
                                         : 'iPhone Distribution: The Future Group AS (4TM2DK894Y)'
    Actions.lane_context[SharedValues::CERT_CERTIFICATE_ID] = ENV['CERT']

    # Mirror profiles & settings to config
    file = File.join(ENV['FULL_PROJECT_PATH'], "Config/DefaultEngine.ini")
    file_content = File.read(file)
    file_content = file_content.gsub(/MobileProvision=.*/, "MobileProvision=#{ENV['PROVISIONING']}")
    file_content = file_content.gsub(/SigningCertificate=.*/, "SigningCertificate=#{ENV['CERT']}")
    File.open(file, 'w') { |file| file.write(file_content) }

    copy_artifacts(
      target_path: "artifacts",
      artifacts: [Actions.lane_context[SharedValues::SIGH_PROFILE_PATH]],
      keep_original: true
    )

  end

  desc "Checks build options"
  private_lane :check_build_options do |options|
    raise "Missing build: use :build parameter" unless options[:build]
    raise "Missing engine_path: use :engine_path parameter" unless options[:engine_path]
    raise "Missing project_path: use :project_path parameter" unless options[:project_path]

    ENV['PROJECT_PATH'] = options[:project_path]
    ENV['FULL_PROJECT_PATH'] = File.join(ENV['ROOT_PATH'], ENV['PROJECT_PATH'])
  end

  desc "Setup environment & build"
  private_lane :build do |options|
    ENV['ENGINE_PATH'] = options[:engine_path]

    copy_artifacts(
      target_path: "artifacts",
      artifacts: [File.join(ENV['FULL_PROJECT_PATH'], "/Config/DefaultEngine.ini"),
                  File.join(ENV['FULL_PROJECT_PATH'], "/build_config.json"),
                  File.join(ENV['FULL_PROJECT_PATH'], "/Source/FutureMobile/Webapi.h"),
                  File.join(ENV['FULL_PROJECT_PATH'], "/Plugins/Pushbots/Source/Pushbots/values.xml"),
                  File.join(ENV['FULL_PROJECT_PATH'], "/Source/SocketModule/Public/SocketClient.h")],
      keep_original: true
    )

    sh "./Build_iOS.sh #{(options[:shipping] == true ? 'true' : 'false')} #{options[:project_path]}"

    Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] =
      File.join(ENV['FULL_PROJECT_PATH'], "/Build/IOS/",
                (options[:shipping] ? "Distro_FutureMobile-IOS-Shipping.ipa" : "FutureMobile.ipa"))
    ENV['IPA_OUTPUT_PATH'] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]

    Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] =
      File.join(ENV['FULL_PROJECT_PATH'], "/Binaries/IOS/",
                (options[:shipping] ? "FutureMobile-IOS-Shipping.dSYM.zip" : "FutureMobile.dSYM.zip"))
    ENV['DSYM_OUTPUT_PATH'] = Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]

    copy_artifacts(
      target_path: "artifacts",
      artifacts: [Actions.lane_context[SharedValues::IPA_OUTPUT_PATH], Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]],
      keep_original: true
    )

  end

  desc "Write env to file"
  lane :write_env do |options|
    File.open(".env", "w") do |file|
      file.truncate(0)
      file.write("PROJECT_PATH=\"#{ENV['PROJECT_PATH']}\"\n")
      file.write("FULL_PROJECT_PATH=\"#{ENV['FULL_PROJECT_PATH']}\"\n")
      file.write("CERT=\"#{ENV['CERT']}\"\n")
      file.write("PROVISIONING=\"#{ENV['PROVISIONING']}\"\n")
      file.write("PROVISIONING_PATH=\"#{ENV['PROVISIONING_PATH']}\"\n")
      file.write("DSYM_OUTPUT_PATH=\"#{ENV['DSYM_OUTPUT_PATH']}\"\n")
      file.write("IPA_OUTPUT_PATH=\"#{ENV['IPA_OUTPUT_PATH']}\"\n")
    end
    copy_artifacts(
      target_path: "artifacts",
      artifacts: "fastlane/.env",
      keep_original: true
    )
  end

  # desc "Setup environment & build"
  # private_lane :build_assets do |options|
  #   # sh('git fetch --tags')
  #   # last_git_tag
  #   ENV['BUNDLE_DISPLAY_NAME'] = options[:shipping] ? 'Lost in Time' : 'LiT Dev'
  #   ENV['VERSION'] = options[:version]
  #   ENV['BUILD'] = options[:build]
  #   ENV['ENGINE_PATH'] = options[:engine_path]
  #
  #   sh "./Build_iOS_Assets.sh " + (options[:shipping] == true ? 'true' : 'false') + " " + options[:project_path]
  #   Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = ENV['ROOT_PATH'] + "/" + ENV['PROJECT_PATH'] + "/Build/IOS/" +
  #    + (options[:shipping] ? "Distro_FutureMobile-IOS-Shipping.ipa" : "FutureMobile.ipa")
  #   Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] = ENV['ROOT_PATH'] + "/" + ENV['PROJECT_PATH'] + "/Binaries/IOS/" +
  #    + (options[:shipping] ? "FutureMobile-IOS-Shipping.dSYM" : "FutureMobile.dSYM")
  #
  # end

  desc "Submit a new Beta Build to Apple TestFlight"
  lane :beta do |options|
    inject_dsym
    # pem(
    #   save_private_key: true,
    #   new_profile: proc do |profile_path| # this block gets called when a new profile was generated
    #     UI.message profile_path # the absolute path to the new PEM file
    #     # insert the code to upload the PEM file to the server
    #   end
    # )
    resign(
      signing_identity: ENV['CERT'],
      use_app_entitlements: true
    )
    pilot(
      skip_submission: true,
      skip_waiting_for_build_processing: true
    )
    rocket
  end

  desc "Resigns app with correct entitlements from profile for AdHoc, upload ipa & dsym to Fabric"
  lane :fabric do |options|
    submit_path = File.join(ENV['PROJECT_PATH'], "/Plugins/Crashlytics/Extras/iOS/Crashlytics/iOS/Crashlytics.framework/")
    # sh "chmod +x #{File.join(submit_path, "uploadDSYM")}"
    sh "cd .. && chmod -R 777 #{submit_path}"

    resign(
      ipa: ENV['IPA_OUTPUT_PATH'],
      provisioning_profile: ENV['PROVISIONING_PATH'],
      signing_identity: ENV['CERT'],
      use_app_entitlements: true
    )
    crashlytics(
      ipa_path: ENV['IPA_OUTPUT_PATH'],
      crashlytics_path: submit_path, # path to your Crashlytics submit binary.
      api_token: ENV['CRASHLYTICS_API_TOKEN'] || "87192f9ac8a78692bbfb1140b8e239c318c1539e",
      build_secret: ENV['CRASHLYTICS_BUILD_SECRET'] || "dad43aa5088ca2554dbe718797cdb2173bf32b072fef10056805443c72a91ae0",
      groups: options[:groups],
      notifications: false
    )
    upload_symbols_to_crashlytics(
      binary_path: submit_path,
      dsym_path: ENV['DSYM_OUTPUT_PATH']
    )
    rocket
  end

  desc "Generate icon from source, add badge optionally"
  private_lane :icon do |options|
    path = "Build/IOS"
    appicon(
      appicon_image_file: options[:distribution] ? "fastlane/icon_source.png" : "fastlane/icon_dev.png",
      appicon_path: path,
      appicon_devices: [:ipad, :iphone]
    )
    if options[:shield]
      badge(
        path: path,
        shield: options[:shield],
        shield_no_resize: false,
        no_badge: true
      )
    end
    ipa_path = File.expand_path(Actions.lane_context[SharedValues::IPA_OUTPUT_PATH])
    act(
      ipa: ipa_path,
      app_name: "FutureMobile.app",
      iconset: File.join(path, "/AppIcon.appiconset")
    )
  end

  desc "Install new build on connected device"
  lane :deploy_on_local_device do |options|
    sh "npm install -g ios-deploy"
    ipa_path = File.expand_path(Actions.lane_context[SharedValues::IPA_OUTPUT_PATH])
    install_on_device(
      ipa: ipa_path
    )
  end

  desc "Inject .DSYM into existing .ipa"
  private_lane :inject_dsym do
    ipa_path = File.expand_path(Actions.lane_context[SharedValues::IPA_OUTPUT_PATH])
    raise "Missing ipa path" unless ipa_path

    app_name = File.basename(ipa_path, ".ipa")
    folder_path = File.dirname(ipa_path)

    Dir.mktmpdir do |dir|
      app_binary = File.join(dir, "Payload", "#{app_name}.app", app_name)
      symbols = File.join(dir, "Symbols")

      Actions.sh "unzip \"#{ipa_path}\" -d \"#{dir}\""
      Actions.sh "mkdir \"#{symbols}\""
      Actions.sh "xcrun symbols -noTextInSOD -noDaemon -arch all -symbolsPackageDir \"#{symbols}\" \"#{app_binary}\""

      all_folders = Dir.glob(File.join(dir, "*")).map { |f| "\"#{File.basename(f)}\"" }.join(" ")

      Actions.sh "cd \"#{dir}\" && zip -r \"#{ipa_path}\" #{all_folders}"
    end
  end

  error do |lane, exception|
    # if is_ci?
    #   slack(
    #     message: exception.message,
    #     channel: "new_builds",
    #     success: false
    #   )
    # end

  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.futuregroup.futureuniverse" # The bundle identifier of your app
apple_id "developer@futureuniverse.com" # Your Apple email address

#team_id "4TM2DK894Y"  # 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.14.2 ✅ Up-To-Date

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-appicon 0.4.1 ✅ Up-To-Date
fastlane-plugin-act 1.0.1 ✅ Up-To-Date
Loaded gems
Gem Version
did_you_mean 1.0.0
bundler 1.13.6
io-console 0.4.5
CFPropertyList 2.3.5
i18n 0.8.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
fastimage 2.0.1
colored 1.2
highline 1.7.8
commander 4.4.3
dotenv 2.2.0
excon 0.54.0
multipart-post 2.0.0
faraday 0.11.0
unf_ext 0.0.7.2
unf 0.1.4
domain_name 0.5.20161129
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
faraday_middleware 0.11.0.1
gh_inspector 1.0.3
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-data 3.2016.0521
mime-types 3.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
claide 1.0.1
nanaimo 0.2.3
xcodeproj 1.4.2
rouge 1.11.1
xcpretty 0.2.4
xcpretty-travis-formatter 0.0.4
badge 0.7.1
fastlane-plugin-act 1.0.1
fastlane-plugin-appicon 0.4.1

generated on: 2017-02-06

About this issue

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

Most upvoted comments

It seems like this issue might be related to code signing 🚫

Have you seen our new Code Signing Troubleshooting Guide? It will help you resolve the most common code signing issues 👍