cocoapods-swordfish 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +35 -0
  3. data/lib/cocoapods_plugin.rb +86 -0
  4. data/lib/gem_version.rb +11 -0
  5. data/lib/swordfish/command/archive.rb +187 -0
  6. data/lib/swordfish/command/auto.rb +192 -0
  7. data/lib/swordfish/command/config.rb +70 -0
  8. data/lib/swordfish/command/repo/update.rb +42 -0
  9. data/lib/swordfish/command/spec/create.rb +78 -0
  10. data/lib/swordfish/command/spec/push.rb +114 -0
  11. data/lib/swordfish/command/swordfish.rb +41 -0
  12. data/lib/swordfish/command.rb +2 -0
  13. data/lib/swordfish/config/config.rb +137 -0
  14. data/lib/swordfish/config/config_asker.rb +57 -0
  15. data/lib/swordfish/config/config_builder.rb +216 -0
  16. data/lib/swordfish/helpers/build_helper.rb +160 -0
  17. data/lib/swordfish/helpers/build_utils.rb +94 -0
  18. data/lib/swordfish/helpers/framework.rb +85 -0
  19. data/lib/swordfish/helpers/framework_builder.rb +451 -0
  20. data/lib/swordfish/helpers/library.rb +54 -0
  21. data/lib/swordfish/helpers/library_builder.rb +90 -0
  22. data/lib/swordfish/helpers/sources_helper.rb +38 -0
  23. data/lib/swordfish/helpers/spec_creator.rb +167 -0
  24. data/lib/swordfish/helpers/spec_files_helper.rb +76 -0
  25. data/lib/swordfish/helpers/spec_source_creator.rb +266 -0
  26. data/lib/swordfish/helpers/upload_helper.rb +94 -0
  27. data/lib/swordfish/hmap/hmap_generator.rb +59 -0
  28. data/lib/swordfish/hmap/pod_target.rb +92 -0
  29. data/lib/swordfish/hmap/podfile_dsl.rb +36 -0
  30. data/lib/swordfish/hmap/post_install_hook_context.rb +41 -0
  31. data/lib/swordfish/hmap/xcconfig.rb +99 -0
  32. data/lib/swordfish/hmap.rb +4 -0
  33. data/lib/swordfish/native/acknowledgements.rb +27 -0
  34. data/lib/swordfish/native/analyzer.rb +55 -0
  35. data/lib/swordfish/native/file_accessor.rb +28 -0
  36. data/lib/swordfish/native/installation_options.rb +25 -0
  37. data/lib/swordfish/native/installer.rb +135 -0
  38. data/lib/swordfish/native/linter.rb +25 -0
  39. data/lib/swordfish/native/path_source.rb +33 -0
  40. data/lib/swordfish/native/pod_source_installer.rb +19 -0
  41. data/lib/swordfish/native/pod_target_installer.rb +94 -0
  42. data/lib/swordfish/native/podfile.rb +105 -0
  43. data/lib/swordfish/native/podfile_env.rb +36 -0
  44. data/lib/swordfish/native/podfile_generator.rb +195 -0
  45. data/lib/swordfish/native/podspec_finder.rb +24 -0
  46. data/lib/swordfish/native/resolver.rb +223 -0
  47. data/lib/swordfish/native/source.rb +35 -0
  48. data/lib/swordfish/native/sources_manager.rb +19 -0
  49. data/lib/swordfish/native/specification.rb +31 -0
  50. data/lib/swordfish/native/target_architectures.rb +79 -0
  51. data/lib/swordfish/native/target_validator.rb +41 -0
  52. data/lib/swordfish/native/validator.rb +39 -0
  53. data/lib/swordfish/native.rb +16 -0
  54. data/lib/swordfish.rb +2 -0
  55. metadata +167 -0
@@ -0,0 +1,35 @@
1
+
2
+
3
+ require 'cocoapods'
4
+
5
+ module Pod
6
+ class Source
7
+ # Returns the path of the specification with the given name and version.
8
+ #
9
+ # @param [String] name
10
+ # the name of the Pod.
11
+ #
12
+ # @param [Version,String] version
13
+ # the version for the specification.
14
+ #
15
+ # @return [Pathname] The path of the specification.
16
+ #
17
+ def specification_path(name, version)
18
+ raise ArgumentError, 'No name' unless name
19
+ raise ArgumentError, 'No version' unless version
20
+
21
+ path = pod_path(name) + version.to_s
22
+
23
+ specification_path = Specification::VALID_EXTNAME
24
+ .map { |extname| "#{name}#{extname}" }
25
+ .map { |file| path + file }
26
+ .find(&:exist?)
27
+
28
+ unless specification_path
29
+ raise StandardError, "Unable to find the specification #{name} " \
30
+ "(#{version}) in the #{self.name} source."
31
+ end
32
+ specification_path
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
1
+
2
+ require 'cocoapods'
3
+ require 'swordfish/config/config'
4
+
5
+ module Pod
6
+ class Source
7
+ class Manager
8
+ # 源码 source
9
+ def code_source
10
+ source_with_name_or_url(Ocean.config.code_repo_url)
11
+ end
12
+
13
+ # 二进制 source
14
+ def binary_source
15
+ source_with_name_or_url(Ocean.config.binary_repo_url)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+
2
+
3
+ require 'swordfish/native/sources_manager'
4
+
5
+ module Pod
6
+ class Specification
7
+ VALID_EXTNAME = %w[.binary.podspec.json .binary.podspec .podspec.json .podspec].freeze
8
+ DEFAULT_TEMPLATE_EXTNAME = %w[.binary-template.podspec .binary-template.podspec.json].freeze
9
+
10
+ # TODO
11
+ # 可以在这里根据组件依赖二进制或源码调整 sources 的先后顺序
12
+ # 如果是源码,则调整 code_source 到最前面
13
+ # 如果是二进制,则调整 binary_source 到最前面
14
+ # 这样 CocoaPods 分析时,就会优先获取到对应源的 podspec
15
+ #
16
+ # 先要把 Podfile 里面的配置数据保存到单例中,再在这里判断,就不需要 resolver 了
17
+ # 但是现在这个插件依旧可用,重构需要时间 = = ,没什么动力去重构了呀。。。
18
+ #
19
+ # class Set
20
+ # old_initialize = instance_method(:initialize)
21
+ # define_method(:initialize) do |name, sources|
22
+ # if name == 'TDFAdaptationKit'
23
+ # sources_manager = Pod::Config.instance.sources_manager
24
+ # # sources = [sources_manager.binary_source, *sources].uniq
25
+ # sources = [sources_manager.code_source, *sources].uniq
26
+ # end
27
+ # old_initialize.bind(self).call(name, sources)
28
+ # end
29
+ # end
30
+ end
31
+ end
@@ -0,0 +1,79 @@
1
+
2
+ module Pod
3
+ class Target
4
+ def self.excluded_archs_simulator(post_context, is_arm64)
5
+ post_context.aggregate_targets.each do |one|
6
+ one.pod_targets.each { |target|
7
+ target.excluded_archs_simulator(is_arm64)
8
+ }
9
+ one.excluded_archs_simulator(is_arm64)
10
+ end
11
+ end
12
+ end
13
+
14
+ class PodTarget
15
+ def excluded_archs_simulator(is_arm64)
16
+ build_settings.each do |config_name, setting|
17
+ config_file = setting.xcconfig
18
+ if is_arm64
19
+ config_file.set_excluded_archs_simulator
20
+ else
21
+ config_file.set_excluded_archs_simulator_default
22
+ end
23
+ config_path = xcconfig_path(config_name)
24
+ config_file.save_as(config_path)
25
+ end
26
+ end
27
+ end
28
+
29
+ class AggregateTarget
30
+ def excluded_archs_simulator(is_arm64)
31
+ xcconfigs.each do |config_name, config_file|
32
+ if is_arm64
33
+ config_file.set_excluded_archs_simulator
34
+ else
35
+ config_file.set_excluded_archs_simulator_default
36
+ end
37
+ config_path = xcconfig_path(config_name)
38
+ config_file.save_as(config_path)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ module Xcodeproj
45
+ class Config
46
+ def set_excluded_archs_simulator_default
47
+ remove_attr_with_key('EXCLUDED_ARCHS[sdk=iphonesimulator*]"')
48
+ end
49
+
50
+ def set_excluded_archs_simulator
51
+ @attributes["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = 'arm64'
52
+ end
53
+ end
54
+
55
+ class Project
56
+ def self.set_archs_arm64(post_context, is_arm64)
57
+ temp_project = post_context.umbrella_targets.first.user_project
58
+ temp_project.targets.each do | target |
59
+ build_configurations = target.build_configurations
60
+ build_configurations.each do | config |
61
+ config.set_archs(is_arm64)
62
+ end
63
+ end
64
+ temp_project.save
65
+ end
66
+
67
+ module Object
68
+ class XCBuildConfiguration
69
+ def set_archs(is_arm64)
70
+ if is_arm64
71
+ build_settings['ARCHS'] = "arm64"
72
+ else
73
+ build_settings['ARCHS'] = "$(ARCHS_STANDARD)"
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,41 @@
1
+ module Pod
2
+ class Installer
3
+ class Xcode
4
+ # The {Xcode::TargetValidator} ensures that the pod and aggregate target
5
+ # configuration is valid for installation.
6
+ #
7
+ class TargetValidator
8
+
9
+
10
+
11
+ def verify_swift_pods_have_module_dependencies
12
+ error_messages = []
13
+ pod_targets.each do |pod_target|
14
+ next unless pod_target.uses_swift?
15
+
16
+ non_module_dependencies = []
17
+ pod_target.dependent_targets.each do |dependent_target|
18
+ next if !dependent_target.should_build? || dependent_target.defines_module?
19
+ non_module_dependencies << dependent_target.name
20
+ end
21
+
22
+ next if non_module_dependencies.empty?
23
+
24
+ error_messages << "The Swift pod `#{pod_target.name}` depends upon #{non_module_dependencies.map { |d| "`#{d}`" }.to_sentence}, " \
25
+ "which #{non_module_dependencies.count == 1 ? 'does' : 'do'} not define modules. " \
26
+ 'To opt into those targets generating module maps '\
27
+ '(which is necessary to import them from Swift when building as static libraries), ' \
28
+ 'you may set `use_modular_headers!` globally in your Podfile, '\
29
+ 'or specify `:modular_headers => true` for particular dependencies.'
30
+ end
31
+ return false
32
+
33
+ # raise Informative, 'The following Swift pods cannot yet be integrated '\
34
+ # "as static libraries:\n\n#{error_messages.join("\n\n")}"
35
+ end
36
+
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+
2
+ module Pod
3
+ class Validator
4
+ # def validate_source_url(spec)
5
+ # return if spec.source.nil? || spec.source[:http].nil?
6
+ # url = URI(spec.source[:http])
7
+ # return if url.scheme == 'https' || url.scheme == 'file'
8
+ # warning('http', "The URL (`#{url}`) doesn't use the encrypted HTTPs protocol. " \
9
+ # 'It is crucial for Pods to be transferred over a secure protocol to protect your users from man-in-the-middle attacks. '\
10
+ # 'This will be an error in future releases. Please update the URL to use https.')
11
+ # end
12
+ #
13
+ # Perform analysis for a given spec (or subspec)
14
+ #
15
+ def perform_extensive_analysis(spec)
16
+ return true
17
+ end
18
+
19
+ #覆盖
20
+ def check_file_patterns
21
+ FILE_PATTERNS.each do |attr_name|
22
+ next if %i(source_files resources).include? attr_name
23
+ if respond_to?("_validate_#{attr_name}", true)
24
+ send("_validate_#{attr_name}")
25
+ else
26
+ validate_nonempty_patterns(attr_name, :error)
27
+ end
28
+ end
29
+
30
+ _validate_header_mappings_dir
31
+ if consumer.spec.root?
32
+ _validate_license
33
+ _validate_module_map
34
+ end
35
+ end
36
+
37
+ def validate_source_url(spec); end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ require 'swordfish/native/acknowledgements'
2
+ require 'swordfish/native/analyzer'
3
+ require 'swordfish/native/file_accessor'
4
+ require 'swordfish/native/installation_options'
5
+ require 'swordfish/native/installer'
6
+ require 'swordfish/native/linter'
7
+ require 'swordfish/native/path_source'
8
+ require 'swordfish/native/pod_source_installer'
9
+ require 'swordfish/native/pod_target_installer'
10
+ require 'swordfish/native/podfile'
11
+ require 'swordfish/native/podfile_generator'
12
+ require 'swordfish/native/podspec_finder'
13
+ require 'swordfish/native/resolver'
14
+ require 'swordfish/native/source'
15
+ require 'swordfish/native/target_validator'
16
+ require 'swordfish/native/validator'
data/lib/swordfish.rb ADDED
@@ -0,0 +1,2 @@
1
+
2
+ require 'lib/gem_version'
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-swordfish
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6
5
+ platform: ruby
6
+ authors:
7
+ - yuanli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: parallel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: cocoapods
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: cocoapods-generate
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.2.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.2.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
+ description: swordfish是一款支持pod二进制化,hmap优化等特性的cocoapods插件.
84
+ email:
85
+ - yuanli_kk925@163.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - README.md
91
+ - lib/cocoapods_plugin.rb
92
+ - lib/gem_version.rb
93
+ - lib/swordfish.rb
94
+ - lib/swordfish/command.rb
95
+ - lib/swordfish/command/archive.rb
96
+ - lib/swordfish/command/auto.rb
97
+ - lib/swordfish/command/config.rb
98
+ - lib/swordfish/command/repo/update.rb
99
+ - lib/swordfish/command/spec/create.rb
100
+ - lib/swordfish/command/spec/push.rb
101
+ - lib/swordfish/command/swordfish.rb
102
+ - lib/swordfish/config/config.rb
103
+ - lib/swordfish/config/config_asker.rb
104
+ - lib/swordfish/config/config_builder.rb
105
+ - lib/swordfish/helpers/build_helper.rb
106
+ - lib/swordfish/helpers/build_utils.rb
107
+ - lib/swordfish/helpers/framework.rb
108
+ - lib/swordfish/helpers/framework_builder.rb
109
+ - lib/swordfish/helpers/library.rb
110
+ - lib/swordfish/helpers/library_builder.rb
111
+ - lib/swordfish/helpers/sources_helper.rb
112
+ - lib/swordfish/helpers/spec_creator.rb
113
+ - lib/swordfish/helpers/spec_files_helper.rb
114
+ - lib/swordfish/helpers/spec_source_creator.rb
115
+ - lib/swordfish/helpers/upload_helper.rb
116
+ - lib/swordfish/hmap.rb
117
+ - lib/swordfish/hmap/hmap_generator.rb
118
+ - lib/swordfish/hmap/pod_target.rb
119
+ - lib/swordfish/hmap/podfile_dsl.rb
120
+ - lib/swordfish/hmap/post_install_hook_context.rb
121
+ - lib/swordfish/hmap/xcconfig.rb
122
+ - lib/swordfish/native.rb
123
+ - lib/swordfish/native/acknowledgements.rb
124
+ - lib/swordfish/native/analyzer.rb
125
+ - lib/swordfish/native/file_accessor.rb
126
+ - lib/swordfish/native/installation_options.rb
127
+ - lib/swordfish/native/installer.rb
128
+ - lib/swordfish/native/linter.rb
129
+ - lib/swordfish/native/path_source.rb
130
+ - lib/swordfish/native/pod_source_installer.rb
131
+ - lib/swordfish/native/pod_target_installer.rb
132
+ - lib/swordfish/native/podfile.rb
133
+ - lib/swordfish/native/podfile_env.rb
134
+ - lib/swordfish/native/podfile_generator.rb
135
+ - lib/swordfish/native/podspec_finder.rb
136
+ - lib/swordfish/native/resolver.rb
137
+ - lib/swordfish/native/source.rb
138
+ - lib/swordfish/native/sources_manager.rb
139
+ - lib/swordfish/native/specification.rb
140
+ - lib/swordfish/native/target_architectures.rb
141
+ - lib/swordfish/native/target_validator.rb
142
+ - lib/swordfish/native/validator.rb
143
+ homepage: http://rubygems.org/gems/cocoapods-swordfish
144
+ licenses: []
145
+ metadata:
146
+ allowed_push_host: https://rubygems.org
147
+ homepage_uri: http://rubygems.org/gems/cocoapods-swordfish
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 2.4.0
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubygems_version: 3.1.2
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: swordfish编译加速插件.
167
+ test_files: []