fastlane: Error [IMG_BAD_COLOR_SPACE] on RGB image

New Issue Checklist

Issue Description

fastlane stops with error [IMG_BAD_COLOR_SPACE] This does not use RGB color space. even tho image uses RGB color space.

image meta info:

Complete output when running fastlane, including the stack trace and command used
...
  • bundle exec fastlane qa --env=***** ±------------------------------------------------±--------±-----------------------------------+ | Used plugins | ±------------------------------------------------±--------±-----------------------------------+ | Plugin | Version | Action | ±------------------------------------------------±--------±-----------------------------------+ | fastlane-plugin-cordova | 2.2.1 | cordova | | fastlane-plugin-versioning | 0.3.4 | get_version_number_from_git_branch | | | | get_version_number_from_plist | | | | get_build_number_from_plist | | | | ci_build_number | | | | increment_version_number_in_plist | | | | get_app_store_version_number | | | | get_info_plist_path | | | | increment_build_number_in_plist | | fastlane-plugin-appicon | 0.13.0 | android_appicon | | | | appicon | | fastlane-plugin-badge | 1.1.0 | add_badge | | fastlane-plugin-increment_version_code | 0.4.3 | increment_version_code | | fastlane-plugin-upgrade_super_old_xcode_project | 0.0.2 | upgrade_super_old_xcode_project | | fastlane-plugin-xml_editor | 0.2.0 | xml_editor | | | | xml_add | | | | xml_remove | | | | xml_set_attribute | ±------------------------------------------------±--------±-----------------------------------+

[11:09:19]: ------------------------------ [11:09:19]: — Step: default_platform — [11:09:19]: ------------------------------ [11:09:19]: Loading from './fastlane/.env.' [11:09:19]: Driving the lane ‘ios qa’ 🚀 [11:09:19]: Build started by: ***** [11:09:19]: ------------------------------------------ [11:09:19]: — Step: Switch to ios build_ios lane — [11:09:19]: ------------------------------------------ [11:09:19]: Cruising over to lane ‘ios build_ios’ 🚖 [11:09:19]: ----------------------------------- [11:09:19]: — Step: clean_build_artifacts — [11:09:19]: ----------------------------------- [11:09:19]: Cleaned up build artifacts 🐙 [11:09:19]: -------------------------------- [11:09:19]: — Step: clear_derived_data — [11:09:19]: -------------------------------- [11:09:19]: Derived Data path located at: /Users//Library/Developer/Xcode/DerivedData [11:09:20]: Successfully cleared Derived Data ♻️ [11:09:20]: ---------------------------------------------------- [11:09:20]: — Step: rm -f ./.ipa || true — [11:09:20]: ---------------------------------------------------- [11:09:20]: $ rm -f ./.ipa || true [11:09:20]: ++++++++++++++++++++ BUILDING WITH CONFIG ++++++++++++++++++++ [11:09:20]: ***** ***** [11:09:20]: iPhone Developer [11:09:20]: ***** [11:09:20]: @.com [11:09:20]: com.. [11:09:20]: app-store [11:09:20]: appstore [11:09:20]: [11:09:20]: false [11:09:20]: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [11:09:20]: ------------------------------ [11:09:20]: — Step: register_devices — [11:09:20]: ------------------------------ [11:09:22]: Fetching list of currently registered devices… [11:09:22]: Successfully registered new devices. [11:09:22]: -------------------------------------------------------------------- [11:09:22]: Step: webpack -p --stage=production***** --platform=ios --cordova --root [11:09:22]: -------------------------------------------------------------------- [11:09:22]: $ webpack -p --stage=production***** --platform=ios --cordova --root

±----------------------±-----------------------------+ | Summary for UpgradeSuperOldXcodeProjectAction | ±----------------------±-----------------------------+ | path | platforms/ios/*****.xcodeproj | | team_id | ***** | | use_automatic_signing | false | ±----------------------±-----------------------------+

[11:14:47]: Upgrading Xcode project if necessary [11:14:47]: Xcode project seems to be a very old project file format [11:14:47]: Upgrading project to use Xcode8 signing [11:14:47]: -------------------------------------------------------------------- [11:14:47]: Step: coffee res/merge-plugins.coffee platforms/ios/platform_www/cordova.js platforms/ios/platform_www/cordova_plugins.js res/cordova-ios-all.js [11:14:47]: -------------------------------------------------------------------- [11:14:47]: $ coffee res/merge-plugins.coffee platforms/ios/platform_www/cordova.js platforms/ios/platform_www/cordova_plugins.js res/cordova-ios-all.js [11:14:47]: -------------------------------------------------------------------- [11:14:47]: Step: cp res/cordova-ios-all.js platforms/ios/www/cordova.js [11:14:47]: -------------------------------------------------------------------- [11:14:47]: $ cp res/cordova-ios-all.js platforms/ios/www/cordova.js [11:14:47]: setting build number to: 13 [11:14:47]: --------------------------------------------- [11:14:47]: — Step: increment_build_number_in_plist — [11:14:47]: --------------------------------------------- [11:14:47]: $ xcodebuild -showBuildSettings -scheme ***** -project platforms/ios/.xcodeproj [11:14:50]: ----------------------------------------------- [11:14:50]: — Step: increment_version_number_in_plist — [11:14:50]: ----------------------------------------------- [11:14:50]: ----------------------------------- [11:14:50]: — Step: update_app_identifier — [11:14:50]: ----------------------------------- [11:14:50]: Updated /-Info.plist 💾. [11:14:50]: ------------------------------- [11:14:50]: — Step: update_info_plist — [11:14:50]: ------------------------------- [11:14:50]: Updated platforms/ios/.xcodeproj/…//-Info.plist 💾. [11:14:50]: --------------------- [11:14:50]: — Step: appicon — [11:14:50]: --------------------- [11:14:51]: Successfully stored app icon at 'platforms/ios/*****/Images.xcassets/AppIcon.appiconset’ [11:14:51]: --------------------- [11:14:51]: — Step: produce — [11:14:51]: ---------------------

±-----------------------------------±----------------------------+ | Summary for produce 2.107.0 | ±-----------------------------------±----------------------------+ | username | @.com | | app_identifier | com.. | | app_name | ***** ***** | | language | English | | app_version | 4.1.0 | | team_id | ***** | | skip_itc | false | | skip_devcenter | false | | enable_*****s.app_group | off | | enable_*****s.apple_pay | off | | enable_*****s.associated_domains | off | | enable_*****s.data_protection | until_first_auth | | enable_*****s.health_kit | off | | enable_*****s.home_kit | off | | enable_*****s.wireless_accessory | off | | enable_*****s.icloud | cloudkit | | enable_*****s.inter_app_*****o | off | | enable_*****s.passbook | off | | enable_*****s.push_notification | on | | enable_*****s.siri_kit | off | | enable_*****s.vpn_configuration | off | | sku | ***** | | platform | ios | ±-----------------------------------±----------------------------+

[11:14:53]: [DevCenter] App ‘com..’ already exists, nothing to do on the Dev Center [11:14:56]: App ‘com..’ already exists (*****), nothing to do on App Store Connect [11:14:56]: ----------------- [11:14:56]: — Step: pem — [11:14:56]: -----------------

±------------------±----------------------------+ | Summary for PEM 2.107.0 | ±------------------±----------------------------+ | app_identifier | com.. | | save_private_key | true | | team_id | ***** | | development | false | | generate_p12 | true | | active_days_limit | 30 | | force | false | | username | @.com | | output_path | . | ±------------------±----------------------------+

[11:14:56]: Starting login with user ‘@.com’ [11:14:57]: Successfully logged in [11:14:58]: Existing push notification profile for ‘com..’ is valid for 238 more days. [11:14:58]: You already have a push certificate, which is active for more than 30 more days. No need to create a new one [11:14:58]: If you still want to create a new one, use the --force option when running PEM. [11:14:58]: ------------------- [11:14:58]: — Step: match — [11:14:58]: -------------------

±----------------------±-----------------------------------------------------+ | Summary for match 2.107.0 | ±----------------------±-----------------------------------------------------+ | username | @.com | | git_url | https://repo..com/git/.git | | app_identifier | [“com..”] | | type | appstore | | team_id | ***** | | force_for_new_devices | true | | force | true | | verbose | true | | git_branch | master | | storage_mode | git | | keychain_name | login.keychain | | readonly | false | | skip_confirmation | false | | shallow_clone | false | | clone_branch_directly | false | | skip_docs | false | | platform | ios | ±----------------------±-----------------------------------------------------+

±------------------±-----------------------------------------------------+ | Installed Certificate | ±------------------±-----------------------------------------------------+ | User ID | ***** | | Common Name | iPhone Distribution: ***** ***** (*****) | | Organisation Unit | ***** | | Organisation | ***** ***** | | Country | US | | Start Datetime | 2018-08-23 07:22:58 UTC | | End Datetime | 2019-08-23 07:22:58 UTC | ±------------------±-----------------------------------------------------+

WARN [2018-11-02 11:15:03.07]: Warning: force_for_new_devices is set but is ignored for App Store provisioning profiles. WARN [2018-11-02 11:15:03.07]: You can safely stop specifying force_for_new_devices when running Match for type ‘appstore’. Successfully loaded Appfile at path '/private/var//workspace/_iOS_Production_Build_UC/*****/fastlane/Appfile’

  • json_key_file: ‘res/supply-*****-account.json’
  • package_name: ‘com.*****.client.consumer’
  • apple_id: ‘*****@*****.com’
  • team_id: ‘*****’

±------------------------------------±-------------------------------------------+ | Summary for sigh 2.107.0 | ±------------------------------------±-------------------------------------------+ | app_identifier | com.. | | username | @.com | | force | true | | cert_id | ***** | | provisioning_name | match AppStore com.. | | ignore_profiles_with_different_name | true | | team_id | ***** | | platform | ios | | adhoc | false | | development | false | | skip_install | false | | skip_fetch_profiles | false | | skip_certificate_verification | false | | readonly | false | ±------------------------------------±-------------------------------------------+

±--------------------±-------------------------------------------------------±---------------------------------------------------------------------------------------------------------------------+ | Installed Provisioning Profile | ±--------------------±-------------------------------------------------------±---------------------------------------------------------------------------------------------------------------------+ | Parameter | Environment Variable | Value | ±--------------------±-------------------------------------------------------±---------------------------------------------------------------------------------------------------------------------+ | App Identifier | | com.. | | Type | | appstore | | Platform | | ios | | Profile UUID | sigh_com.._appstore | 3133bc43-0f14-42bc-ac55-0277dd3f2605 | | Profile Name | sigh_com.._appstore_profile-name | match AppStore com.. | | Profile Path | sigh_com.._appstore_profile-path | /Users/*****/Library/Device/Provisioning Profiles/3133bc43-0f14-42bc-ac55-0277dd3f2605.provision | | Development Team ID | sigh_com.._appstore_team-id | ***** | ±--------------------±-------------------------------------------------------±---------------------------------------------------------------------------------------------------------------------+

INFO [2018-11-02 11:15:16.93]: All required keys, certificates and provisioning profiles are installed 🙌 INFO [2018-11-02 11:15:16.93]: Setting Provisioning Profile type to ‘app-store’ INFO [2018-11-02 11:15:16.94]: ------------------------------------ INFO [2018-11-02 11:15:16.94]: — Step: automatic_code_signing — INFO [2018-11-02 11:15:16.94]: ------------------------------------

±----------------------±-----------------------------+ | Summary for Automatic Codesigning | ±----------------------±-----------------------------+ | path | platforms/ios/*****.xcodeproj | | team_id | ***** | | use_automatic_signing | true | | code_sign_identity | iPhone Developer | ±----------------------±-----------------------------+

INFO [2018-11-02 11:15:17.04]: Updating the Automatic Codesigning flag to enabled for the given project ‘/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/.xcodeproj/project.pbxproj’ WARN [2018-11-02 11:15:17.04]: Set Team id to: ***** for target:  WARN [2018-11-02 11:15:17.04]: Set Code Sign identity to: iPhone Developer for target:  INFO [2018-11-02 11:15:17.12]: Successfully updated project settings to use Code Sign Style = 'Automatic’ INFO [2018-11-02 11:15:17.12]: Modified Targets: INFO [2018-11-02 11:15:17.12]:  *  INFO [2018-11-02 11:15:17.13]: ----------------- INFO [2018-11-02 11:15:17.13]: — Step: gym — INFO [2018-11-02 11:15:17.13]: ----------------- DEBUG [2018-11-02 11:15:17.15]: Merging provisioning profile mappings DEBUG [2018-11-02 11:15:17.15]: ------------------------------------- DEBUG [2018-11-02 11:15:17.15]: Primary provisioning profile mapping: DEBUG [2018-11-02 11:15:17.15]: {} DEBUG [2018-11-02 11:15:17.15]: Secondary provisioning profile mapping: DEBUG [2018-11-02 11:15:17.15]: {:"com.."=>"match AppStore com.."} DEBUG [2018-11-02 11:15:17.15]: Resulting in the following mapping: DEBUG [2018-11-02 11:15:17.15]: {:"com.."=>"match AppStore com.."} INFO [2018-11-02 11:15:17.16]: $ xcodebuild -showBuildSettings -workspace platforms/ios/.xcworkspace -scheme  DEBUG [2018-11-02 11:15:20.16]: Parsing project file '/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/.xcodeproj’ to find selected provisioning profiles DEBUG [2018-11-02 11:15:20.16]: Finding provision profiles for ‘Release’ DEBUG [2018-11-02 11:15:20.26]: Merging provisioning profile mappings DEBUG [2018-11-02 11:15:20.26]: ------------------------------------- DEBUG [2018-11-02 11:15:20.26]: Primary provisioning profile mapping: DEBUG [2018-11-02 11:15:20.26]: {:"com.."=>"match AppStore com.."} DEBUG [2018-11-02 11:15:20.26]: Secondary provisioning profile mapping: DEBUG [2018-11-02 11:15:20.26]: {} DEBUG [2018-11-02 11:15:20.26]: Resulting in the following mapping: DEBUG [2018-11-02 11:15:20.26]: {:"com.."=>"match AppStore com.."} INFO [2018-11-02 11:15:20.26]: Detected provisioning profile mapping: {:"com.."=>"match AppStore com..*****"}

±----------------------------------------------------------------±-------------------------------------------+ | Summary for gym 2.107.0 | ±----------------------------------------------------------------±-------------------------------------------+ | export_team_id | ***** | | include_bitcode | false | | workspace | platforms/ios/.xcworkspace | | scheme | ***** | | export_method | app-store | | export_xcargs | -allowProvisioningUpdates | | output_name | ***** | | output_directory | platforms/ios/build/ | | build_path | platforms/ios/build/ | | xcargs | -allowProvisioningUpdates | | clean | true | | export_options.provisioningProfiles.com..***** | match AppStore com.. | | destination | generic/platform=iOS | | silent | false | | skip_package_ipa | false | | result_bundle | false | | buildlog_path | ~/Library/Logs/gym | | skip_profile_detection | false | | xcode_path | /Applications/Xcode.app | ±----------------------------------------------------------------±-------------------------------------------+

±------------------------------------------------------------------------------------±---------------------+ | Generated Build Command | ±------------------------------------------------------------------------------------±---------------------+ | Option | Value | ±------------------------------------------------------------------------------------±---------------------+ | set -o pipefail && | | | xcodebuild | | | -workspace platforms/ios/.xcworkspace | | | -scheme ***** | | | -destination | generic/platform=iOS | | -archivePath platforms/ios/build/\ 2018-11-02\ 11.15.20.xcarchive | | | -allowProvisioningUpdates | | | clean | | | archive | | | | tee /Users//Library/Logs/gym/-*****.log | | | | xcpretty | | ±------------------------------------------------------------------------------------±---------------------+

INFO [2018-11-02 11:16:46.12]: â–¸ ----------------------------------------- ±---------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------------------------------------------------------------+ | Generated Package Command | ±---------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------------------------------------------------------------+ | Option | Value | ±---------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------------------------------------------------------------+ | /usr/bin/xcrun /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive | | | -exportOptionsPlist | /var/folders/7q//T/gym_config20181102--122nxdn.plist | | -archivePath platforms/ios/build/\ 2018-11-02\ 11.15.20.xcarchive | | | -exportPath | /var/folders/7q//T/gym_output20181102--15sd5w0 | | -allowProvisioningUpdates | | | -allowProvisioningUpdates | | ±---------------------------------------------------------------------------------------------------------------------------------------------±----------------------------------------------------------------------------------------+ INFO [2018-11-02 11:16:46.13]: $ /usr/bin/xcrun /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/7q//T/gym_config20181102--122nxdn.plist’ -archivePath platforms/ios/build/\ 2018-11-02\ 11.15.20.xcarchive -exportPath ‘/var/folders/7q//T/gym_output20181102--15sd5w0’ -allowProvisioningUpdates -allowProvisioningUpdates  INFO [2018-11-02 11:16:46.15]: â–¸ RVM detected, forcing to use system ruby INFO [2018-11-02 11:16:46.73]: â–¸ Now using system ruby. INFO [2018-11-02 11:16:46.78]: â–¸ + xcodebuild -exportArchive -exportOptionsPlist /var/folders/7q//T/gym_config20181102--122nxdn.plist -archivePath ‘platforms/ios/build/***** 2018-11-02 11.15.20.xcarchive’ -exportPath /var/folders/7q//T/gym_output20181102--15sd5w0 -allowProvisioningUpdates -allowProvisioningUpdates INFO [2018-11-02 11:16:47.53]: â–¸ 2018-11-02 11:16:47.537 xcodebuild[37052:8404495] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path ‘/var/folders/7q//T/_2018-11-02_11-16-47.536.xcdistributionlogs’. INFO [2018-11-02 11:16:54.64]: â–¸ Exported ***** to: /var/folders/7q//T/gym_output20181102--15sd5w0 INFO [2018-11-02 11:16:54.64]: â–¸ ** EXPORT SUCCEEDED  INFO [2018-11-02 11:16:54.69]: Compressing 1 dSYM(s) INFO [2018-11-02 11:16:54.69]: $ cd '/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/build/** 2018-11-02 11.15.20.xcarchive/dSYMs’ && zip -r ‘/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/build/.app.dSYM.zip’ *.dSYM INFO [2018-11-02 11:16:55.40]: â–¸  adding: *****.app.dSYM/ (stored 0%) INFO [2018-11-02 11:16:55.40]: â–¸  adding: *****.app.dSYM/Contents/ (stored 0%) INFO [2018-11-02 11:16:55.40]: â–¸  adding: *****.app.dSYM/Contents/Resources/ (stored 0%) INFO [2018-11-02 11:16:55.40]: â–¸  adding: *****.app.dSYM/Contents/Resources/DWARF/ (stored 0%) INFO [2018-11-02 11:16:55.40]: â–¸  adding: .app.dSYM/Contents/Resources/DWARF/ (deflated 67%) INFO [2018-11-02 11:16:55.40]: â–¸  adding: *****.app.dSYM/Contents/Info.plist (deflated 52%)

INFO [2018-11-02 11:16:55.40]: Successfully exported and compressed dSYM file INFO [2018-11-02 11:16:55.40]: Successfully exported and signed the ipa file: INFO [2018-11-02 11:16:55.40]: /private/var//workspace/iOS_Production_Build_UC//platforms/ios/build/.ipa INFO [2018-11-02 11:16:55.40]: Cruising back to lane ‘ios qa’ 🚘 INFO [2018-11-02 11:16:55.40]: ,-~~-._. / | ’ Dearest Crashlytics! I’m done building… ( ) 0 /-, ,----’ ==== // / -'~; /~~~(O) / /~| / | =( | (| W<

INFO [2018-11-02 11:16:55.41]: ---------------------------------- INFO [2018-11-02 11:16:55.41]: — Step: upload_to_test***** — INFO [2018-11-02 11:16:55.41]: ---------------------------------- INFO [2018-11-02 11:16:55.44]: Login to App Store Connect (@.com)

±-----------------------------------------±—+ | Detected Values from ‘./fastlane/Deliverfile’ | ±-----------------------------------------±—+ | app_review_information | | | trade_representative_contact_information | | ±-----------------------------------------±—+

INFO [2018-11-02 11:19:35.02]: Login to App Store Connect (@.com) Loading session from ‘/Users//.fastlane/spaceship/@*****.com/cookie’ Looking for App Store Connect Team with ID ***** INFO [2018-11-02 11:19:36.65]: Login successful

±-------------------------------------------------------±------------------------------------------------------------------------------------------------------------------------------------------+ | deliver 2.107.0 Summary | ±-------------------------------------------------------±------------------------------------------------------------------------------------------------------------------------------------------+ | force | true | | metadata_path | targets//metadata | | app_rating_config_path | targets//metadata/rating_config.json | | submit_for_review | false | | skip_screenshots | false | | skip_binary_upload | true | | ipa | /private/var//workspace/_iOS_Production_Build_UC//platforms/ios/build/.ipa | | app_identifier | com.. | | screenshots_path | ./fastlane/screenshots | | app_version | 4.1.0 | | username | @.com | | platform | ios | | edit_live | false | | use_live_version | false | | skip_metadata | false | | skip_app_version_update | false | | overwrite_screenshots | false | | reject_if_possible | false | | automatic_release | false | | phased_release | false | | dev_portal_team_id | ***** | | run_precheck_before_submit | true | | precheck_default_rule_level | warn | | trade_representative_contact_information.first_name | ***** | | trade_representative_contact_information.last_name | ***** | | trade_representative_contact_information.address_line1 | ***** | | trade_representative_contact_information.city_name | ***** | | trade_representative_contact_information.state | ***** | | trade_representative_contact_information.country | ***** | | trade_representative_contact_information.postal_code | ***** | | trade_representative_contact_information.phone_number | ***** | | trade_representative_contact_information.email_address | @.com | | app_review_information.first_name | ***** | | app_review_information.last_name | ***** | | app_review_information.phone_number | ***** | | app_review_information.email_address | developer@.at | | app_review_information._user | @.com | | app_review_information.*****_password | ******** | | ignore_language_directory_validation | false | | precheck_include_in_app_purchases | true | ±-------------------------------------------------------±------------------------------------------------------------------------------------------------------------------------------------------+

INFO [2018-11-02 11:19:37.48]: Making sure the latest version on App Store Connect matches ‘4.1.0’ from the ipa file… INFO [2018-11-02 11:19:39.44]: ’4.1.0’ is the latest version on App Store Connect

WARN [2018-11-02 11:19:58.64]: Lane Context: INFO [2018-11-02 11:19:58.64]: {:DEFAULT_PLATFORM=>:ios, :ENVIRONMENT=>“”, :PLATFORM_NAME=>:ios, :LANE_NAME=>“ios qa”, :BUILD_NUMBER=>“13”, :VERSION_NUMBER=>“4.1.0”, :PRODUCE_APPLE_ID=>“”, :SIGH_PROFILE_TYPE=>“app-store”, :MATCH_PROVISIONING_PROFILE_MAPPING=>{“com..”=>“match AppStore com..”}, :IPA_OUTPUT_PATH=>“/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/build/.ipa”, :DSYM_OUTPUT_PATH=>“/private/var//workspace/_iOS_Production_Build_UC//platforms/ios/build/.app.dSYM.zip”, :XCODEBUILD_ARCHIVE=>“platforms/ios/build/***** 2018-11-02 11.15.20.xcarchive”} ERROR [2018-11-02 11:19:58.64]: [IMG_BAD_COLOR_SPACE] This does not use RGB color space. Please edit the image to use the RGB color space and re-save it. INFO [2018-11-02 11:19:58.64]: Successfully generated documentation at path '/private/var//workspace/_iOS_Production_Build_UC/*****/fastlane/README.md’

±-----±--------------------------------------------------------------±------------+ | fastlane summary | ±-----±--------------------------------------------------------------±------------+ | Step | Action | Time (in s) | ±-----±--------------------------------------------------------------±------------+ | 1 | default_platform | 0 | | 2 | Switch to ios build_ios lane | 0 | | 3 | clean_build_artifacts | 0 | | 4 | clear_derived_data | 0 | | 5 | rm -f ./.ipa || true | 0 | | 6 | register_devices | 2 | | 7 | webpack -p --stage=production --platform=ios --cordova – | 63 | | 8 | find . ! -name '’ -type d -exec rm -rf {} + || true | 0 | | 9 | rm -rf www || true | 0 | | 10 | ln -s …//www www | 0 | | 11 | cp targets//config.xml ./ | 0 | | 12 | cordova plugin rm at--airwatch-plugin | 0 | | 13 | cordova platform remove ios | 1 | | 14 | cordova platform remove android | 1 | | 15 | cordova platform add ios --debug | 248 | | 16 | cordova prepare ios | 2 | | 17 | cocoapods | 5 | | 18 | rm -f platforms/ios//Resources/certificate.pem || true | 0 | | 19 | cp targets//certificate.pem platforms/ios/U | 0 | | 20 | upgrade_super_old_xcode_project | 0 | | 21 | coffee res/merge-plugins.coffee platforms/ios/platform_www/co | 0 | | 22 | cp res/cordova-ios-all.js platforms/ios/www/cordova.js | 0 | | 23 | increment_build_number_in_plist | 2 | | 24 | increment_version_number_in_plist | 0 | | 25 | update_app_identifier | 0 | | 26 | update_info_plist | 0 | | 27 | appicon | 0 | | 28 | produce | 4 | | 29 | pem | 1 | | 30 | match | 18 | | 31 | automatic_code_signing | 0 | | 32 | gym | 98 | | 33 | upload_to_test***** | 159 | | 💥 | deliver | 23 | | 35 | slack | 0 | ±-----±--------------------------------------------------------------±------------+

DEBUG [2018-11-02 11:19:58.66]: All plugins are up to date ERROR [2018-11-02 11:19:58.67]: fastlane finished with errors

Looking for related GitHub issues on fastlane/fastlane… Search query: [IMG_BAD_COLOR_SPACE] This does not use RGB color space. Please edit the image to use the RGB color space and re-save it.

URL: https://*****.github.com/search/issues?q=%5BIMG_BAD_COLOR_SPACE%5D%20This%20does%20not%20use%20RGB%20color%20space.%20Please%20edit%20the%20image%20to%20use%20the%20RGB%20color%20space%20and%20re-save%20it.+repo:fastlane/fastlane ➡️ deliver exports screenshots from iTC as JPEG, saves them as PNG https://github.com/fastlane/fastlane/issues/11721 [closed] 9 💬 30 Jun 2018

➡️ deliver downloads app_icon from iTC as a JPEG, uploads as JPEG causing iTC error https://github.com/fastlane/fastlane/issues/11768 [closed] 3 💬 27 May 2018

➡️ deliver does not skip screenshot uploads when skip_screenshots is true https://github.com/fastlane/fastlane/issues/11724 [closed] 8 💬 03 Apr 2018

and 2 more at: https://github.com/fastlane/fastlane/search?q=[IMG_BAD_COLOR_SPACE] This does not use RGB color space. Please edit the image to use the RGB color space and re-save it.&type=Issues&utf8=✓

🔗 You can ⌘ + double-click on links to open them directly in your browser. DEBUG [2018-11-02 11:19:59.26]: All plugins are up to date /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/spaceship/lib/spaceship/du/du_client.rb:166:in parse_upload_response': [!] [IMG_BAD_COLOR_SPACE] This does not use RGB color space. Please edit the image to use the RGB color space and re-save it. (Spaceship::UnexpectedResponse) from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/spaceship/lib/spaceship/du/du_client.rb:96:in upload_file’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/spaceship/lib/spaceship/du/du_client.rb:29:in upload_large_icon' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/spaceship/lib/spaceship/tunes/tunes_client.rb:771:in upload_large_icon’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/spaceship/lib/spaceship/tunes/app_version.rb:446:in upload_large_icon!' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/deliver/lib/deliver/upload_assets.rb:16:in upload’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/deliver/lib/deliver/runner.rb:123:in upload_metadata' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/deliver/lib/deliver/runner.rb:38:in run’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/actions/upload_to_app_store.rb:16:in run' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:253:in block (2 levels) in execute_action’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/actions/actions_helper.rb:50:in execute_action' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:232:in block in execute_action’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:227:in chdir' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:227:in execute_action’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:157:in trigger_action_by_name' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/fast_file.rb:149:in method_missing’ from Fastfile:460:in block (2 levels) in parsing_binding' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/lane.rb:33:in call’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:49:in block in execute' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:45:in chdir’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/runner.rb:45:in execute' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/lane_manager.rb:56:in cruise_lane’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/command_line_handler.rb:36:in handle' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/commands_generator.rb:108:in block (2 levels) in run’ from /Users//.rvm/gems/ruby-2.5.1/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in call' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in run’ from /Users//.rvm/gems/ruby-2.5.1/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in run_active_command' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in run!’ from /Users//.rvm/gems/ruby-2.5.1/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in run!' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/commands_generator.rb:333:in run’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/commands_generator.rb:41:in start' from /Users/*****/.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/fastlane/lib/fastlane/cli_tools_distributor.rb:108:in take_off’ from /Users//.rvm/gems/ruby-2.5.1/gems/fastlane-2.107.0/bin/fastlane:23:in <top (required)>' from /Users/*****/.rvm/gems/ruby-2.5.1/bin/fastlane:23:in load’ from /Users//.rvm/gems/ruby-2.5.1/bin/fastlane:23:in <main>' from /Users/*****/.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in eval’ from /Users//.rvm/gems/ruby-2.5.1/bin/ruby_executable_hooks:24:in `<main>’ Build step ‘Execute shell’ marked build as failure Finished: FAILURE

Environment

✅ fastlane environment ✅

Stack

Key Value
OS 10.13.6
Ruby 2.5.1
Bundler? true
Git git version 2.17.1 (Apple Git-112)
Installation Source ~/.rvm/gems/ruby-2.5.1/bin/fastlane
Host Mac OS X 10.13.6 (17G65)
Ruby Lib Dir ~/.rvm/rubies/ruby-2.5.1/lib
OpenSSL Version OpenSSL 1.1.0i 14 Aug 2018
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 10.0

System Locale

Variable Value
LANG de_AT.UTF-8
LC_ALL
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# Customise this file, documentation can be found here:
# https://docs.fastlane.tools/actions/
# All available actions: https://docs.fastlane.tools/actions
# 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

ENV["LC_ALL"]="en_US.UTF-8"
ENV["LANG"]="en_US.UTF-8"

ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "180"
ENV["FASTLANE_XCODE_LIST_TIMEOUT"] = "180"

if ENV["SLACK_NOTIFICATIONS"].nil?
  ENV["SLACK_NOTIFICATIONS"] = "yes"
end

if ENV['BUILD_USER'].nil?
  ENV["BUILD_USER"] = "Not Username set"
end

if ENV["SIGN_AUTOMATICALLY"].nil?
  ENV["SIGN_AUTOMATICALLY"] = "yes"
end

if ENV["SHOULD_UPLOAD"].nil?
  ENV["SHOULD_UPLOAD"] = "yes"
end

if ENV["NOTIFY_TESTERS"].nil?
  ENV["NOTIFY_TESTERS"] = "no"
end

notify_testers = ENV["NOTIFY_TESTERS"] == "yes"

if ENV["RECREATE_PLATFORMS"].nil?
  ENV["RECREATE_PLATFORMS"] = "no"
end

if ENV["FORCE_RECREATE"].nil?
  ENV["FORCE_RECREATE"] = "no"
end

if ENV["SKIP_WEBPACK"].nil?
  ENV["SKIP_WEBPACK"] = "no"
end


####
#
# bundle exec fastlane fastlane-credentials add --username service@tourist-mobile.com
#
# bundle exec fastlane ios dev --env=travelmobile
#
###

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_require 'spaceship'
Spaceship::Portal::AppService.class_eval do
  def self.icloud
    Spaceship::Portal::AppService.cloud
  end

  def self.i_cloud
    Spaceship::Portal::AppService.cloud
  end
end

#######################################################
#
# variables / Do not change
#
#######################################################

default_platform :ios


version_code = '0'

#######################################################
#
# general settings
#
#######################################################

def tourist_mobile_team_id
  "7LWFKRB39E"
end

def engine_name
  "UTER"
end

def ui_path
  "../MTCFrontend"
end

def brand
  # match PWD is repo PWD
  ENV['BRAND'].downcase
end

def project_name_sanitized
  ENV['PROJECT_NAME'].gsub(/[^0-9A-Za-z.\-]/, '_')
end

def project_name_lowercase
  "#{project_name_sanitized}".downcase
end

def target_resource_path
  "targets/#{project_name_lowercase}"
end

def resource_path
  "res"
end

def metadata_path
  "#{target_resource_path}/metadata"
end

def rating_config_path
  "#{metadata_path}/rating_config.json"
end

def merge_plugins
  "#{resource_path}/merge-plugins.coffee"
end

#######################################################
#
# slack specific settings
#
#######################################################


#https://docs.fastlane.tools/actions/slack/
def slack_url
  "https://hooks.slack.com/services/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"
end

def slack_channel
  '#qa'
end

crashlytics_demo_group = ENV['CRASHLYTICS_DEMO_GROUP']
if crashlytics_demo_group.nil?
  crashlytics_demo_group = 'tm_uter_beta'
end

crashlytics_preview_group = ENV['CRASHLYTICS_PREVIEW_GROUP']
if crashlytics_preview_group.nil?
  crashlytics_preview_group = 'tm_uter_beta'
end

#######################################################
#
# crashlytics specific settings
#
#######################################################

## cordova plugin add cordova-fabric-plugin --variable FABRIC_API_KEY=759ed8bd788e8634e69aec07c80853842c268358 --variable FABRIC_API_SECRET=782588aded329bb3b8e344ff531df2203081b97d37745961d6c23016e5dcd0fe


def crashlytics_api_token
  "759ed8bd788e8634e69aec07c80853842c268358"
end

def crashlytics_build_secret
  "782588aded329bb3b8e344ff531df2203081b97d37745961d6c23016e5dcd0fe"
end

#######################################################
#
# iOS specific settings
#
#######################################################

def cordova_ios_project_path
  "platforms/ios/#{engine_name}.xcodeproj"
end

def cordova_ios_workspace_path
  "platforms/ios/#{engine_name}.xcworkspace"
end

def app_version_ios
  ENV['APP_VERSION_IOS']
end

def app_id_ios
  ENV['APP_ID_IOS']
end

def cordova_plist_path
  "#{engine_name}/#{engine_name}-Info.plist"
end

def ios_appicon_resource_path
  "#{target_resource_path}/ios/appicon/1024.png"
end

def cordova_xcassets_path
  "platforms/ios/#{engine_name}/Images.xcassets"
end

def match_git_url
  # match PWD is repo PWD
  "https://repo.tourist-mobile.com/git/FastlaneCert.git"
end

#######################################################
#
# android specific settings
#
#######################################################

if ENV["ANDROID_HOME"].nil?
  ENV["ANDROID_HOME"] = "/Users/budelius/android-sdk-macosx"
end

def android_project_dir
  "platforms/android/"
end

def android_apk_path
  "#{android_project_dir}app/build/outputs/apk"
end

def signing_store_file
  "res/android.keystore"
end

def signing_store_password
  "limmit0512"
end

def signing_key_alias
  "android1"
end

def signing_key_password
  "limmit0512"
end

def google_sender_id
  # "1:849272607763:android:9a739732584bdf6a"
  "849272607763"
end

# "release": {
#     "storeFile": "tm_release.keystore",
#     "storePassword": "EQv5sFW3zmZkKZM80o8F",
#     "keyAlias": "tm_release",
#     "keyPassword": "EQv5sFW3zmZkKZM80o8F"
# },
# "android_debug": {
#     "storeFile": "debug.keystore",
#     "storePassword": "android",
#     "keyAlias": "AndroidDebugKey",
#     "keyPassword": "android"
# },
# "release2": {
#     "storeFile": "android.keystore",
#     "storePassword": "limmit0512",
#     "keyAlias": "android1",
#     "keyPassword": "limmit0512"
# },
# "release3": {
#     "storeFile": "dermobile.jks",
#     "storePassword": "limmit0512",
#     "keyAlias": "mobile",
#     "keyPassword": "limmit0512"
# }

# preview bundle id -> TEAM_ID
# Release Sign
# production config
# on device
platform :ios do |options|
  desc "create a dev build for ios"

  lane :dev do |options|

    #  if our team id is used we deploy to app store otherwise
    export_type = "development"
    type= "development"
    user_name = ENV['USER_NAME']
    app_id = ENV['APP_ID_IOS_BETA']

    build_ios(
        team_id: ENV['TEAM_ID'],
        code_sign_identity: 'iPhone Developer',
        app_id: app_id,
        export_method: export_type,
        type: type,
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: false,
        internal: false,
        user_name: user_name)

    ship_it

    install_on_ios_device(options[:device])

  end

  # preview bundle id -> TEAM_ID
  # Debug Sign
  # demo config
  # crashlytics -> ad-hoc
  lane :demo do |options|

    build_ios(
        team_id: ENV['TEAM_ID'],
        app_id: ENV['APP_ID_IOS_BETA'],
        code_sign_identity: 'iPhone Developer',
        export_method: "ad-hoc",
        type: "adhoc",
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: false,
        user_name: ENV['USER_NAME']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    ship_it

    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: changelog,
        notifications: false,
        groups: crashlytics_demo_group
    )

  end

  # preview bundle id -> TEAM_ID
  # Release Sign
  # production config
  # crashlytics -> ad-hoc
  lane :preview do |options|

    build_ios(
        team_id: ENV['TEAM_ID'],
        app_id: ENV['APP_ID_IOS_BETA'],
        code_sign_identity: 'iPhone Developer',
        export_method: "ad-hoc",
        type: "adhoc",
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: true,
        user_name: ENV['USER_NAME']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    ship_it

    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: changelog,
        notifications: notify_testers,
        groups: crashlytics_preview_group
    )

  end

  # different branches -> don't concern fastlane
  # preview bundle id -> TEAM_ID
  # Release Sign
  # production config
  # crashlytics -> ad-hoc
  lane :internal do |options|

    build_ios(
        team_id: ENV['TEAM_ID'],
        app_id: ENV['APP_ID_IOS_BETA'],
        code_sign_identity: 'iPhone Developer',

        export_method: "ad-hoc",
        type: "adhoc",
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: false,
        internal: true,
        user_name: ENV['USER_NAME']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    notify_testers = true

    ship_it

    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: changelog,
        notifications: notify_testers,
        groups: crashlytics_preview_group
    )

  end

  # preview bundle id -> TEAM_ID_LIVE
  # Release Sign
  # production config
  # testflight/store -> app-store
  lane :qa do |options|

    #  if our team id is used we deploy to app store otherwise
    export_type = tourist_mobile_team_id == ENV['TEAM_ID_LIVE'] ? "app-store" : "ad-hoc"
    type = export_type == "app-store" ? "appstore" : "adhoc"

    user_name= ENV['USER_NAME']
    app_id= ENV['APP_ID_IOS']

    # ...
    if app_id == "com.bayer.bbs.mytrip"
      export_type = "development"
      type = "adhoc"
    end

    build_ios(
        team_id: ENV['TEAM_ID_LIVE'],
        app_id: app_id,
        code_sign_identity: 'iPhone Developer',
        export_method: export_type,
        type: type,
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: true,
        internal: true,
        user_name: user_name
    )

    if export_type == "app-store"

      changelog = File.read("../#{target_resource_path}/Changelog.txt")

      ship_it

      upload_to_testflight(
          username: user_name,
          app_identifier: app_id,
          skip_waiting_for_build_processing: true,
          changelog: changelog)

      deliver(
          force: true,
          metadata_path: metadata_path,
          app_rating_config_path: rating_config_path,
          submit_for_review: false,
          skip_screenshots: false,
          skip_binary_upload: true)

    else
      ship_it
    end

  end

  # preview bundle id -> TEAM_ID_LIVE
  # Release Sign
  # production config
  # testflight/store -> app-store
  lane :production do |options|
    team_id = ENV['TEAM_ID_LIVE']

    #  if our team id is used we deploy to app store otherwise
    export_type = tourist_mobile_team_id == team_id ? "app-store" : "ad-hoc"
    type = export_type == "app-store" ? "appstore" : "adhoc"


    user_name= ENV['USER_NAME']
    app_id= ENV['APP_ID_IOS']

    sync_code_signing(
        type: type,
        git_url: match_git_url,
        app_identifier: app_id
    )

    build_ios(
        team_id: team_id,
        app_id: app_id,
        code_sign_identity: 'iPhone Developer',
        export_method: export_type,
        type: type,
        app_name: ENV['APP_NAME'],
        app_language: ENV['APP_LANGUGAE'],
        production: true,
        internal: true,
        user_name: user_name
    )

    deliver(
        force: true,
        metadata_path: metadata_path,
        app_rating_config_path: rating_config_path,
        submit_for_review: false,
        price_tier: 0,
        skip_screenshots: false,
        skip_binary_upload: true)

    ship_it

  end

  lane :build_ios do |options|
    # clean up everything
    clean_build_artifacts
    clear_derived_data
    #we need to make sure that there is no whitespace in the ipa name
    Dir.chdir("..") do
      sh 'rm -f ./' + project_name_sanitized + '.ipa || true'
    end

    app_name = options[:app_name]
    team_id = options[:team_id]
    username = options[:user_name]
    app_id_ios = options[:app_id]
    internal_build = options[:internal]
    app_language = options[:app_language]
    is_production = options[:production]
    code_sign_identity = options[:code_sign_identity]


    export_method = options[:export_method]
    type = options[:type]

    # Skip the creation of the app on App Store Connect (PRODUCE_SKIP_ITC)
    # skip_itc && skip_devcenter -> true when
    # third party app store && crashlytics &&
    # we are allowed to -> teamid == tm team id
    # => e.g. team_id == bayer => !(xxx && false) -> true and devcenter will be skipped
    # or team_id= tm team id && export_method == app-store
    # !(true && true) -> !true-> false - > dev center won't be skipped
    skip_itc = !(export_method == "app-store" && team_id == tourist_mobile_team_id)

    puts "++++++++++++++++++++ BUILDING WITH CONFIG ++++++++++++++++++++"
    puts app_name
    puts code_sign_identity
    puts team_id
    puts username
    puts app_id_ios
    puts export_method
    puts type
    puts app_language
    puts skip_itc
    puts "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"


    # Ony register for our TEAM -> since we have rw-access on playstore
    if team_id == tourist_mobile_team_id
      register_devices(
          devices_file: "#{resource_path}/devices.txt",
          team_id: team_id,
          username: username)
    end

    copy_frontend(is_production, 'ios', internal_build)

    Dir.chdir("..") do
      sh "cp #{target_resource_path}/config.xml ./"
    end

    puts "Starting recreate_ios_platform..."
    recreate_ios_platform
    puts "recreate_ios_platform Done!"

    Dir.chdir("..") do
      sh 'rm -f platforms/ios/UTER/Resources/certificate.pem || true'
      if is_production || internal_build
        puts "Using Production Public Key"
        sh "cp #{target_resource_path}/certificate.pem platforms/ios/UTER/Resources/certificate.pem"
      else
        puts "Using Demo Public Key"
        sh "cp #{target_resource_path}/ios/beta/certificate.pem platforms/ios/UTER/Resources/certificate.pem"
      end

    end

    upgrade_super_old_xcode_project(
        path: cordova_ios_project_path,
        team_id: team_id
    )

    merge_cordova_ios

    build_number = get_ios_build_number

    increment_build_number_in_plist(
        xcodeproj: cordova_ios_project_path,
        build_number: "#{build_number}")

    increment_version_number_in_plist(
        version_number: app_version_ios,
        xcodeproj: cordova_ios_project_path,
        target: engine_name)

    update_app_identifier(
        xcodeproj: cordova_ios_project_path,
        plist_path: cordova_plist_path,
        app_identifier: app_id_ios)

    update_info_plist(
        plist_path: cordova_plist_path,
        xcodeproj: cordova_ios_project_path,
        display_name: app_name,
        app_identifier: app_id_ios)

    appicon(
        appicon_image_file: ios_appicon_resource_path,
        appicon_devices: [:ipad, :iphone, :ios_marketing],
        appicon_path: cordova_xcassets_path)


    produce(
        username: username,
        app_identifier: app_id_ios,
        app_name: app_name,
        language: app_language,
        app_version: app_version_ios,
        team_id: team_id, # only necessary when in multiple teams
        skip_itc: skip_itc,
        skip_devcenter: skip_itc,

        # Optional
        # App services can be enabled during app creation
        enable_services: {
            app_group: "off",
            apple_pay: "off",
            associated_domains: "off",
            data_protection: "until_first_auth",
            health_kit: "off",
            home_kit: "off",
            wireless_accessory: "off",
            icloud: "cloudkit",
            inter_app_audio: "off",
            passbook: "off",
            push_notification: "on",
            siri_kit: "off",
            vpn_configuration: "off"}
    )
    if team_id == tourist_mobile_team_id
      pem(
          #force: true, # create a new profile, even if the old one is still valid
          app_identifier: app_id_ios, # optional app identifier,
          save_private_key: true,
          team_id: team_id,
          p12_password: ENV['P12_PWD'],
          new_profile: proc do |profile_path| # this block gets called when a new profile was generated
            puts target_resource_path # the absolute path to the new PEM file
            # insert the code to upload the PEM file to the server
          end
      )

      match(
          username: username,
          git_url: match_git_url,
          app_identifier: app_id_ios,
          type: type,
          team_id: team_id,
          force_for_new_devices: true,
          force: true,
          verbose: true)
    end


    unless is_production
      add_badge(
          dark: true,
          glob: "/#{cordova_xcassets_path}/*.appiconset/*.{png,PNG}",
          shield: "#{app_version_ios}-#{build_number}-blue",
          shield_scale: "0.75")
    end

    automatic_code_signing(
        path: cordova_ios_project_path,
        team_id: team_id,
        use_automatic_signing: true,
        code_sign_identity: code_sign_identity)


    gym(
        verbose: false,
        export_team_id: team_id,
        include_bitcode: false,
        workspace: cordova_ios_workspace_path,
        scheme: engine_name,
        export_method: export_method,
        export_xcargs: "-allowProvisioningUpdates",
        output_name: project_name_sanitized + ".ipa",
        output_directory: "platforms/ios/build/",
        build_path: "platforms/ios/build/",
        xcargs: "-allowProvisioningUpdates",
        clean: true
    )

  end

  before_all do |lane|
    puts "Build started by: "+ ENV['BUILD_USER']
  end

  after_all do |lane|

    build_number = lane_context[SharedValues::BUILD_NUMBER]

    if (ENV["SLACK_NOTIFICATIONS"])

      slack(
          message: "Successfully created new dev build of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
          channel: slack_channel,
          slack_url: slack_url,
          payload: {
              "Build Date" => Time.new.to_s,
              "Built by" => ENV['BUILD_USER'],
          },
      )

    else
      if (ENV["SLACK_NOTIFICATIONS"])
        slack(
            message: "Successfully uploaded new build of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
            channel: slack_channel,
            slack_url: slack_url,
            payload: {
                "Build Date" => Time.new.to_s,
                "Built by" => ENV['BUILD_USER'],
            },
        )
      end
    end
  end

  error do |lane, exception|

    build_number = lane_context[SharedValues::BUILD_NUMBER]
    if (ENV["SLACK_NOTIFICATIONS"])
      slack(
          message: exception.message + " of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
          channel: slack_channel,
          slack_url: slack_url,
          success: false,
          payload: {
              "Build Date" => Time.new.to_s,
              "Built by" => ENV['BUILD_USER'],
          },
      )
    end

  end

end


platform :android do

  desc "bundle exec fastlane android dev --env travelmobile"

  desc "Build and deploy to device"

  lane :dev do |options|

    build_android(
        internal_build: false,
        production_build: false,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: ENV['APP_ID_ANDROID_BETA']
    )

    Dir.chdir("../") do
      sh ("adb install -r #{android_apk_path}/debug/app-debug.apk")
    end

    ship_it

  end

  # preview bundle id -> TEAM_ID
  # Debug Sign
  # demo config
  # crashlytics -> ad-hoc
  lane :demo do

    build_android(
        internal_build: false,
        production_build: false,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: ENV['APP_ID_ANDROID_BETA']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    ship_it

    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: "",
        notifications: false,
        groups: crashlytics_demo_group,
        apk_path: "#{android_apk_path}/debug/app-debug.apk"
    )

  end

  # preview bundle id -> TEAM_ID
  # Release Sign
  # production config
  # crashlytics -> ad-hoc
  lane :preview do

    build_android(
        production_build: true,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: ENV['APP_ID_ANDROID_BETA']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    # TODO : change to preview group
    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: "",
        notifications: false,
        groups: crashlytics_demo_group,
        apk_path: "#{android_apk_path}/release/app-release.apk"
    )

  end

  # different branches -> don't concern fastlane
  # preview bundle id -> TEAM_ID
  # Release Sign
  # production config
  # crashlytics -> ad-hoc
  lane :internal do |options|

    build_android(
        internal_build: true,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: ENV['APP_ID_ANDROID_BETA']
    )

    changelog = File.read("../#{target_resource_path}/Changelog.txt")

    notify_testers = true

    ship_it

    crashlytics(
        api_token: crashlytics_api_token,
        build_secret: crashlytics_build_secret,
        notes: changelog,
        notifications: notify_testers,
        groups: crashlytics_preview_group
    )

  end

  lane :qa do
    app_id_android = ENV['APP_ID_ANDROID']
    build_android(
        production_build: true,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: app_id_android
    )
    third_party_store = ENV['ANDROID_THIRD_PARTY_STORE']

    puts "Deploy to 3rd-Party Store: #{third_party_store}"

    if third_party_store
      puts "Retrieve apk from: UniversalClient/platforms/android/app/build/outputs/apk/release/"
    else
      supply(
          package_name: app_id_android,
          metadata_path: metadata_path + '/android',
          validate_only: false,
          track: 'beta',
          skip_upload_images: false,
          skip_upload_screenshots: false,
          apk_paths: [
              "#{android_apk_path}/release/app-release.apk"
          ],
      )
    end


  end

  lane :production do

    app_id_android = ENV['APP_ID_ANDROID']
    build_android(
        production_build: true,
        env_version_name: ENV['APP_VERSION_ANDROID'],
        package_name: app_id_android
    )
    third_party_store = ENV['ANDROID_THIRD_PARTY_STORE']
    puts "Deploy to 3rd-Party Store: #{third_party_store}"

    if third_party_store
      puts "Retrieve apk from: UniversalClient/platforms/android/app/build/outputs/apk/release/"
    else
      supply(
          package_name: app_id_android,
          metadata_path: metadata_path + '/android',
          validate_only: false,
          track: 'beta',
          skip_upload_images: false,
          skip_upload_screenshots: false,
          apk_paths: [
              "#{android_apk_path}/release/app-release.apk"
          ],
      )
    end
  end

  lane :build_android do |options|

    internal_build = options[:internal_build]
    production = options[:production_build]
    package_name = options[:package_name]
    env_version_name =options[:env_version_name]


    copy_frontend(production, 'android', internal_build)

    version_code = increment_android_version_code

    Dir.chdir("..") do
      sh "cp #{target_resource_path}/config.xml ./"
    end

    xml_set_attribute(
        path_to_xml_file: './config.xml',
        xml_path: '//xmlns:widget',
        attribute_name: 'android-packageName',
        attribute_value: package_name)

    xml_set_attribute(
        path_to_xml_file: './config.xml',
        xml_path: '//xmlns:widget',
        attribute_name: 'android-versionCode',
        attribute_value: version_code)

    puts "Using Android-Version Name #{env_version_name}"

    xml_set_attribute(
        path_to_xml_file: './config.xml',
        xml_path: '//xmlns:widget',
        attribute_name: 'version',
        attribute_value: env_version_name
    )

    Dir.chdir("..") do
      if production
        sh "cp #{target_resource_path}/android/production/google-services.json ./"
      else
        sh "cp #{target_resource_path}/android/beta/google-services.json ./"
      end
    end

    Dir.chdir("..") do
      sh "rm -rf #{android_project_dir}build/ || true"
    end

    recreate_android_platform(android_project_dir, google_sender_id)

    Dir.chdir("..") do
      sh 'rm -f platforms/android/app/main/res/raw/publickey || true'
      if production || internal_build
        puts "Using Live Public Key"
        sh "cp #{target_resource_path}/android/publickey platforms/android/app/src/main/res/raw/publickey"
      else
        puts "Using Demo Public Key"

        sh "cp res/publickey platforms/android/app/src/main/res/raw/publickey"
      end
    end

    Dir.chdir("..") do
      sh "cordova prepare android"
    end

    unless is_gradle_configured

      cordova(
          platform: 'android',
          keystore_path: signing_store_file,
          keystore_alias: signing_key_alias,
          keystore_password: signing_store_password,
          key_password: signing_key_password,
          build_number: version_code,
          release: true
      )

    end

    merge_cordova_android

    gradle(
        task: "clean",
        print_command: true,
        project_dir: android_project_dir)

    Dir.chdir("..") do
      sh "cp res/gradle.properties #{android_project_dir}gradle.properties"
      sh "cp res/fabric.properties #{android_project_dir}fabric.properties"
    end


    puts "VersionName: " + env_version_name

    gradle(
        task: "assemble",
        build_type: production ? "Release" : "Debug",
        project_dir: android_project_dir,
        flags: "--stacktrace",
        properties: {
            :version_code => version_code,
            :versionCode => version_code,
            :versionName => env_version_name,
            "android.injected.signing.store.file" => signing_store_file,
            "android.injected.signing.store.password" => signing_store_password,
            "android.injected.signing.key.alias" => signing_key_alias,
            "android.injected.signing.key.password" => signing_key_password,
        }
    )

    ship_it

  end

  before_all do |lane|
    puts "Build started by:"+ ENV['BUILD_USER']
  end

  after_all do |lane|

    build_number = lane_context[SharedValues::BUILD_NUMBER]

    if (ENV["SLACK_NOTIFICATIONS"])

      slack(
          message: "Successfully created new dev build of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
          channel: slack_channel,
          slack_url: slack_url,
          payload: {
              "Build Date" => Time.new.to_s,
              "Built by" => ENV['BUILD_USER'],
          },
      )

    else
      if (ENV["SLACK_NOTIFICATIONS"])
        slack(
            message: "Successfully uploaded new build of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
            channel: slack_channel,
            slack_url: slack_url,
            payload: {
                "Build Date" => Time.new.to_s,
                "Built by" => ENV['BUILD_USER'],
            },
        )
      end
    end
  end

  error do |lane, exception|

    build_number = lane_context[SharedValues::BUILD_NUMBER]
    if (ENV["SLACK_NOTIFICATIONS"])
      slack(
          message: exception.message + " of " + ENV['APP_NAME'] + ' ' + ENV['APP_VERSION_IOS'] + " build: #{build_number}",
          channel: slack_channel,
          slack_url: slack_url,
          success: false,
          payload: {
              "Build Date" => Time.new.to_s,
              "Built by" => ENV['BUILD_USER'],
          },
      )
    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://docs.fastlane.tools/actions

# fastlane reports which actions are used. No personal data is recorded.
# Learn more at https://github.com/fastlane/fastlane#metrics
def is_gradle_configured

  exists = Pathname.new("../#{android_project_dir}/.gradle/buildOutputCleanup/cache.properties").file?

  UI.message "exists: #{exists}"

  exists

end

def get_changelog (platform)

  File.read("../res/Changelog-"+platform+".txt")

end

def increment_android_version_code ()

  version_code = '0'

  if ENV['BUILD_NUMBER'].nil?

    version_code_file_path = "../res/android-versionCode"
    #create if it does not exist
    unless File.exist?(version_code_file_path)
      File.open(version_code_file_path, "w+")
    end
    #Get the last version code and increment it.
    version_code = File.read(version_code_file_path).to_i
    version_code = version_code +1
    f = File.new(version_code_file_path, "w")
    f.write(version_code)
    f.close
    lane_context[SharedValues::BUILD_NUMBER] = version_code
    puts "VersionCode: #{version_code}"
  else
    version_code = ENV['BUILD_NUMBER']
  end

  lane_context[SharedValues::BUILD_NUMBER] = version_code

  puts "setting build number to: #{version_code}"

  #return version_code
  version_code

end

def get_ios_build_number ()

  if ENV['BUILD_NUMBER'].nil?

    build_number_file_path = "../res/ios-buildNumber"

    #create if it does not exist
    unless File.exist?(build_number_file_path)
      File.open(build_number_file_path, "w+")
    end

    # Get the last version code and increment it.
    build_number = File.read(build_number_file_path).to_i
    build_number = build_number +1

    f = File.new(build_number_file_path, "w")
    f.write(build_number)
    f.close

  else

    build_number = ENV['BUILD_NUMBER']

  end

  lane_context[SharedValues::BUILD_NUMBER] = build_number

  UI.message "setting build number to: #{build_number}"

  build_number

end

def install_on_ios_device (device)

  dev_device_id = ENV['DEV_DEVICE_ID']

  # if the device is passed from command line then simply install on that device
  if device

    install_on_device(
        device_id: device,
        ipa: lane_context[SharedValues::IPA_OUTPUT_PATH]
    )

  else

    # if the device is not set simply install to all connected devices
    if dev_device_id.nil?

      dev_device_ids = sh("idevice_id -l").strip.split('\n')
      dev_device_ids.each do
        dev_device_id

        install_on_device(
            device_id: dev_device_id,
            ipa: lane_context[SharedValues::IPA_OUTPUT_PATH]
        )

      end

    else

      # if the device is set via env variables then simply install on that device

      install_on_device(
          device_id: dev_device_id,
          ipa: lane_context[SharedValues::IPA_OUTPUT_PATH]
      )

    end

  end

end

def recreate_ios_platform ()

  if ENV["RECREATE_PLATFORMS"] == 'no'

    Dir.chdir("..") do

      sh "cordova prepare ios"

    end

  else

    Dir.chdir("..") do
      sh 'cordova plugin rm at-touristmobile-airwatch-plugin'
      puts "recreate_ios_platform: Done plugin rm"

      sh "cordova platform remove ios"
      puts "recreate_ios_platform: Done  platform remove ios"

      sh "cordova platform remove android"
      puts "recreate_ios_platform: Done  platform remove android"

      sh "cordova platform add ios --debug"
      puts "recreate_ios_platform: Done  platform add ios"

      if ENV["SSO"] == 'airwatch'
        sh 'cordova plugin add @tm/at-touristmobile-airwatch-plugin --force'
        puts "recreate_ios_platform: Done cordova plugin add @tm/at-touristmobile-airwatch-plugin --force"
      end

      sh "cordova prepare ios"
      puts "recreate_ios_platform: Done cordova prepare add ios"
    end
    puts "recreate_ios_platform: Running cocoapods"


    cocoapods(
        clean: true,
        podfile: "platforms/ios/Podfile"
    )
    puts "recreate_ios_platform: Done running cocoapods"

  end


end

def recreate_android_platform (android_project_dir, google_sender_id)

  if ENV["RECREATE_PLATFORMS"] == 'no'

    Dir.chdir("..") do
      sh "rm -rf #{android_project_dir}build/ || true"
    end

    Dir.chdir("..") do
      sh "cordova prepare android"
    end

  else

    Dir.chdir("..") do
      sh 'cordova plugin rm at-touristmobile-airwatch-plugin'
      sh 'cordova platform rm ios'
      sh 'cordova platform rm android'

      sh "cordova platform add android@7.1.1"
      if ENV["SSO"] == 'airwatch'
        sh 'cordova plugin add @tm/at-touristmobile-airwatch-plugin --force'
      end
      sh "cordova prepare android"
    end

  end

end

def merge_cordova_android ()

  Dir.chdir("../") do
    sh ("coffee #{merge_plugins} platforms/android/platform_www/cordova.js platforms/android/platform_www/cordova_plugins.js #{resource_path}/android-cordova-all.js")
    sh ("cp #{resource_path}/android-cordova-all.js platforms/android/app/src/main/assets/www/cordova.js")
  end

end

def merge_cordova_ios ()

  Dir.chdir("../") do
    sh ("coffee #{merge_plugins} platforms/ios/platform_www/cordova.js platforms/ios/platform_www/cordova_plugins.js #{resource_path}/cordova-ios-all.js")
    sh ("cp #{resource_path}/cordova-ios-all.js platforms/ios/www/cordova.js")
  end

end

def copy_frontend (production, platform, internal)

  Dir.chdir("../#{ui_path}") do
    if ENV["SKIP_WEBPACK"] == 'no'
      if production || internal
        sh "webpack -p --stage=production#{brand} --platform=#{platform} --cordova --root"
      else
        sh "webpack -d --stage=demo#{brand} --platform=#{platform} --cordova --root"
      end

      # since this deletes a lot of branding stuff always delete even in demo/dev environment
      Dir.chdir("www/app/images/theme/") do
        # delete all images except branding images to reduce size
        sh "find . ! -name '#{brand}' -type d -exec rm -rf {} + || true"
      end

    end
  end

  Dir.chdir("..") do
    sh 'rm -rf www || true'
    sh "ln -s #{ui_path}/www www"
  end

end

def ship_it
  rand = Random.rand(0..4)
  if rand == 0
    squirrel
  elsif rand == 1
    boat
  elsif rand == 2
    submarine
  elsif rand == 3
    snoopy
  elsif rand == 4
    phone
  end
end

def squirrel
  puts "
    !!!!
  !!!!!!!!
!!!!!!!!!!!   O_O
!!!  !!!!!!! /@ @\\
      !!!!!! \\ x /
      !!!!!!/ m  !m
       !!!!/ __  |
       !!!!|/  \\__
        !!!\\______\\
       "
end

def boat
  puts "
                 |~
           |/    w
          / (   (|   \
         /( (/   |)  |\
  ____  ( (/    (|   | )  ,
 |----\ (/ |    /|   |'\ /^;
\---*---Y--+-----+---+--/(
 \------*---*--*---*--/
  '~~ ~~~~~~~~~~~~~~~
  "
end

def submarine
  puts "
                     _
                    | \
                     '.|
     _-   _-    _-  _-||    _-    _-  _-   _-    _-    _-
       _-    _-   - __||___    _-       _-    _-    _-
    _-   _-    _-  |   _   |       _-   _-    _-
      _-    _-    /_) (_) (_\        _-    _-       _-
              _.-'           `-._      ________       _-
        _..--`                   `-..'       .'
    _.-'  o/o                     o/o`-..__.'        ~  ~
 .-'      o|o                     o|o      `.._.  // ~  ~
 `-._     o|o                     o|o        |||<|||~  ~
     `-.__o\o                     o|o       .'-'  \\ ~  ~
LGB       `-.______________________\_...-``'.       ~  ~
                                    `._______`.
  "
end

def snoopy
  puts "
  ,-~~-.___.
 / |  '     \         Dearest Crashlytics! I'm done building...
(  )         0
 \_/-, ,----'
    ====           //
   /  \-'~;    /~~~(O)
  /  __/~|   /       |
=(  _____| (_________|   W<
  "
end

def phone
  puts "
               _.===========================._
            .'`  .-  - __- - - -- --__--- -.  `'.
        __ / ,'`     _|--|_________|--|_     `'. \
      /'--| ;    _.'\ |  '         '  | /'._    ; |
     //   | |_.-' .-'.'    -  -- -    '.'-. '-._| |
    (\)   \"` _.-` /                     \ `-._ `\"/
    (\)    `-`    /      .---------.      \    `-`
    (\)           |      ||1||2||3||      |
   (\)            |      ||4||5||6||      |
  (\)             |      ||7||8||9||      |
 (\)           ___|      ||*||0||#||      |
 (\)          /.--|      '---------'      |
  (\)        (\)  |\_  _  __   _   __  __/|
 (\)        (\)   |                       |
(\)_._._.__(\)    |                       |
 (\\\\jgs\\\)      '.___________________.'
  '-'-'-'--'
  "
end
`./fastlane/Appfile`
json_key_file "res/supply-service-account.json" # Path to the json secret file - Follow https://github.com/fastlane/supply#setup to get one
package_name "com.touristmobile.client.consumer" # e.g. com.krausefx.app
apple_id "service@tourist-mobile.com"
team_id "7LWFKRB39E"

fastlane gems

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

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-cordova 2.2.1 ✅ Up-To-Date
fastlane-plugin-versioning 0.3.4 ✅ Up-To-Date
fastlane-plugin-appicon 0.13.0 ✅ Up-To-Date
fastlane-plugin-badge 1.1.0 ✅ Up-To-Date
fastlane-plugin-increment_version_code 0.4.3 ✅ Up-To-Date
fastlane-plugin-upgrade_super_old_xcode_project 0.0.2 ✅ Up-To-Date
fastlane-plugin-xml_editor 0.2.0 ✅ Up-To-Date
Loaded gems
Gem Version
did_you_mean 1.2.0
executable-hooks 1.5.0
bundler-unload 1.0.2
rubygems-bundler 1.4.5
bundler 1.16.2
CFPropertyList 3.0.0
concurrent-ruby 1.0.5
i18n 0.9.5
minitest 5.11.3
thread_safe 0.3.6
tzinfo 1.2.5
activesupport 4.2.10
public_suffix 2.0.5
addressable 2.5.2
atomos 0.1.3
babosa 1.0.2
curb 0.9.6
fastimage 2.1.4
colored 1.2
highline 1.7.10
commander-fastlane 4.4.6
dotenv 2.5.0
emoji_regex 0.1.1
excon 0.62.0
multipart-post 2.0.0
faraday 0.15.3
unf_ext 0.0.7.5
unf 0.1.4
domain_name 0.5.20180417
http-cookie 1.0.3
faraday-cookie_jar 0.0.6
faraday_middleware 0.12.2
gh_inspector 1.1.3
jwt 2.1.0
memoist 0.16.0
multi_json 1.13.1
os 1.0.0
signet 0.11.0
googleauth 0.6.7
httpclient 2.8.3
mime-types-data 3.2018.0812
mime-types 3.2.2
declarative 0.0.10
declarative-option 0.1.0
uber 0.1.0
representable 3.0.4
retriable 3.1.2
google-api-client 0.23.9
json 2.1.0
mini_magick 4.5.1
multi_xml 0.6.0
plist 3.3.0
rubyzip 1.2.2
security 0.1.3
naturally 2.2.0
simctl 1.6.5
slack-notifier 2.3.2
terminal-notifier 1.8.0
unicode-display_width 1.4.0
terminal-table 1.8.0
tty-screen 0.6.5
tty-cursor 0.6.0
tty-spinner 0.8.0
word_wrap 1.0.0
claide 1.0.2
colored2 3.1.2
nanaimo 0.2.6
xcodeproj 1.7.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.0
badge 0.9.1
fuzzy_match 2.0.4
nap 1.1.0
cocoapods-core 1.5.3
cocoapods-deintegrate 1.0.2
cocoapods-downloader 1.2.2
cocoapods-plugins 1.0.0
cocoapods-search 1.0.0
cocoapods-stats 1.0.0
netrc 0.11.0
cocoapods-trunk 1.3.1
cocoapods-try 1.1.0
escape 0.0.4
fourflusher 2.0.1
molinillo 0.6.6
ruby-macho 1.3.1
cocoapods 1.5.3
coderay 1.1.2
fastlane-plugin-appicon 0.13.0
fastlane-plugin-badge 1.1.0
fastlane-plugin-cordova 2.2.1
fastlane-plugin-increment_version_code 0.4.3
fastlane-plugin-upgrade_super_old_xcode_project 0.0.2
fastlane-plugin-versioning 0.3.4
mini_portile2 2.3.0
nokogiri 1.8.5
fastlane-plugin-xml_editor 0.2.0
method_source 0.9.0
pry 0.11.3

generated on: 2018-11-02

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 1
  • Comments: 22 (7 by maintainers)

Most upvoted comments

i’ll look into it tomorrow now that i know how to break it…

yes I thought about adding something along the lines of this:

      if options[:app_icon]
        UI.message("Uploading app icon from '#{options[:app_icon]}'...")
      begin
        v.upload_large_icon!(options[:app_icon])
      rescue UnexpectedResponse => bad_color_space
        UI.message("Trying to recover from IMG_BAD_COLOR_SPACE Error by converting the image...")
        if bad_color_space.include? "IMG_BAD_COLOR_SPACE"
          begin
            mod = Required::Module::const_get "mini_magick"
            image = MiniMagick::Image.open(options[:app_icon])
            image.colorspace "sRGB"
            image.format "png"
            image.write options[:app_icon]
            retry
        rescue NameError
          UI.message("In order to auto fix the IMG_BAD_COLOR_SPACE Error the mini_magick module needs to be installed.")        
        end
        end
      end
      end

i’m currently trying to get it to work (may take a while first time rubyer)

I added logging to upload_assets.upload INFO [2018-11-22 12:55:32.43]: Uploading app icon from 'targets/live/metadata/app_icon.jpg'...

Looks like the error code originates from Apple interestingly I didn’t find any documentation on it. The error dump:

{"statusCode"=>400, "errorCodes"=>["IMG_BAD_COLOR_SPACE"], "suggestionCode"=>"IMG_RESAVE_COLOR_SPACE", "nonLocalizedMessage"=>"This does not use RGB color space. Please edit the image to use the RGB color space and re-save it.", "localizedMessage"=>"This does not use RGB color space. Please edit the image to use the RGB color space and re-save it.", "width"=>1024, "height"=>1024}

i think the image path was wrong, either way it works for me now

yes i encountered the same problem while executing deliver The login with itunes connect was successfull but I got the same error message.

The screenshot upload was successful Successfully uploaded screenshots to App Store Connect but i fails while uploading the app icons with

[IMG_BAD_COLOR_SPACE] This does not use RGB color space. Please edit the image to use the RGB color space and re-save it.
[Successfully generated documentation at path