cocoapods-mangle 1.0.1 → 1.1.1

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
- SHA1:
3
- metadata.gz: a7219337c8214823557116123d5ac17d7fa68727
4
- data.tar.gz: 6c26d23f03759a183767d1c11d4e288e466db99d
2
+ SHA256:
3
+ metadata.gz: 8e3e5ea98b00fef6e6fe353b1d5af1a3cea60e8754232da6e68af0f963672b3a
4
+ data.tar.gz: 1acb90d8e00f8067719da05d0be65b06fed8c53260e311c07ac23e93a274b80f
5
5
  SHA512:
6
- metadata.gz: 38488de2b6e008c63a81c6c2521daad4dd6049af22c1c4550c19a29ecb71fe30cce656d254c639ce4a68ac71d2746e1158a8b0c2077b81dc8451c2803e3b421e
7
- data.tar.gz: 115e91d3f16a99339f9abbc5da75a47aef7656f4a21b2864fe8a3430f6ff43fbaf542d3b04546e08bb74485d4ce21d18b056ecfaaebefb2bc877da51bf7a67d3
6
+ metadata.gz: 47e25cb2dc8d9472883d9015d696b551ff4ddbb282f818081bcf63a9b0d961c2ee64e029d0524984df558ae6ff17ddc40a626be9f1553cc5664df3911092c364
7
+ data.tar.gz: 335dc5007733d490e97bb3f8d06dab0d122ffea13575a6b684f921286e9f4d22291697083ef5e36a7b53376ec36166e6f36bdb573f206b01c89f41b124268120
@@ -23,6 +23,8 @@ module CocoapodsMangle
23
23
  # @return [Array<String>] The classes defined in the binaries
24
24
  def self.classes(binaries)
25
25
  all_symbols = run_nm(binaries, '-gU')
26
+ all_symbols = all_symbols.reject { |symbol| swift_symbol?(symbol) }
27
+
26
28
  class_symbols = all_symbols.select do |symbol|
27
29
  symbol[/OBJC_CLASS_\$_/]
28
30
  end
@@ -36,6 +38,8 @@ module CocoapodsMangle
36
38
  # @return [Array<String>] The constants defined in the binaries
37
39
  def self.constants(binaries)
38
40
  all_symbols = run_nm(binaries, '-gU')
41
+ all_symbols = all_symbols.reject { |symbol| swift_symbol?(symbol) }
42
+
39
43
  consts = all_symbols.select { |const| const[/ S /] }
40
44
  consts = consts.reject { |const| const[/_OBJC_/] }
41
45
  consts = consts.reject { |const| const[/__block_descriptor.*/] }
@@ -110,8 +114,51 @@ module CocoapodsMangle
110
114
  defines
111
115
  end
112
116
 
117
+ # Is symbol a Swift symbol? This is used to avoid mangling Swift.
118
+ # @param [String] symbol
119
+ # The symbol to check
120
+ # @return [Boolean] true if it is a Swift symbol, false otherwise
121
+ def self.swift_symbol?(symbol)
122
+ # Swift binaries have many symbols starting with $s_ that should be excluded
123
+ # e.g. '0000000000000258 S _$s9ManglePod9SomeClassCMF'
124
+ symbol[/\$s/] ||
125
+ # Internal Swift symbols starting with __swift or ___swift such as should not be mangled
126
+ # e.g. '00000000000050ac S ___swift_reflection_version'
127
+ symbol[/ __(_)?swift/] ||
128
+ # Internal Swift symbols starting with Swift such as should not be mangled
129
+ # e.g. 'Swift51Override'
130
+ symbol[/Swift/] ||
131
+ # Swift symbols starting with symbolic should be ignored
132
+ # e.g. '0000000000000248 S symbolic _____ 9ManglePod9SomeClassC'
133
+ symbol[/symbolic /] ||
134
+ # Swift symbol references to Objective-C symbols should not be mangled
135
+ # e.g. '00000000000108ca S _associated conformance So26SCNetworkReachabilityFlagsVs10SetAlgebraSCSQ'
136
+ symbol[/associated conformance/] ||
137
+ # " globalinit" symbols should be skipped
138
+ # e.g. 0000000000000000 T " globalinit_33_A313450CFC1FC3D0CBEF4411412DB9E8_func0"
139
+ symbol[/ globalinit/] ||
140
+ # "globalinit" symbols should be skipped
141
+ # e.g. 0000000000000000 T "globalinit_33_A313450CFC1FC3D0CBEF4411412DB9E8_func0"
142
+ symbol[/globalinit/] ||
143
+ # Swift classes inheriting from Objective-C classes should not be mangled
144
+ # e.g. '0000000000000290 S _OBJC_CLASS_$__TtC9ManglePod19SomeFoundationClass'
145
+ symbol[/_OBJC_CLASS_\$__/] ||
146
+ # Swift symbols starting with ____ should be ignored
147
+ # e.g. ' ____ 6Lottie15AnimatedControlCC'
148
+ symbol[/____ /] ||
149
+ # _PROTOCOL symbols should be skipped
150
+ # e.g. 0000000000000000 _PROTOCOL_METHOD_TYPES_CAAction
151
+ symbol[/_PROTOCOL/] ||
152
+ # _swiftoverride_ symbols should be skipped
153
+ # e.g. _swiftoverride_
154
+ symbol[/_\w+_swiftoverride_/] ||
155
+ # _Zxxxswift symbols should be skipped
156
+ # e.g. _ZN5swift34swift50override_conformsToProtocolEPKNS
157
+ symbol[/_Z\w+swift/]
158
+ end
159
+
113
160
  def self.run_nm(binaries, flags)
114
161
  `nm #{flags} #{binaries.join(' ')}`.split("\n")
115
162
  end
116
163
  end
117
- end
164
+ end
@@ -1,4 +1,4 @@
1
1
  module CocoapodsMangle
2
2
  NAME = 'cocoapods-mangle'
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.1'
4
4
  end
@@ -36,60 +36,111 @@ describe CocoapodsMangle do
36
36
  before(:each) do
37
37
  fixtures_dir = File.expand_path("#{File.dirname(__FILE__)}/../fixtures")
38
38
  FileUtils.copy_entry(File.join(fixtures_dir, 'project'), project_dir)
39
- FileUtils.copy_entry(File.join(fixtures_dir, 'pod'), pod_dir)
39
+ FileUtils.copy_entry(File.join(fixtures_dir, podpsec_fixture_dir), pod_dir)
40
40
  File.open(File.join(project_dir, 'Podfile'), 'w') do |podfile|
41
41
  podfile.write(podfile_contents)
42
42
  end
43
43
  end
44
44
 
45
- context 'without frameworks' do
46
- let(:podfile_contents) do
47
- <<~PODFILE
48
- platform :ios, '8.0'
49
- plugin 'cocoapods-mangle'
50
- target 'Mangle Integration' do
51
- pod 'ManglePod', path: '../pod'
52
- end
53
- PODFILE
54
- end
55
- let(:expected_defines) do
56
- %w[
57
- PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
58
- CPMObject=Mangle_Integration_CPMObject
59
- CPMConstant=Mangle_Integration_CPMConstant
60
- CPMStringFromIntegerFunction=Mangle_Integration_CPMStringFromIntegerFunction
61
- cpm_doSomethingWithoutParams=Mangle_Integration_cpm_doSomethingWithoutParams
62
- cpm_doSomethingWithParam=Mangle_Integration_cpm_doSomethingWithParam
63
- ]
45
+ context "with a Swift pod" do
46
+ let(:podpsec_fixture_dir) { "swift-pod" }
47
+
48
+ context 'without frameworks' do
49
+ let(:podfile_contents) do
50
+ <<~PODFILE
51
+ platform :ios, '10.0'
52
+ plugin 'cocoapods-mangle'
53
+ target 'Mangle Integration' do
54
+ pod 'ManglePod', path: '../pod'
55
+ pod 'lottie-ios'
56
+ end
57
+ PODFILE
58
+ end
59
+ let(:expected_defines) do
60
+ %w[
61
+ PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
62
+ PodsDummy_lottie_ios=Mangle_Integration_PodsDummy_lottie_ios
63
+ ]
64
+ end
65
+
66
+ include_examples 'mangling integration'
64
67
  end
65
68
 
66
- include_examples 'mangling integration'
69
+ context 'with frameworks' do
70
+ let(:podfile_contents) do
71
+ <<~PODFILE
72
+ platform :ios, '10.0'
73
+ use_frameworks!
74
+ plugin 'cocoapods-mangle'
75
+ target 'Mangle Integration' do
76
+ pod 'ManglePod', path: '../pod'
77
+ end
78
+ PODFILE
79
+ end
80
+ let(:expected_defines) do
81
+ %w[
82
+ ManglePodVersionNumber=Mangle_Integration_ManglePodVersionNumber
83
+ ManglePodVersionString=Mangle_Integration_ManglePodVersionString
84
+ PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
85
+ ]
86
+ end
87
+
88
+ include_examples 'mangling integration'
89
+ end
67
90
  end
68
91
 
69
- context 'with frameworks' do
70
- let(:podfile_contents) do
71
- <<~PODFILE
72
- platform :ios, '8.0'
73
- use_frameworks!
74
- plugin 'cocoapods-mangle'
75
- target 'Mangle Integration' do
76
- pod 'ManglePod', path: '../pod'
77
- end
78
- PODFILE
92
+ context "with an Objective-C pod" do
93
+ let(:podpsec_fixture_dir) { "objc-pod" }
94
+
95
+ context 'without frameworks' do
96
+ let(:podfile_contents) do
97
+ <<~PODFILE
98
+ platform :ios, '10.0'
99
+ plugin 'cocoapods-mangle'
100
+ target 'Mangle Integration' do
101
+ pod 'ManglePod', path: '../pod'
102
+ end
103
+ PODFILE
104
+ end
105
+ let(:expected_defines) do
106
+ %w[
107
+ PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
108
+ CPMObject=Mangle_Integration_CPMObject
109
+ CPMConstant=Mangle_Integration_CPMConstant
110
+ CPMStringFromIntegerFunction=Mangle_Integration_CPMStringFromIntegerFunction
111
+ cpm_doSomethingWithoutParams=Mangle_Integration_cpm_doSomethingWithoutParams
112
+ cpm_doSomethingWithParam=Mangle_Integration_cpm_doSomethingWithParam
113
+ ]
114
+ end
115
+
116
+ include_examples 'mangling integration'
79
117
  end
80
- let(:expected_defines) do
81
- %w[
82
- ManglePodVersionNumber=Mangle_Integration_ManglePodVersionNumber
83
- ManglePodVersionString=Mangle_Integration_ManglePodVersionString
84
- PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
85
- CPMObject=Mangle_Integration_CPMObject
86
- CPMConstant=Mangle_Integration_CPMConstant
87
- CPMStringFromIntegerFunction=Mangle_Integration_CPMStringFromIntegerFunction
88
- cpm_doSomethingWithoutParams=Mangle_Integration_cpm_doSomethingWithoutParams
89
- cpm_doSomethingWithParam=Mangle_Integration_cpm_doSomethingWithParam
90
- ]
118
+
119
+ context 'with frameworks' do
120
+ let(:podfile_contents) do
121
+ <<~PODFILE
122
+ platform :ios, '10.0'
123
+ use_frameworks!
124
+ plugin 'cocoapods-mangle'
125
+ target 'Mangle Integration' do
126
+ pod 'ManglePod', path: '../pod'
127
+ end
128
+ PODFILE
129
+ end
130
+ let(:expected_defines) do
131
+ %w[
132
+ ManglePodVersionNumber=Mangle_Integration_ManglePodVersionNumber
133
+ ManglePodVersionString=Mangle_Integration_ManglePodVersionString
134
+ PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
135
+ CPMObject=Mangle_Integration_CPMObject
136
+ CPMConstant=Mangle_Integration_CPMConstant
137
+ CPMStringFromIntegerFunction=Mangle_Integration_CPMStringFromIntegerFunction
138
+ cpm_doSomethingWithoutParams=Mangle_Integration_cpm_doSomethingWithoutParams
139
+ cpm_doSomethingWithParam=Mangle_Integration_cpm_doSomethingWithParam
140
+ ]
141
+ end
142
+
143
+ include_examples 'mangling integration'
91
144
  end
92
-
93
- include_examples 'mangling integration'
94
145
  end
95
146
  end
@@ -20,6 +20,7 @@ describe CocoapodsMangle::Defines do
20
20
  %w[
21
21
  PINDataTaskOperation
22
22
  PINProgressiveImage
23
+ PodsDummy_ManglePod
23
24
  PodsDummy_PINRemoteImage
24
25
  PINRemoteImageCallbacks
25
26
  PINRemoteImageCategoryManager
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-mangle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Treanor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-08 00:00:00.000000000 Z
11
+ date: 2023-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: 1.11.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: 1.11.3
27
27
  description: Mangling your dependencies symbols allows more than one copy of a dependency
28
28
  to exist without errors. This plugin mangles your dependecies to make this possible
29
29
  email:
@@ -72,8 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
- rubyforge_project:
76
- rubygems_version: 2.5.2.1
75
+ rubygems_version: 3.1.6
77
76
  signing_key:
78
77
  specification_version: 4
79
78
  summary: A CocoaPods plugin which mangles the symbols of your dependencies