fastlane-plugin-luciq_dsym_upload 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +94 -0
- data/lib/fastlane/plugin/luciq_dsym_upload/actions/luciq_dsym_upload_action.rb +151 -0
- data/lib/fastlane/plugin/luciq_dsym_upload/helper/luciq_dsym_upload_helper.rb +16 -0
- data/lib/fastlane/plugin/luciq_dsym_upload/version.rb +5 -0
- data/lib/fastlane/plugin/luciq_dsym_upload.rb +16 -0
- metadata +174 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2befc48ee21b15bf7861ebd08458832b530d2effffa9711bab327ecff76e09dd
|
|
4
|
+
data.tar.gz: 03da6b0e4e6d8637f22705c4a0dffebfb7245e28c2a56274a343ef206f0dd63f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 78229d9419c94b7369d478dc811d9f4489392de816e3e39faa00607384d4c0dfb7f6a46a5341593434c30015b6c3d96d454a971b09b19ec02773eee5334ac2c0
|
|
7
|
+
data.tar.gz: 6cbfe5e5cd1ace2a1e2b0c0932384fb911dbf6afb378e84b1ccd357eebc296f6b8e82b92ceff60041343f4130c045d039412a2a7d7f20ab859fa53e0fc1a780e
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Luciq <contactus@luciq.ai>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# fastlane-plugin-luciq\_dsym\_upload
|
|
2
|
+
|
|
3
|
+
[](https://rubygems.org/gems/fastlane-plugin-luciq_dsym_upload)
|
|
4
|
+
|
|
5
|
+
## About This Plugin
|
|
6
|
+
|
|
7
|
+
The `luciq_dsym_upload` plugin for [fastlane](https://fastlane.tools) provides a streamlined way to upload dSYM symbolication files directly to Luciq. This is essential for debugging and analyzing crash reports.
|
|
8
|
+
|
|
9
|
+
This action integrates seamlessly into your CI/CD workflow. You can use it with `gym` to upload dSYMs generated during the build process, or with `download_dsyms` if you have Bitcode enabled and need to fetch the dSYMs from Apple's App Store Connect first.
|
|
10
|
+
|
|
11
|
+
-----
|
|
12
|
+
|
|
13
|
+
## Getting Started
|
|
14
|
+
|
|
15
|
+
To get started, add the `luciq_dsym_upload` plugin to your project by running this command in your terminal:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
fastlane add_plugin luciq_dsym_upload
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
-----
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
Integrate the `luciq_dsym_upload` action into your `Fastfile`. Below are some common usage examples.
|
|
26
|
+
|
|
27
|
+
### Basic Upload
|
|
28
|
+
|
|
29
|
+
The simplest use case is to provide your Luciq token. The plugin will automatically find and upload the dSYM file generated by a preceding `gym` or `download_dsyms` action.
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
# In your Fastfile
|
|
33
|
+
|
|
34
|
+
lane :release do
|
|
35
|
+
gym
|
|
36
|
+
luciq_dsym_upload(api_token: "<Your Luciq token>")
|
|
37
|
+
end
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Uploading Specific dSYM Files
|
|
41
|
+
|
|
42
|
+
If you need to upload specific dSYM files from custom paths, use the `dsym_array_paths` parameter.
|
|
43
|
+
|
|
44
|
+
```ruby
|
|
45
|
+
luciq_dsym_upload(
|
|
46
|
+
api_token: "<Your Luciq token>",
|
|
47
|
+
dsym_array_paths: ["./App1.dSYM.zip", "./App2.dSYM.zip"]
|
|
48
|
+
)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Targeting the EU Cluster
|
|
52
|
+
|
|
53
|
+
If your organization uses Luciq's EU data cluster, set the `eu` parameter to `true`.
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
luciq_dsym_upload(
|
|
57
|
+
api_token: "<Your Luciq token>",
|
|
58
|
+
eu: true
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Using a Custom Endpoint
|
|
63
|
+
|
|
64
|
+
For custom or on-premise setups, you can specify a different API endpoint using the `end_point` parameter.
|
|
65
|
+
|
|
66
|
+
```ruby
|
|
67
|
+
luciq_dsym_upload(
|
|
68
|
+
api_token: "<Your Luciq token>",
|
|
69
|
+
end_point: "https://api.luciq.ai/api/sdk/v3/symbols_files"
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
-----
|
|
74
|
+
|
|
75
|
+
## Parameters
|
|
76
|
+
|
|
77
|
+
| Key | Description | Required | Default Value |
|
|
78
|
+
| --- | --- | --- | --- |
|
|
79
|
+
| `api_token` | Your API token for Luciq. | Yes | - |
|
|
80
|
+
| `dsym_array_paths` | An array of paths to specific `.dSYM.zip` files you want to upload. | No | Automatically detected |
|
|
81
|
+
| `eu` | Set to `true` if you are using the EU cluster in the Luciq SDK. | No | `false` |
|
|
82
|
+
| `end_point` | The custom API endpoint for dSYM uploads. | No | Luciq's default endpoint |
|
|
83
|
+
|
|
84
|
+
-----
|
|
85
|
+
|
|
86
|
+
## Issues and Feedback
|
|
87
|
+
|
|
88
|
+
If you encounter any issues or have feedback for this plugin, please [submit an issue](https://github.com/luciqai/fastlane-plugin-luciq_dsym_upload/issues) to this repository.
|
|
89
|
+
|
|
90
|
+
For general troubleshooting with *fastlane* plugins, please review the official [Plugins Troubleshooting Guide](https://docs.fastlane.tools/plugins/plugins-troubleshooting/).
|
|
91
|
+
|
|
92
|
+
## About *fastlane*
|
|
93
|
+
|
|
94
|
+
*fastlane* is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'fastlane/action'
|
|
3
|
+
require_relative '../helper/luciq_dsym_upload_helper'
|
|
4
|
+
require 'shellwords'
|
|
5
|
+
|
|
6
|
+
module Fastlane
|
|
7
|
+
module Actions
|
|
8
|
+
class LuciqDsymUploadAction < Action
|
|
9
|
+
def self.run(params)
|
|
10
|
+
@luciq_dsyms_directory = 'Luciq_dsym_files_fastlane'
|
|
11
|
+
|
|
12
|
+
UI.verbose 'Running Luciq Action'
|
|
13
|
+
api_token = params[:api_token]
|
|
14
|
+
eu = params[:eu] || false
|
|
15
|
+
|
|
16
|
+
default_end_point = 'https://api.instabug.com/api/sdk/v3/symbols_files'
|
|
17
|
+
if eu
|
|
18
|
+
default_end_point = 'https://api-eu.instabug.com/api/sdk/v3/symbols_files'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
endpoint = params[:end_point] || default_end_point
|
|
22
|
+
command = "curl #{endpoint} --write-out %{http_code} --silent --output /dev/null -F os=\"ios\" -F application_token=\"#{api_token}\" -F symbols_file="
|
|
23
|
+
|
|
24
|
+
dsym_paths = []
|
|
25
|
+
# Add paths provided by the user
|
|
26
|
+
dsym_paths += (params[:dsym_array_paths] || [])
|
|
27
|
+
# Add dSYMs generaed by `gym`
|
|
28
|
+
dsym_paths += [Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]] if Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]
|
|
29
|
+
# Add dSYMs downloaded from iTC
|
|
30
|
+
dsym_paths += Actions.lane_context[SharedValues::DSYM_PATHS] if Actions.lane_context[SharedValues::DSYM_PATHS]
|
|
31
|
+
|
|
32
|
+
dsym_paths.uniq!
|
|
33
|
+
UI.verbose 'dsym_paths: ' + dsym_paths.inspect
|
|
34
|
+
|
|
35
|
+
if dsym_paths.empty?
|
|
36
|
+
UI.error "Fastlane dSYMs file is not found! make sure you're using Fastlane action [download_dsyms] to download your dSYMs from App Store Connect"
|
|
37
|
+
return
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
generate_luciq_directory
|
|
41
|
+
|
|
42
|
+
UI.verbose 'Directory name: ' + @luciq_dsyms_directory
|
|
43
|
+
copy_dsym_paths_into_directory(dsym_paths, @luciq_dsyms_directory)
|
|
44
|
+
|
|
45
|
+
command = build_single_file_command(command, @luciq_dsyms_directory)
|
|
46
|
+
|
|
47
|
+
result = Actions.sh(command)
|
|
48
|
+
if result == '200'
|
|
49
|
+
UI.success 'dSYM is successfully uploaded to Luciq 🤖'
|
|
50
|
+
UI.verbose 'Removing The directory'
|
|
51
|
+
else
|
|
52
|
+
UI.error "Something went wrong during Luciq dSYM upload. Status code is #{result}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Cleanup zip file and directory
|
|
56
|
+
cleanup_luciq_directory
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.description
|
|
60
|
+
"Upload dSYM files to Luciq"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.details
|
|
64
|
+
"This action is used to upload symbolication files to Luciq. Incase you are not using bitcode, you can use this plug-in
|
|
65
|
+
with `gym` to upload dSYMs generated from your builds. If bitcode is enabled, you can use it with `download_dsyms` to upload dSYMs
|
|
66
|
+
from iTunes connect"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.authors
|
|
70
|
+
['Luciq Inc.']
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.return_value
|
|
74
|
+
# If your method provides a return value, you can describe here what it does
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.example_code
|
|
78
|
+
[
|
|
79
|
+
'luciq_dsym_upload(api_token: "<Luciq Token>")',
|
|
80
|
+
'luciq_dsym_upload(api_token: "<Luciq Token>", dsym_array_paths: ["./App1.dSYM.zip", "./App2.dSYM.zip"])',
|
|
81
|
+
'luciq_dsym_upload(api_token: "<Luciq Token>", eu: true)',
|
|
82
|
+
'luciq_dsym_upload(api_token: "<Luciq Token>", end_point: "https://api.instabug.com/api/sdk/v3/symbols_files")'
|
|
83
|
+
]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.available_options
|
|
87
|
+
[
|
|
88
|
+
FastlaneCore::ConfigItem.new(key: :api_token,
|
|
89
|
+
env_name: 'FL_LUCIQ_API_TOKEN', # The name of the environment variable
|
|
90
|
+
description: 'API Token for Luciq', # a short description of this parameter
|
|
91
|
+
verify_block: proc do |value|
|
|
92
|
+
unless value && !value.empty?
|
|
93
|
+
UI.user_error!("No API token for LuciqAction given, pass using `api_token: 'token'`")
|
|
94
|
+
end
|
|
95
|
+
end),
|
|
96
|
+
FastlaneCore::ConfigItem.new(key: :dsym_array_paths,
|
|
97
|
+
type: Array,
|
|
98
|
+
optional: true,
|
|
99
|
+
description: 'Array of paths to *.dSYM files'),
|
|
100
|
+
FastlaneCore::ConfigItem.new(key: :eu,
|
|
101
|
+
type: Boolean,
|
|
102
|
+
optional: true,
|
|
103
|
+
description: 'Should use the EU cluster or not'),
|
|
104
|
+
FastlaneCore::ConfigItem.new(key: :end_point,
|
|
105
|
+
type: String,
|
|
106
|
+
optional: true,
|
|
107
|
+
description: 'Custom end point to be used to upload the dsyms to')
|
|
108
|
+
]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.is_supported?(platform)
|
|
112
|
+
platform == :ios
|
|
113
|
+
true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.generate_luciq_directory
|
|
117
|
+
cleanup_luciq_directory
|
|
118
|
+
FileUtils.mkdir_p @luciq_dsyms_directory
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def self.cleanup_luciq_directory
|
|
122
|
+
FileUtils.rm_f "#{@luciq_dsyms_directory}.zip"
|
|
123
|
+
FileUtils.rm_rf @luciq_dsyms_directory
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def self.remove_directory(directory_path)
|
|
127
|
+
FileUtils.rm_rf directory_path
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def self.copy_dsym_paths_into_directory(dsym_paths, directory_path)
|
|
131
|
+
dsym_paths.each do |path|
|
|
132
|
+
if File.extname(path) == '.dSYM'
|
|
133
|
+
destination_path = "#{directory_path}/#{File.basename(path)}"
|
|
134
|
+
FileUtils.copy_entry(path, destination_path) if File.exist?(path)
|
|
135
|
+
else
|
|
136
|
+
Actions.sh("unzip -n #{Shellwords.shellescape(path)} -d #{Shellwords.shellescape(directory_path)}")
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.build_single_file_command(command, dsym_path)
|
|
142
|
+
file_path = if dsym_path.end_with?('.zip')
|
|
143
|
+
dsym_path
|
|
144
|
+
else
|
|
145
|
+
ZipAction.run(path: dsym_path, include: [], exclude: [])
|
|
146
|
+
end
|
|
147
|
+
command + "@\"#{file_path}\""
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'fastlane_core/ui/ui'
|
|
2
|
+
|
|
3
|
+
module Fastlane
|
|
4
|
+
UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
|
|
5
|
+
|
|
6
|
+
module Helper
|
|
7
|
+
class LuciqDsymUploadHelper
|
|
8
|
+
# class methods that you define here become available in your action
|
|
9
|
+
# as `Helper::LuciqDsymUploadHelper.your_method`
|
|
10
|
+
#
|
|
11
|
+
def self.show_message
|
|
12
|
+
UI.message("Hello from the luciq_dsym_upload plugin helper!")
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'fastlane/plugin/luciq_dsym_upload/version'
|
|
2
|
+
|
|
3
|
+
module Fastlane
|
|
4
|
+
module LuciqDsymUpload
|
|
5
|
+
# Return all .rb files inside the "actions" and "helper" directory
|
|
6
|
+
def self.all_classes
|
|
7
|
+
Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# By default we want to import all available actions and helpers
|
|
13
|
+
# A plugin can contain any number of actions and plugins
|
|
14
|
+
Fastlane::LuciqDsymUpload.all_classes.each do |current|
|
|
15
|
+
require current
|
|
16
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: fastlane-plugin-luciq_dsym_upload
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Luciq
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2025-10-22 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: pry
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec_junit_formatter
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rake
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rubocop
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - '='
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 0.49.1
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - '='
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 0.49.1
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rubocop-require_tools
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: simplecov
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: fastlane
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 2.80.0
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: 2.80.0
|
|
139
|
+
description:
|
|
140
|
+
email: sdks@luciq.ai
|
|
141
|
+
executables: []
|
|
142
|
+
extensions: []
|
|
143
|
+
extra_rdoc_files: []
|
|
144
|
+
files:
|
|
145
|
+
- LICENSE
|
|
146
|
+
- README.md
|
|
147
|
+
- lib/fastlane/plugin/luciq_dsym_upload.rb
|
|
148
|
+
- lib/fastlane/plugin/luciq_dsym_upload/actions/luciq_dsym_upload_action.rb
|
|
149
|
+
- lib/fastlane/plugin/luciq_dsym_upload/helper/luciq_dsym_upload_helper.rb
|
|
150
|
+
- lib/fastlane/plugin/luciq_dsym_upload/version.rb
|
|
151
|
+
homepage: https://github.com/luciqai/fastlane-plugin-luciq_dsym_upload
|
|
152
|
+
licenses:
|
|
153
|
+
- MIT
|
|
154
|
+
metadata: {}
|
|
155
|
+
post_install_message:
|
|
156
|
+
rdoc_options: []
|
|
157
|
+
require_paths:
|
|
158
|
+
- lib
|
|
159
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
|
+
requirements:
|
|
161
|
+
- - ">="
|
|
162
|
+
- !ruby/object:Gem::Version
|
|
163
|
+
version: '0'
|
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
|
+
requirements:
|
|
166
|
+
- - ">="
|
|
167
|
+
- !ruby/object:Gem::Version
|
|
168
|
+
version: '0'
|
|
169
|
+
requirements: []
|
|
170
|
+
rubygems_version: 3.4.10
|
|
171
|
+
signing_key:
|
|
172
|
+
specification_version: 4
|
|
173
|
+
summary: Plugin to upload DSYMs to Luciq Dashboard.
|
|
174
|
+
test_files: []
|