xcframework_converter 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 261230f022e462a9840a009590e212c543833902b44795f80476971ff828dae7
4
- data.tar.gz: 5a383fe7e654d79ea3d292a6369e4ba1d1b177c03f8967c9d6ec4fca2d942563
3
+ metadata.gz: 105e63e07d147cd791c478f9351e73e1f71bbd861160b5a1391d99c7c0affc9d
4
+ data.tar.gz: cf2e6a358aeb0a7018d06a2bf48382ab01d768eb870589da0abddab7044278e3
5
5
  SHA512:
6
- metadata.gz: c284b721156bc30b0e818d8048513c023c2e931cb659d7211959f356c08f36f133a61494078edb35b24b490ccd6b15b5c71d7c61b1a42b6da14adab664517700
7
- data.tar.gz: 2be83f317ea5fa0e2e108ac81cbfbfaf1095c5738559555fafabcf0f215efaf1c08308f6f01b6fd337b1a190bc319367c7634e6a00a73a0ccbf029edd7471683
6
+ metadata.gz: fe005277c05790de2d906188fbc0ab3818b9dd27980bf68bdeb2e56ec3ef2f0184fc61224ddeb32c29689ad316f3179eb51dd4a3345bf423bdd7cd5d75569697
7
+ data.tar.gz: '0805b456eebbfc655bd5991c001b241b29bf614f154615be67be7124d3bc1fc95532a0612647ac1d56e05d10373c97c7f6e14489adb68481e24e6b5a03ff89c6'
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # XcframeworkConverter
2
-
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/xcframework_converter`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
1
+ # XCFrameworkConverter
2
+ [![Gem](https://img.shields.io/gem/v/xcframework_converter.svg)](https://rubygems.org/gems/xcframework_converter)
3
+ [![Twitter: @igormaka](https://img.shields.io/badge/contact-@igormaka-blue.svg?style=flat)](https://twitter.com/igormaka)
4
+ [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](./LICENSE.txt)
6
5
 
6
+ This little gem allows to take an ancient `.framework` (static or dynamic), and turn it into a fully fledged `.xcframework`. In addition, it will patch the binary to add an `arm64` simulator slice. There's also a CocoaPods patcher that allows this to operate without customizing the `Podfile` dependencies.
7
7
  ## Installation
8
8
 
9
9
  Add this line to your application's Gemfile:
@@ -22,17 +22,40 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ### CLI
26
+
27
+ ```bash
28
+ xcfconvert <path/to/Framework.framework>
29
+ ```
30
+
31
+ ### CocoaPods
32
+ In your podfile:
33
+ ```ruby
34
+ require 'xcframework_converter'
35
+ # Define your dependencies...
36
+ pre_install do |installer|
37
+ XCFrameworkConverter.convert_frameworks_to_xcframeworks!(installer)
38
+ end
39
+ ```
40
+
41
+ This will achieve two things:
42
+
43
+ 1. When a pod with vendored `.framework`-s is added, they will be converted to `.xcframework`-s.
44
+ 2. Upon each `pod install`, the corresponding pod specifications will be patched so that the project will consume the `.xcframework`-s correctly.
45
+
46
+ ## Is it reliable?
47
+ Sort of. The software is provided as is, with no guarantees of correctnes. It's meant to be a workaround. For the correct solution, ask the framework vendor for an update. However, PRs are welcome.
26
48
 
27
- ## Development
49
+ ## How does it work?
50
+ An XCFramework is basically a bundle of folders.
28
51
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
52
+ The tool will create the folder and its subfolders, write the correct `Info.plist`, and clean up the relevant fat binary files so that they contain only the relevant architectures.
30
53
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
54
+ Additionally, the tool will create a new, patched `arm64` binary for the iOS Simulator. For that, it uses the code and knowledge of [Bogo Giertler](https://github.com/bogo). The binary patching code is embedded in the gem. For more info, check Bogo's blog for the posts on how to patch a [static library](https://bogo.wtf/arm64-to-sim.html) and a [dynamic library](https://bogo.wtf/arm64-to-sim-dylibs.html).
32
55
 
33
56
  ## Contributing
34
57
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/xcframework_converter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/xcframework_converter/blob/master/CODE_OF_CONDUCT.md).
58
+ Pull requests are welcome on GitHub at https://github.com/igor-makarov/XCFrameworkConverter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/igor-makarov/XCFrameworkConverter/blob/master/CODE_OF_CONDUCT.md).
36
59
 
37
60
  ## License
38
61
 
@@ -40,4 +63,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
40
63
 
41
64
  ## Code of Conduct
42
65
 
43
- Everyone interacting in the XcframeworkConverter project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/xcframework_converter/blob/master/CODE_OF_CONDUCT.md).
66
+ Everyone interacting in the XcframeworkConverter project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/igor-makarov/XCFrameworkConverter/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cocoapods'
4
+ require 'cocoapods/xcode/xcframework'
5
+ require 'fileutils'
6
+ require 'xcodeproj'
7
+
8
+ # rubocop:disable Metrics/AbcSize
9
+
10
+ module XCFrameworkConverter
11
+ # Patches a binary (static or dynamic), turning an arm64-device into an arm64-simualtor.
12
+ # For more info:
13
+ # static libs: https://bogo.wtf/arm64-to-sim.html
14
+ # dylibs: https://bogo.wtf/arm64-to-sim-dylibs.html
15
+ module ArmPatcher
16
+ class << self
17
+ def patch_arm_binary(slice)
18
+ require 'macho'
19
+
20
+ case slice.build_type.linkage
21
+ when :dynamic
22
+ patch_arm_binary_dynamic(slice)
23
+ when :static
24
+ patch_arm_binary_static(slice)
25
+ end
26
+
27
+ slice.path.glob('**/arm64*.swiftinterface').each do |interface_file|
28
+ `sed -i '' -E 's/target arm64-apple-ios([0-9.]+) /target arm64-apple-ios\\1-simulator /g' "#{interface_file}"`
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def patch_arm_binary_dynamic(slice)
35
+ extracted_path = slice.path.join('arm64.dylib')
36
+ `xcrun lipo \"#{slice.binary_path}\" -thin arm64 -output \"#{extracted_path}\"`
37
+
38
+ file = MachO::MachOFile.new(extracted_path)
39
+ sdk_version = file[:LC_VERSION_MIN_IPHONEOS].first.version_string
40
+ `xcrun vtool -arch arm64 -set-build-version 7 #{sdk_version} #{sdk_version} -replace -output \"#{extracted_path}\" \"#{extracted_path}\"`
41
+ `xcrun lipo \"#{slice.binary_path}\" -replace arm64 \"#{extracted_path}\" -output \"#{slice.binary_path}\"`
42
+ extracted_path.rmtree
43
+ end
44
+
45
+ def arm2sim_path
46
+ Pathname.new(__FILE__).dirname.join('../arm2sim.swift')
47
+ end
48
+
49
+ def patch_arm_binary_static(slice)
50
+ extracted_path = slice.path.join('arm64.a')
51
+ `xcrun lipo \"#{slice.binary_path}\" -thin arm64 -output \"#{extracted_path}\"`
52
+ extracted_path_dir = slice.path.join('arm64-objects')
53
+ extracted_path_dir.mkdir
54
+ `cd \"#{extracted_path_dir}\" ; ar x \"#{extracted_path}\"`
55
+ Dir[extracted_path_dir.join('*.o')].each do |object_file|
56
+ file = MachO::MachOFile.new(object_file)
57
+ sdk_version = file[:LC_VERSION_MIN_IPHONEOS].first.version_string.to_i
58
+ `xcrun swift \"#{arm2sim_path}\" \"#{object_file}\" \"#{sdk_version}\" \"#{sdk_version}\"`
59
+ end
60
+ `cd \"#{extracted_path_dir}\" ; ar crv \"#{extracted_path}\" *.o`
61
+
62
+ `xcrun lipo \"#{slice.binary_path}\" -replace arm64 \"#{extracted_path}\" -output \"#{slice.binary_path}\"`
63
+ extracted_path_dir.rmtree
64
+ extracted_path.rmtree
65
+ end
66
+
67
+ public
68
+
69
+ def cleanup_unused_archs(slice)
70
+ supported_archs = slice.supported_archs
71
+ unsupported_archs = `xcrun lipo \"#{slice.binary_path}\" -archs`.split - supported_archs
72
+ unsupported_archs.each do |arch|
73
+ `xcrun lipo \"#{slice.binary_path}\" -remove \"#{arch}\" -output \"#{slice.binary_path}\"`
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'arm_patcher'
4
+ require_relative 'xcframework_ext'
5
+
6
+ require 'cocoapods'
7
+ require 'cocoapods/xcode/xcframework'
8
+ require 'fileutils'
9
+ require 'xcodeproj'
10
+
11
+ # rubocop:disable Metrics/AbcSize
12
+
13
+ # Converts a framework (static or dynamic) to an XCFramework, adding an arm64 simulator patch.
14
+ # For more info:
15
+ # static libs: https://bogo.wtf/arm64-to-sim.html
16
+ # dylibs: https://bogo.wtf/arm64-to-sim-dylibs.html
17
+ module XCFrameworkConverter
18
+ class << self
19
+ def plist_template_path
20
+ Pathname.new(__FILE__).dirname.join('../xcframework_template.plist')
21
+ end
22
+
23
+ def convert_framework_to_xcframework(path)
24
+ plist = Xcodeproj::Plist.read_from_path(plist_template_path)
25
+ xcframework_path = Pathname.new(path).sub_ext('.xcframework')
26
+ xcframework_path.mkdir
27
+ plist['AvailableLibraries'].each do |slice|
28
+ slice_path = xcframework_path.join(slice['LibraryIdentifier'])
29
+ slice_path.mkdir
30
+ slice['LibraryPath'] = File.basename(path)
31
+ FileUtils.cp_r(path, slice_path)
32
+ end
33
+ Xcodeproj::Plist.write_to_path(plist, xcframework_path.join('Info.plist'))
34
+ FileUtils.rm_rf(path)
35
+ final_framework = Pod::Xcode::XCFramework.open_xcframework(xcframework_path)
36
+ final_framework.slices.each do |slice|
37
+ ArmPatcher.patch_arm_binary(slice) if slice.platform == :ios && slice.platform_variant == :simulator
38
+ ArmPatcher.cleanup_unused_archs(slice)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'arm_patcher'
4
+ require_relative 'xcframework_ext'
5
+
6
+ require 'cocoapods'
7
+ require 'cocoapods/xcode/xcframework'
8
+ require 'fileutils'
9
+ require 'xcodeproj'
10
+
11
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
12
+
13
+ # Converts a framework (static or dynamic) to an XCFramework, adding an arm64 simulator patch.
14
+ # For more info:
15
+ # static libs: https://bogo.wtf/arm64-to-sim.html
16
+ # dylibs: https://bogo.wtf/arm64-to-sim-dylibs.html
17
+ module XCFrameworkConverter
18
+ class << self
19
+ def patch_xcframework(xcframework_path)
20
+ xcframework = Pod::Xcode::XCFramework.open_xcframework(xcframework_path)
21
+
22
+ return nil if xcframework.slices.any? do |slice|
23
+ slice.platform == :ios &&
24
+ slice.platform_variant == :simulator &&
25
+ slice.supported_archs.include?('arm64')
26
+ end
27
+
28
+ original_arm_slice_identifier = xcframework.slices.find do |slice|
29
+ slice.platform == :ios && slice.supported_archs.include?('arm64')
30
+ end.identifier
31
+
32
+ patched_arm_slice_identifier = 'ios-arm64-simulator'
33
+
34
+ STDERR.puts "Will patch #{xcframework_path}: #{original_arm_slice_identifier} -> #{patched_arm_slice_identifier}"
35
+
36
+ plist = xcframework.plist
37
+ slice_plist_to_add = plist['AvailableLibraries'].find { |s| s['LibraryIdentifier'] == original_arm_slice_identifier }.dup
38
+ slice_plist_to_add['LibraryIdentifier'] = patched_arm_slice_identifier
39
+ slice_plist_to_add['SupportedArchitectures'] = ['arm64']
40
+ slice_plist_to_add['SupportedPlatformVariant'] = 'simulator'
41
+ plist['AvailableLibraries'] << slice_plist_to_add
42
+
43
+ FileUtils.rm_rf(xcframework_path.join(patched_arm_slice_identifier))
44
+ FileUtils.cp_r(xcframework_path.join(original_arm_slice_identifier), xcframework_path.join(patched_arm_slice_identifier))
45
+
46
+ Xcodeproj::Plist.write_to_path(plist, xcframework_path.join('Info.plist'))
47
+
48
+ xcframework = Pod::Xcode::XCFramework.open_xcframework(xcframework_path)
49
+
50
+ slice = xcframework.slices.find { |s| s.identifier == patched_arm_slice_identifier }
51
+
52
+ ArmPatcher.patch_arm_binary(slice)
53
+ ArmPatcher.cleanup_unused_archs(slice)
54
+
55
+ xcframework_path
56
+ end
57
+ end
58
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module XCFrameworkConverter
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cocoapods'
4
+ require 'cocoapods/xcode/xcframework'
5
+
6
+ module Pod
7
+ module Xcode
8
+ # open XCFramework
9
+ class XCFramework
10
+ def self.open_xcframework(xcframework_path)
11
+ if instance_method(:initialize).arity == 2
12
+ new(File.basename(xcframework_path), xcframework_path.realpath)
13
+ else
14
+ new(xcframework_path.realpath)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'xcframework_converter/creation'
4
+ require_relative 'xcframework_converter/patching'
3
5
  require_relative 'xcframework_converter/version'
4
6
 
5
7
  require 'cocoapods'
@@ -17,108 +19,56 @@ module XCFrameworkConverter
17
19
  class << self
18
20
  def convert_frameworks_to_xcframeworks!(installer)
19
21
  installer.analysis_result.specifications.each do |spec|
20
- next unless spec.attributes_hash['vendored_frameworks']
21
-
22
- frameworks = Array(spec.attributes_hash['vendored_frameworks'])
23
- unconverted_frameworks = frameworks.select { |f| File.extname(f) == '.framework' }
24
- next if unconverted_frameworks.empty?
25
- next if spec.local?
22
+ next if spec.source && spec.local?
26
23
 
27
24
  pod_path = installer.sandbox.pod_dir(Pod::Specification.root_name(spec.name))
28
- convert_xcframeworks_if_present(pod_path)
29
25
 
30
- converted_frameworks = unconverted_frameworks.map do |path|
31
- Pathname.new(path).sub_ext('.xcframework').to_s
32
- end
33
- spec.attributes_hash['vendored_frameworks'] = frameworks - unconverted_frameworks + converted_frameworks
34
- # some pods put these as a way to NOT support arm64 sim
35
- spec.attributes_hash['pod_target_xcconfig']&.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]')
36
- spec.attributes_hash['user_target_xcconfig']&.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]')
37
- end
38
- end
26
+ xcframeworks_to_patch = spec.available_platforms.map do |platform|
27
+ consumer = Pod::Specification::Consumer.new(spec, platform)
28
+ consumer.vendored_frameworks.select { |f| File.extname(f) == '.xcframework' }
29
+ .map { |f| pod_path.join(f) }
30
+ end.flatten.uniq
39
31
 
40
- def convert_xcframeworks_if_present(pod_path)
41
- unconverted_paths = Dir[pod_path.join('**/*.framework')] - Dir[pod_path.join('**/*.xcframework/**/*')]
42
- unconverted_paths.each do |path|
43
- convert_framework_to_xcframework(path)
44
- end
45
- end
32
+ patch_xcframeworks_if_needed(spec, xcframeworks_to_patch)
46
33
 
47
- def plist_template_path
48
- Pathname.new(__FILE__).dirname.join('xcframework_template.plist')
49
- end
34
+ frameworks_to_convert = spec.available_platforms.map do |platform|
35
+ consumer = Pod::Specification::Consumer.new(spec, platform)
36
+ before_rename = consumer.vendored_frameworks.select { |f| File.extname(f) == '.framework' }
37
+ next [] if before_rename.empty?
50
38
 
51
- def convert_framework_to_xcframework(path)
52
- plist = Xcodeproj::Plist.read_from_path(plist_template_path)
53
- xcframework_path = Pathname.new(path).sub_ext('.xcframework')
54
- xcframework_path.mkdir
55
- plist['AvailableLibraries'].each do |slice|
56
- slice_path = xcframework_path.join(slice['LibraryIdentifier'])
57
- slice_path.mkdir
58
- slice['LibraryPath'] = File.basename(path)
59
- FileUtils.cp_r(path, slice_path)
60
- end
61
- Xcodeproj::Plist.write_to_path(plist, xcframework_path.join('Info.plist'))
62
- FileUtils.rm_rf(path)
63
- final_framework = Pod::Xcode::XCFramework.new(xcframework_path.realpath)
64
- final_framework.slices.each do |slice|
65
- patch_arm_binary(slice) if slice.platform == :ios && slice.platform_variant == :simulator
66
- cleanup_unused_archs(slice)
67
- end
68
- end
39
+ after_rename = before_rename.map { |f| Pathname.new(f).sub_ext('.xcframework').to_s }
40
+ proxy = Pod::Specification::DSL::PlatformProxy.new(spec, platform.symbolic_name)
41
+ proxy.vendored_frameworks = consumer.vendored_frameworks - before_rename + after_rename
42
+ before_rename.map { |f| pod_path.join(f) }
43
+ end.flatten.uniq
69
44
 
70
- def patch_arm_binary(slice)
71
- require 'macho'
72
-
73
- case slice.build_type.linkage
74
- when :dynamic
75
- patch_arm_binary_dynamic(slice)
76
- when :static
77
- patch_arm_binary_static(slice)
45
+ convert_xcframeworks_if_present(spec, frameworks_to_convert)
78
46
  end
79
47
  end
80
48
 
81
- def patch_arm_binary_dynamic(slice)
82
- extracted_path = slice.path.join('arm64.dylib')
83
- `xcrun lipo \"#{slice.binary_path}\" -thin arm64 -output \"#{extracted_path}\"`
84
-
85
- file = MachO::MachOFile.new(extracted_path)
86
- sdk_version = file[:LC_VERSION_MIN_IPHONEOS].first.version_string
87
- `xcrun vtool -arch arm64 -set-build-version 7 #{sdk_version} #{sdk_version} -replace -output \"#{extracted_path}\" \"#{extracted_path}\"`
88
- `xcrun lipo \"#{slice.binary_path}\" -replace arm64 \"#{extracted_path}\" -output \"#{slice.binary_path}\"`
89
- extracted_path.rmtree
90
- end
91
-
92
- def arm2sim_path
93
- Pathname.new(__FILE__).dirname.join('arm2sim.swift')
49
+ def convert_xcframeworks_if_present(spec, frameworks_to_convert)
50
+ frameworks_to_convert.each do |path|
51
+ convert_framework_to_xcframework(path) if Dir.exist?(path)
52
+ end
53
+ remove_troublesome_xcconfig_items(spec) unless frameworks_to_convert.empty?
94
54
  end
95
55
 
96
- def patch_arm_binary_static(slice)
97
- extracted_path = slice.path.join('arm64.a')
98
- `xcrun lipo \"#{slice.binary_path}\" -thin arm64 -output \"#{extracted_path}\"`
99
- extracted_path_dir = slice.path.join('arm64-objects')
100
- extracted_path_dir.mkdir
101
- `cd \"#{extracted_path_dir}\" ; ar x \"#{extracted_path}\"`
102
- Dir[extracted_path_dir.join('*.o')].each do |object_file|
103
- file = MachO::MachOFile.new(object_file)
104
- sdk_version = file[:LC_VERSION_MIN_IPHONEOS].first.version_string.to_i
105
- `xcrun swift \"#{arm2sim_path}\" \"#{object_file}\" \"#{sdk_version}\" \"#{sdk_version}\"`
106
- end
107
- `cd \"#{extracted_path_dir}\" ; ar crv \"#{extracted_path}\" *.o`
56
+ def patch_xcframeworks_if_needed(spec, xcframeworks)
57
+ patched = xcframeworks.map do |path|
58
+ next nil unless Dir.exist?(path)
108
59
 
109
- `xcrun lipo \"#{slice.binary_path}\" -replace arm64 \"#{extracted_path}\" -output \"#{slice.binary_path}\"`
110
- extracted_path_dir.rmtree
111
- extracted_path.rmtree
60
+ patch_xcframework(path)
61
+ end.compact
62
+ remove_troublesome_xcconfig_items(spec) unless patched.empty?
112
63
  end
113
64
 
114
- def cleanup_unused_archs(slice)
115
- supported_archs = slice.supported_archs
116
- unsupported_archs = `xcrun lipo \"#{slice.binary_path}\" -archs`.split - supported_archs
117
- unsupported_archs.each do |arch|
118
- `xcrun lipo \"#{slice.binary_path}\" -remove \"#{arch}\" -output \"#{slice.binary_path}\"`
119
- end
65
+ def remove_troublesome_xcconfig_items(spec)
66
+ # some pods put these as a way to NOT support arm64 sim
67
+ # may stop working if a pod decides to put these in a platform proxy
68
+ spec.attributes_hash['pod_target_xcconfig']&.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]')
69
+ spec.attributes_hash['user_target_xcconfig']&.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]')
70
+ spec.attributes_hash['pod_target_xcconfig']&.delete('VALID_ARCHS[sdk=iphonesimulator*]')
71
+ spec.attributes_hash['user_target_xcconfig']&.delete('VALID_ARCHS[sdk=iphonesimulator*]')
120
72
  end
121
73
  end
122
74
  end
123
-
124
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcframework_converter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Makarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-19 00:00:00.000000000 Z
11
+ date: 2022-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -63,7 +63,11 @@ files:
63
63
  - bin/xcfconvert
64
64
  - lib/arm2sim.swift
65
65
  - lib/xcframework_converter.rb
66
+ - lib/xcframework_converter/arm_patcher.rb
67
+ - lib/xcframework_converter/creation.rb
68
+ - lib/xcframework_converter/patching.rb
66
69
  - lib/xcframework_converter/version.rb
70
+ - lib/xcframework_converter/xcframework_ext.rb
67
71
  - lib/xcframework_template.plist
68
72
  homepage: https://github.com/igor-makarov/XCFrameworkConverter
69
73
  licenses: