fastlane-plugin-privatexcframeworkpackaging 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 71bf838c5ff37939505c2f39d440b707fa2f57e1d39a78afefb49168b419b17c
4
+ data.tar.gz: 687b13ad0f7fc74ad91cdae469f898495d83922a6605b41052ec95bf2ac09af9
5
+ SHA512:
6
+ metadata.gz: 3ff55062ccc9a745a36ffcb0cc3770f477b5b640c7ced99bc6f14aba9113231db76cf9ede6f7aedbd27bcfaf1e0c45e0edd859b76fff9eb563da7d1b5862b46b
7
+ data.tar.gz: b9f0ba2d21b84af074264766f40964478b989cdb7284f55ea8234ce80cd17b9a2c6a26f7af59888e98b9cd1af71271674094aa99c78f56a432111c90029cd2d9
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023 Masami Yamate <m.yamate@mail.yamatte.net>
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,83 @@
1
+ # privatexcframeworkpackaging plugin
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-privatexcframeworkpackaging)
4
+
5
+ ## Getting Started
6
+
7
+ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-privatexcframeworkpackaging`, add it to your project by running:
8
+
9
+ ```bash
10
+ fastlane add_plugin privatexcframeworkpackaging
11
+ ```
12
+
13
+ ## About privatexcframeworkpackaging
14
+
15
+ Create a Swift package wrapping XCFramework in a private repository.
16
+
17
+ ## Preparation
18
+
19
+ ### GitHub CLI
20
+
21
+ To use this plugin, you need to use GitHub CLI. Please authenticate your GitHub CLI account beforehand.
22
+
23
+ [Github CLI](https://cli.github.com/)
24
+ [Github CLI - gh auth login](https://cli.github.com/manual/gh_auth_login)
25
+
26
+ ### Preparation of the Swift Package Project to be Introduced
27
+
28
+ This plugin performs the following tasks:
29
+
30
+ 1. It zips the XCFramework contained in the XCFrameworks directory located directly under the root directory.
31
+ 2. It automatically creates a release version for binary distribution.
32
+ 3. It automatically uploads the XCFramework zip file to the release assets of the release version for distribution.
33
+ 4. It automatically updates the Package.swift file using the uploaded zip file in the release assets.
34
+ 5. It automatically generates a pull request for the release.
35
+
36
+ Note that the generation of XCFramework needs to be considered separately using some other method.
37
+
38
+ ### Creation of the XCFrameworks Directory
39
+
40
+
41
+ Create a directory named "XCFrameworks" directly under the project directory. Place the XCFramework that you want to distribute in this directory, which you intend to distribute through a private repository.
42
+
43
+ ```sh
44
+ mkdir ./XCFrameworks
45
+ ```
46
+
47
+ ### Create a configuration file
48
+
49
+ Create a file named "PrivatePackageConfig.yml" directly under the project directory.
50
+
51
+ The following is an example entry for "PrivatePackageConfig.yml". Please modify it accordingly to suit your installation environment.
52
+
53
+ ```yml
54
+ default_branch_name: "main" # Default branch name for repository
55
+ package_name: "PrivateXCFrameworkPackagingExampleFramework" # Package name in Package.swift
56
+ libraries: # Library item settings included in the Product array (multiple settings possible)
57
+ - name: "SampleFramework" # Library Name
58
+ targets: # Name of binary target to include in library
59
+ - "SampleFramework" # binary target name
60
+ binary_targets: # Binary target name. Use the same name as the XCFramework name.
61
+ - "SampleFramework" # XCFramework name
62
+ ```
63
+
64
+ ## Example
65
+
66
+ For sample projects, please refer to the repository below.
67
+ [PrivateXCFrameworkPackagingExampleFramework](https://github.com/MasamiYamate/PrivateXCFrameworkPackagingExampleFramework)
68
+
69
+ ## Issues and Feedback
70
+
71
+ For any other issues and feedback about this plugin, please submit it to this repository.
72
+
73
+ ## Troubleshooting
74
+
75
+ If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
76
+
77
+ ## Using _fastlane_ Plugins
78
+
79
+ For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
80
+
81
+ ## About _fastlane_
82
+
83
+ _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,246 @@
1
+ require 'fastlane/action'
2
+ require 'yaml'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class PrivatexcframeworkpackagingAction < Action
7
+ def self.run(params)
8
+ # Configの読み込み
9
+ config = load_config
10
+ make_libraries(config)
11
+ # 事前準備
12
+ prepare_binary_upload(config)
13
+ # タグを取得する
14
+ latest_tag_result = fetch_latest_tag
15
+ # binary配布用のVersionを発行する
16
+ asset_version = make_binary_release_version(latest_tag_result)
17
+ # リリースアセットにUpするZipを生成する
18
+ make_xcframework_xip
19
+ # Checksumを生成
20
+ checksum_items = make_xcframework_checksum(config)
21
+ # Upload
22
+ upload_binary_for_release_asset(asset_version)
23
+ asset_urls = fetch_release_asset_urls(asset_version)
24
+
25
+ # ここからリリース用のPR作成フロー
26
+ # 作業ブランチの作成
27
+ new_version = asset_version.split('_').shift
28
+ branch_name = checkout_package_update_branch(new_version)
29
+ # Package.swiftの更新
30
+ update_package(config, checksum_items, asset_urls)
31
+ # Pull requestの発行
32
+ make_binary_update_pull_request(config, new_version, branch_name)
33
+ end
34
+
35
+ # 事前準備
36
+ def self.prepare_binary_upload(config)
37
+ # 既に作業用ディレクトリがある場合は削除する
38
+ `rm -rf ./Build/Zip`
39
+ # Baseブランチへの切り替え
40
+ basebranch_name = config['defaultbranch_name']
41
+ # 最新の状態を取得する
42
+ `git checkout #{basebranch_name} ; git pull`
43
+ # 最新の状態を取得する
44
+ `git checkout #{basebranch_name} ; git pull`
45
+ # XCFrameworkのディレクトリの確認
46
+ unless Dir.exist?('./XCFrameworks')
47
+ throw Exception.new('There is no directory to save XCFramework')
48
+ end
49
+ # git diffがないことを確認する
50
+ git_diff_exit_code = `git diff --exit-code --quiet & echo $?`.chomp
51
+ if git_diff_exit_code != '0'
52
+ throw Exception.new('There are differences')
53
+ end
54
+ end
55
+
56
+ # binaryリリース用のバージョンを発行する
57
+ def self.make_binary_release_version(latest_tag_result)
58
+ split_version_items = latest_tag_result.split('.')
59
+ # マイナーバージョンUp
60
+ minor_version = split_version_items[1].to_i + 1
61
+ new_version = "#{split_version_items[0]}.#{minor_version}.#{split_version_items[2].sub(/_.*/m, '')}"
62
+ # リリースアセット用のVersionの発行
63
+ now_time = Time.now
64
+ ymd_string = "#{format('%04<number>d', number: now_time.year)}#{format('%02<number>d', number: now_time.month)}#{format('%02<number>d', number: now_time.day)}"
65
+ hms_string = "#{format('%02<number>d', number: now_time.hour)}#{format('%02<number>d', number: now_time.min)}#{format('%02<number>d', number: now_time.sec)}"
66
+ asset_version = "#{new_version}_binary_#{ymd_string}_#{hms_string}"
67
+ `bundle exec gh release create #{asset_version}`
68
+ return asset_version
69
+ end
70
+
71
+ # 各frameworkをZipに圧縮する
72
+ def self.make_xcframework_xip
73
+ xcframeworks_path = './XCFrameworks'
74
+ work_dir_path = './Build/Zip'
75
+ # 作業用ディレクトリの作成
76
+ `mkdir -p #{work_dir_path}`
77
+ Dir.foreach(xcframeworks_path) do |item|
78
+ next if item == '.' || item == '..' || item == '.DS_Store'
79
+
80
+ zip_file_path = "#{work_dir_path}/#{item}.zip"
81
+ xcframework_path = "#{xcframeworks_path}/#{item}"
82
+ `zip -r -X #{zip_file_path} #{xcframework_path}`
83
+ end
84
+ end
85
+
86
+ # 各XCFramework zipのchecksumを取得する
87
+ def self.make_xcframework_checksum(config)
88
+ result = {}
89
+ zip_dir = './Build/Zip'
90
+ Dir.foreach(zip_dir) do |item|
91
+ next if item == '.' || item == '..' || item == '.DS_Store'
92
+
93
+ framework_path = "#{zip_dir}/#{item}"
94
+ checksum = `shasum -a 256 #{framework_path}`.split( ).shift
95
+ framework_name = extraction_framework_name(item)
96
+ result[framework_name] = checksum
97
+ end
98
+ return result
99
+ end
100
+
101
+ # Package更新用のブランチをチェックアウト
102
+ def self.checkout_package_update_branch(new_version)
103
+ # Version発行後の最新の状態を取得する
104
+ `git pull`
105
+ # 作業用ブランチの作成
106
+ branch_name = "feature/update-#{new_version}"
107
+ current_branch = `git branch --contains | cut -d ' ' -f 2`
108
+ if branch_name != current_branch
109
+ `git checkout -b #{branch_name}`
110
+ end
111
+ return branch_name
112
+ end
113
+
114
+ # Update用のPull Requestを発行する
115
+ def self.make_binary_update_pull_request(config, new_version, branch_name)
116
+ `git add .`
117
+ commit_message = "Update binary #{new_version}"
118
+ `git commit -m "#{commit_message}"`
119
+ `git push --set-upstream origin #{branch_name}`
120
+
121
+ basebranch_name = config['basebranch_name']
122
+ title = "Update #{new_version}"
123
+ body = "Update XCFrameworks Version #{new_version}"
124
+ `bundle exec gh pr create --base "#{basebranch_name}" --head "#{branch_name}" --title "#{title}" --body "#{body}"`
125
+ end
126
+
127
+ # binary targetの各項目を生成する
128
+ def self.make_binary_targets(config, checksum_items, asset_urls)
129
+ result = []
130
+ binary_target_template = fetch_template('package_binary_target_template.txt')
131
+ binary_targets = config['binary_targets']
132
+ for binary_target_name in binary_targets
133
+ checksum = checksum_items[binary_target_name]
134
+ asset_url = "#{asset_urls[binary_target_name]}.zip"
135
+ binary_target_item = binary_target_template.gsub('${binary_target_name}', binary_target_name).gsub('${binary_target_url}', asset_url).gsub('${binary_check_sum}', checksum)
136
+ result.push(binary_target_item)
137
+ end
138
+ return result
139
+ end
140
+
141
+ # libraryの各項目を生成する
142
+ def self.make_libraries(config)
143
+ result = []
144
+ library_template = fetch_template('package_library_item_template.txt')
145
+ libraries = config['libraries']
146
+ for library in libraries
147
+ name = library['name']
148
+ targets = library['targets'].map { |target| '\'' + target + '\'' }.join(',')
149
+ library_item = library_template.gsub('${library_name}', name).gsub('${library_targets}', targets)
150
+ result.push(library_item)
151
+ end
152
+ return result
153
+ end
154
+
155
+ # Package.swiftを更新する
156
+ def self.update_package(config, checksum_items, asset_urls)
157
+ binary_targets = make_binary_targets(config, checksum_items, asset_urls).join(',')
158
+ libraries = make_libraries(config).join(',')
159
+ package_name = config['package_name']
160
+ update_package_template = fetch_template('package_base_template.txt')
161
+ update_package_txt = update_package_template.gsub('${package_name}', package_name).gsub('${product_items}', libraries).gsub('${binary_targets}', binary_targets)
162
+ open('./Package.swift', 'w') do |file|
163
+ file.puts(update_package_txt)
164
+ end
165
+ end
166
+
167
+ # binaryをUploadする
168
+ def self.upload_binary_for_release_asset(tag)
169
+ zip_dir = './Build/Zip'
170
+ Dir.foreach(zip_dir) do |item|
171
+ next if item == '.' || item == '..' || item == '.DS_Store'
172
+
173
+ framework_path = "#{zip_dir}/#{item}"
174
+ `bundle exec gh release upload #{tag} #{framework_path}`
175
+ end
176
+ end
177
+
178
+ # 設定ファイルを取得する
179
+ def self.load_config
180
+ return open('PrivatePackageConfig.yml', 'r') { |file| YAML.load(file) }
181
+ end
182
+
183
+ # Upload済みのRelease Assetsのapi urlを取得する
184
+ def self.fetch_release_asset_urls(tag)
185
+ result = {}
186
+ assets_json = `bundle exec gh release view #{tag} --json assets`
187
+ assets_hash = JSON.load(assets_json)
188
+ assets = assets_hash['assets']
189
+ for asset in assets
190
+ api_url = asset['apiUrl']
191
+ framework_name = extraction_framework_name(asset['name'])
192
+ result[framework_name] = api_url
193
+ end
194
+ return result
195
+ end
196
+
197
+ # Package.swift更新用の各テンプレートファイルを抽出する
198
+ def self.fetch_template(file_name)
199
+ directory_path_items = __dir__.split(File::SEPARATOR)
200
+ directory_path_items.pop
201
+ plugin_root_dir_path = directory_path_items.join(File::Separator)
202
+ template_file = open("#{plugin_root_dir_path}/template/#{file_name}", 'r')
203
+ return template_file.read
204
+ end
205
+
206
+ # 拡張子付きのファイル名からFramework名称を抽出する
207
+ def self.extraction_framework_name(file_name)
208
+ # hogeFuga.xcframeworkやhogeFuga.xcframework.zipからファイル名を抽出する
209
+ return file_name.split('.').shift
210
+ end
211
+
212
+ # 最新のタグを取得する
213
+ def self.fetch_latest_tag
214
+ # タグを取得する
215
+ latest_tag_result = `git describe --tags --abbrev=0`.chomp
216
+ if latest_tag_result == ''
217
+ latest_tag_result = '0.0.0'
218
+ end
219
+ return latest_tag_result
220
+ end
221
+
222
+ def self.description
223
+ 'Generate a Swift package using the XCFramework uploaded to the Release assets of a private repository.'
224
+ end
225
+
226
+ def self.authors
227
+ ['Masami Yamate']
228
+ end
229
+
230
+ def self.return_value
231
+ end
232
+
233
+ def self.details
234
+ 'Generate a Swift package using the XCFramework uploaded to the Release assets of a private repository.'
235
+ end
236
+
237
+ def self.available_options
238
+ []
239
+ end
240
+
241
+ def self.is_supported?(platform)
242
+ [:ios, :mac].include?(platform)
243
+ end
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,14 @@
1
+ // swift-tools-version: 5.9
2
+ // The swift-tools-version declares the minimum version of Swift required to build this package.
3
+
4
+ import PackageDescription
5
+
6
+ let package = Package(
7
+ name: "${package_name}",
8
+ products: [
9
+ ${product_items}
10
+ ],
11
+ targets: [
12
+ ${binary_targets}
13
+ ]
14
+ )
@@ -0,0 +1,5 @@
1
+ .binaryTarget(
2
+ name: "${binary_target_name}",
3
+ url: "${binary_target_url}",
4
+ checksum: "${binary_check_sum}"
5
+ )
@@ -0,0 +1,4 @@
1
+ .library(
2
+ name: "${library_name}",
3
+ targets: [${library_targets}]
4
+ )
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module Privatexcframeworkpackaging
3
+ VERSION = "0.3.2"
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/privatexcframeworkpackaging/version'
2
+
3
+ module Fastlane
4
+ module Privatexcframeworkpackaging
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions}/*.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::Privatexcframeworkpackaging.all_classes.each do |current|
15
+ require current
16
+ end
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-privatexcframeworkpackaging
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - Masami Yamate
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
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: fastlane
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.217.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.217.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
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: rake
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: rspec
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: rspec_junit_formatter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.50.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.50.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-performance
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: rubocop-require_tools
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description:
154
+ email: yamate.inquiry@mail.yamatte.net
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - LICENSE
160
+ - README.md
161
+ - lib/fastlane/plugin/privatexcframeworkpackaging.rb
162
+ - lib/fastlane/plugin/privatexcframeworkpackaging/actions/privatexcframeworkpackaging_action.rb
163
+ - lib/fastlane/plugin/privatexcframeworkpackaging/template/package_base_template.txt
164
+ - lib/fastlane/plugin/privatexcframeworkpackaging/template/package_binary_target_template.txt
165
+ - lib/fastlane/plugin/privatexcframeworkpackaging/template/package_library_item_template.txt
166
+ - lib/fastlane/plugin/privatexcframeworkpackaging/version.rb
167
+ homepage: https://github.com/MasamiYamate/fastlane-plugin-privatexcframeworkpackaging
168
+ licenses:
169
+ - MIT
170
+ metadata:
171
+ rubygems_mfa_required: 'true'
172
+ post_install_message:
173
+ rdoc_options: []
174
+ require_paths:
175
+ - lib
176
+ required_ruby_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '2.6'
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ requirements: []
187
+ rubygems_version: 3.2.33
188
+ signing_key:
189
+ specification_version: 4
190
+ summary: Generate a Swift package using the XCFramework uploaded to the Release assets
191
+ of a private repository.
192
+ test_files: []