cocoapods-mangle 1.0.1 → 1.1.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
- SHA1:
3
- metadata.gz: a7219337c8214823557116123d5ac17d7fa68727
4
- data.tar.gz: 6c26d23f03759a183767d1c11d4e288e466db99d
2
+ SHA256:
3
+ metadata.gz: 12bdc6a5d84c28840e77fd5b88b8a460460eec6886e77a069dd09764e7288d88
4
+ data.tar.gz: 5d8d4f20a4ddc3a6d0f580e9e27fc1836989a2ea47e62c69033d1c6354acdfdd
5
5
  SHA512:
6
- metadata.gz: 38488de2b6e008c63a81c6c2521daad4dd6049af22c1c4550c19a29ecb71fe30cce656d254c639ce4a68ac71d2746e1158a8b0c2077b81dc8451c2803e3b421e
7
- data.tar.gz: 115e91d3f16a99339f9abbc5da75a47aef7656f4a21b2864fe8a3430f6ff43fbaf542d3b04546e08bb74485d4ce21d18b056ecfaaebefb2bc877da51bf7a67d3
6
+ metadata.gz: b0d0292dc9c564f905f3e140c6401dffecf45fbfb4df9659365219d33486ea7c22c24beb3730fa494be71fd5f7cfe3d80c2bce6dbb4b54edbb5e382e73f1cbf8
7
+ data.tar.gz: 7400bc11b992f41aeb45f2f1747c6eb1f90c5cb9196425a0827632f063085a57e4e515d6da08e10e75c11452dd0e96619e0e4eefae33b60f108fee26f4b67663
@@ -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,6 +114,31 @@ 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
+ # Swift symbols starting with _symbolic should be ignored
129
+ # e.g. '0000000000000248 S _symbolic _____ 9ManglePod9SomeClassC'
130
+ symbol[/ _symbolic/] ||
131
+ # Swift symbol references to Objective-C symbols should not be mangled
132
+ # e.g. '00000000000108ca S _associated conformance So26SCNetworkReachabilityFlagsVs10SetAlgebraSCSQ'
133
+ symbol[/associated conformance/] ||
134
+ # _globalinit symbols should be skipped
135
+ # e.g. 0000000000000000 T _globalinit_33_A313450CFC1FC3D0CBEF4411412DB9E8_func0
136
+ symbol[/ _globalinit/] ||
137
+ # Swift classes inheriting from Objective-C classes should not be mangled
138
+ # e.g. '0000000000000290 S _OBJC_CLASS_$__TtC9ManglePod19SomeFoundationClass'
139
+ symbol[/_OBJC_CLASS_\$__/]
140
+ end
141
+
113
142
  def self.run_nm(binaries, flags)
114
143
  `nm #{flags} #{binaries.join(' ')}`.split("\n")
115
144
  end
@@ -1,4 +1,4 @@
1
1
  module CocoapodsMangle
2
2
  NAME = 'cocoapods-mangle'
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
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 'Alamofire', '5.2.2'
56
+ end
57
+ PODFILE
58
+ end
59
+ let(:expected_defines) do
60
+ %w[
61
+ PodsDummy_ManglePod=Mangle_Integration_PodsDummy_ManglePod
62
+ PodsDummy_Alamofire=Mangle_Integration_PodsDummy_Alamofire
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.0
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: 2020-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods
@@ -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.0.3
77
76
  signing_key:
78
77
  specification_version: 4
79
78
  summary: A CocoaPods plugin which mangles the symbols of your dependencies