cocoapods-tj 1.0.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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +1 -0
- data/lib/cocoapods-tj/command/bin/archive.rb +203 -0
- data/lib/cocoapods-tj/command/bin/auto.rb +189 -0
- data/lib/cocoapods-tj/command/bin/code.rb +198 -0
- data/lib/cocoapods-tj/command/bin/imy.rb +45 -0
- data/lib/cocoapods-tj/command/bin/init.rb +65 -0
- data/lib/cocoapods-tj/command/bin/initHotKey.rb +66 -0
- data/lib/cocoapods-tj/command/bin/install.rb +41 -0
- data/lib/cocoapods-tj/command/bin/lib/lint.rb +66 -0
- data/lib/cocoapods-tj/command/bin/local.rb +142 -0
- data/lib/cocoapods-tj/command/bin/repo/update.rb +42 -0
- data/lib/cocoapods-tj/command/bin/spec/create.rb +68 -0
- data/lib/cocoapods-tj/command/bin/spec/push.rb +114 -0
- data/lib/cocoapods-tj/command/bin/update.rb +144 -0
- data/lib/cocoapods-tj/command/bin.rb +42 -0
- data/lib/cocoapods-tj/command.rb +2 -0
- data/lib/cocoapods-tj/config/config.rb +129 -0
- data/lib/cocoapods-tj/config/config_asker.rb +49 -0
- data/lib/cocoapods-tj/config/config_builder.rb +201 -0
- data/lib/cocoapods-tj/config/config_hot_key.rb +102 -0
- data/lib/cocoapods-tj/config/config_hot_key_asker.rb +48 -0
- data/lib/cocoapods-tj/gem_version.rb +10 -0
- data/lib/cocoapods-tj/helpers/Info.plist +0 -0
- data/lib/cocoapods-tj/helpers/build_helper.rb +154 -0
- data/lib/cocoapods-tj/helpers/build_utils.rb +62 -0
- data/lib/cocoapods-tj/helpers/framework.rb +79 -0
- data/lib/cocoapods-tj/helpers/framework_builder.rb +391 -0
- data/lib/cocoapods-tj/helpers/library.rb +54 -0
- data/lib/cocoapods-tj/helpers/library_builder.rb +89 -0
- data/lib/cocoapods-tj/helpers/local/loca_llibrary.rb +57 -0
- data/lib/cocoapods-tj/helpers/local/local_build_helper.rb +177 -0
- data/lib/cocoapods-tj/helpers/local/local_framework.rb +85 -0
- data/lib/cocoapods-tj/helpers/local/local_framework_builder.rb +226 -0
- data/lib/cocoapods-tj/helpers/local/local_library_builder.rb +91 -0
- data/lib/cocoapods-tj/helpers/sources_helper.rb +32 -0
- data/lib/cocoapods-tj/helpers/spec_creator.rb +150 -0
- data/lib/cocoapods-tj/helpers/spec_files_helper.rb +73 -0
- data/lib/cocoapods-tj/helpers/spec_source_creator.rb +189 -0
- data/lib/cocoapods-tj/helpers/upload_helper.rb +81 -0
- data/lib/cocoapods-tj/helpers.rb +5 -0
- data/lib/cocoapods-tj/native/acknowledgements.rb +26 -0
- data/lib/cocoapods-tj/native/analyzer.rb +29 -0
- data/lib/cocoapods-tj/native/file_accessor.rb +20 -0
- data/lib/cocoapods-tj/native/installation_options.rb +21 -0
- data/lib/cocoapods-tj/native/installer.rb +106 -0
- data/lib/cocoapods-tj/native/linter.rb +26 -0
- data/lib/cocoapods-tj/native/path_source.rb +29 -0
- data/lib/cocoapods-tj/native/pod_source_installer.rb +18 -0
- data/lib/cocoapods-tj/native/pod_target_installer.rb +81 -0
- data/lib/cocoapods-tj/native/podfile.rb +91 -0
- data/lib/cocoapods-tj/native/podfile_env.rb +37 -0
- data/lib/cocoapods-tj/native/podfile_generator.rb +135 -0
- data/lib/cocoapods-tj/native/podspec_finder.rb +23 -0
- data/lib/cocoapods-tj/native/resolver.rb +202 -0
- data/lib/cocoapods-tj/native/sandbox_analyzer.rb +11 -0
- data/lib/cocoapods-tj/native/source.rb +35 -0
- data/lib/cocoapods-tj/native/sources_manager.rb +18 -0
- data/lib/cocoapods-tj/native/specification.rb +10 -0
- data/lib/cocoapods-tj/native/target_validator.rb +41 -0
- data/lib/cocoapods-tj/native/validator.rb +40 -0
- data/lib/cocoapods-tj/native.rb +23 -0
- data/lib/cocoapods-tj/source_provider_hook.rb +50 -0
- data/lib/cocoapods-tj.rb +2 -0
- data/lib/cocoapods_plugin.rb +3 -0
- data/spec/command/bin_spec.rb +12 -0
- data/spec/spec_helper.rb +50 -0
- metadata +182 -0
@@ -0,0 +1,106 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'cocoapods'
|
5
|
+
require 'cocoapods-tj/native/pod_source_installer'
|
6
|
+
|
7
|
+
module Pod
|
8
|
+
class Installer
|
9
|
+
alias old_create_pod_installer create_pod_installer
|
10
|
+
def create_pod_installer(pod_name)
|
11
|
+
installer = old_create_pod_installer(pod_name)
|
12
|
+
installer.installation_options = installation_options
|
13
|
+
installer
|
14
|
+
end
|
15
|
+
|
16
|
+
alias old_install_pod_sources install_pod_sources
|
17
|
+
def install_pod_sources
|
18
|
+
if installation_options.install_with_multi_threads
|
19
|
+
if Pod.match_version?('~> 1.4.0')
|
20
|
+
install_pod_sources_for_version_in_1_4_0
|
21
|
+
elsif Pod.match_version?('~> 1.5')
|
22
|
+
install_pod_sources_for_version_above_1_5_0
|
23
|
+
else
|
24
|
+
old_install_pod_sources
|
25
|
+
end
|
26
|
+
else
|
27
|
+
old_install_pod_sources
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# rewrite install_pod_sources
|
32
|
+
def install_pod_sources_for_version_in_1_4_0
|
33
|
+
@installed_specs = []
|
34
|
+
pods_to_install = sandbox_state.added | sandbox_state.changed
|
35
|
+
title_options = { verbose_prefix: '-> '.green }
|
36
|
+
Parallel.each(root_specs.sort_by(&:name), in_threads: 4) do |spec|
|
37
|
+
if pods_to_install.include?(spec.name)
|
38
|
+
if sandbox_state.changed.include?(spec.name) && sandbox.manifest
|
39
|
+
previous = sandbox.manifest.version(spec.name)
|
40
|
+
title = "Installing #{spec.name} #{spec.version} (was #{previous})"
|
41
|
+
else
|
42
|
+
title = "Installing #{spec}"
|
43
|
+
end
|
44
|
+
UI.titled_section(title.green, title_options) do
|
45
|
+
install_source_of_pod(spec.name)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
UI.titled_section("Using #{spec}", title_options) do
|
49
|
+
create_pod_installer(spec.name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def install_pod_sources_for_version_above_1_5_0
|
56
|
+
@installed_specs = []
|
57
|
+
pods_to_install = sandbox_state.added | sandbox_state.changed
|
58
|
+
title_options = { verbose_prefix: '-> '.green }
|
59
|
+
|
60
|
+
Parallel.each(root_specs.sort_by(&:name), in_threads: 4) do |spec|
|
61
|
+
if pods_to_install.include?(spec.name)
|
62
|
+
if sandbox_state.changed.include?(spec.name) && sandbox.manifest
|
63
|
+
current_version = spec.version
|
64
|
+
previous_version = sandbox.manifest.version(spec.name)
|
65
|
+
has_changed_version = current_version != previous_version
|
66
|
+
current_repo = analysis_result.specs_by_source.detect do |key, values|
|
67
|
+
break key if values.map(&:name).include?(spec.name)
|
68
|
+
end
|
69
|
+
current_repo &&= current_repo.url || current_repo.name
|
70
|
+
previous_spec_repo = sandbox.manifest.spec_repo(spec.name)
|
71
|
+
has_changed_repo = !previous_spec_repo.nil? && current_repo && (current_repo != previous_spec_repo)
|
72
|
+
title = "Installing #{spec.name} #{spec.version}"
|
73
|
+
if has_changed_version && has_changed_repo
|
74
|
+
title += " (was #{previous_version} and source changed to `#{current_repo}` from `#{previous_spec_repo}`)"
|
75
|
+
end
|
76
|
+
if has_changed_version && !has_changed_repo
|
77
|
+
title += " (was #{previous_version})"
|
78
|
+
end
|
79
|
+
if !has_changed_version && has_changed_repo
|
80
|
+
title += " (source changed to `#{current_repo}` from `#{previous_spec_repo}`)"
|
81
|
+
end
|
82
|
+
else
|
83
|
+
title = "Installing #{spec}"
|
84
|
+
end
|
85
|
+
UI.titled_section(title.green, title_options) do
|
86
|
+
install_source_of_pod(spec.name)
|
87
|
+
end
|
88
|
+
else
|
89
|
+
UI.titled_section("Using #{spec}", title_options) do
|
90
|
+
create_pod_installer(spec.name)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
module Downloader
|
98
|
+
class Cache
|
99
|
+
@@lock = Mutex.new
|
100
|
+
alias old_ensure_matching_version ensure_matching_version
|
101
|
+
def ensure_matching_version
|
102
|
+
@@lock.synchronize { old_ensure_matching_version }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods-tj/native/specification'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Specification
|
7
|
+
class Linter
|
8
|
+
# !@group Lint steps
|
9
|
+
|
10
|
+
# Checks that the spec's root name matches the filename.
|
11
|
+
#
|
12
|
+
# @return [void]
|
13
|
+
#
|
14
|
+
def validate_root_name
|
15
|
+
if spec.root.name && file
|
16
|
+
acceptable_names = Specification::VALID_EXTNAME.map { |extname| "#{spec.root.name}#{extname}" }
|
17
|
+
names_match = acceptable_names.include?(file.basename.to_s)
|
18
|
+
unless names_match
|
19
|
+
results.add_error('name', 'The name of the spec should match the ' \
|
20
|
+
'name of the file.')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods-tj/native/specification'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
module ExternalSources
|
7
|
+
# Provides support for fetching a specification file from a path local to
|
8
|
+
# the machine running the installation.
|
9
|
+
#
|
10
|
+
class PathSource < AbstractExternalSource
|
11
|
+
def normalized_podspec_path(declared_path)
|
12
|
+
extension = File.extname(declared_path)
|
13
|
+
|
14
|
+
if extension == '.podspec' || extension == '.json'
|
15
|
+
path_with_ext = declared_path
|
16
|
+
else
|
17
|
+
path_with_ext = Specification::VALID_EXTNAME
|
18
|
+
.map { |extname| "#{declared_path}/#{name}#{extname}" }
|
19
|
+
.find { |file| File.exist?(file) } || "#{declared_path}/#{name}.podspec"
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
podfile_dir = File.dirname(podfile_path || '')
|
24
|
+
|
25
|
+
File.expand_path(path_with_ext, podfile_dir)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods-tj/native/installation_options'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Installer
|
7
|
+
class PodSourceInstaller
|
8
|
+
attr_accessor :installation_options
|
9
|
+
|
10
|
+
alias old_verify_source_is_secure verify_source_is_secure
|
11
|
+
def verify_source_is_secure(root_spec)
|
12
|
+
if installation_options.warn_for_unsecure_source?
|
13
|
+
old_verify_source_is_secure(root_spec)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Pod
|
2
|
+
class Installer
|
3
|
+
class Xcode
|
4
|
+
class PodsProjectGenerator
|
5
|
+
# Creates the target for the Pods libraries in the Pods project and the
|
6
|
+
# relative support files.
|
7
|
+
#
|
8
|
+
class PodTargetInstaller < TargetInstaller
|
9
|
+
require 'cocoapods/installer/xcode/pods_project_generator/app_host_installer'
|
10
|
+
|
11
|
+
|
12
|
+
alias old_add_swift_library_compatibility_header_phase add_swift_library_compatibility_header_phase
|
13
|
+
|
14
|
+
def add_swift_library_compatibility_header_phase(native_target)
|
15
|
+
if $ARGV[1] == "auto"
|
16
|
+
|
17
|
+
if custom_module_map
|
18
|
+
raise Informative, 'Using Swift static libraries with custom module maps is currently not supported. ' \
|
19
|
+
"Please build `#{target.label}` as a framework or remove the custom module map."
|
20
|
+
end
|
21
|
+
|
22
|
+
build_phase = native_target.new_shell_script_build_phase('Copy generated compatibility header')
|
23
|
+
|
24
|
+
relative_module_map_path = target.module_map_path.relative_path_from(target.sandbox.root)
|
25
|
+
relative_umbrella_header_path = target.umbrella_header_path.relative_path_from(target.sandbox.root)
|
26
|
+
|
27
|
+
build_phase.shell_script = <<-SH.strip_heredoc
|
28
|
+
COMPATIBILITY_HEADER_PATH="${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h"
|
29
|
+
MODULE_MAP_PATH="${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap"
|
30
|
+
|
31
|
+
ditto "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h" "${COMPATIBILITY_HEADER_PATH}"
|
32
|
+
ditto "${PODS_ROOT}/#{relative_module_map_path}" "${MODULE_MAP_PATH}"
|
33
|
+
ditto "${PODS_ROOT}/#{relative_umbrella_header_path}" "${BUILT_PRODUCTS_DIR}"
|
34
|
+
|
35
|
+
COPY_PATH="${PODS_CONFIGURATION_BUILD_DIR}/${PRODUCT_MODULE_NAME}"
|
36
|
+
UMBRELLA_PATH="${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}-umbrella.h"
|
37
|
+
SWIFTMODULE_PATH="${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.swiftmodule"
|
38
|
+
|
39
|
+
ditto "${MODULE_MAP_PATH}" "${PODS_CONFIGURATION_BUILD_DIR}/${PRODUCT_MODULE_NAME}/${PRODUCT_MODULE_NAME}.modulemap"
|
40
|
+
ditto "${COMPATIBILITY_HEADER_PATH}" "${COPY_PATH}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h"
|
41
|
+
ditto "${COMPATIBILITY_HEADER_PATH}" "${COPY_PATH}"
|
42
|
+
ditto "${UMBRELLA_PATH}" "${COPY_PATH}"
|
43
|
+
ditto "${SWIFTMODULE_PATH}" "${COPY_PATH}/${PRODUCT_MODULE_NAME}.swiftmodule"
|
44
|
+
ditto "${SWIFTMODULE_PATH}" "${COPY_PATH}/${PRODUCT_MODULE_NAME}.swiftmodule"
|
45
|
+
|
46
|
+
if [ ${PRODUCT_MODULE_NAME} != ${PRODUCT_NAME} ] ; then
|
47
|
+
ditto "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}-umbrella.h" "${COPY_PATH}"
|
48
|
+
ditto "${COPY_PATH}" "${PODS_CONFIGURATION_BUILD_DIR}/${PRODUCT_NAME}"
|
49
|
+
fi
|
50
|
+
|
51
|
+
MODULE_MAP_SEARCH_PATH = "${PODS_CONFIGURATION_BUILD_DIR}/${PRODUCT_MODULE_NAME}/${PRODUCT_MODULE_NAME}.modulemap"
|
52
|
+
|
53
|
+
if [${MODULE_MAP_PATH} != ${MODULE_MAP_SEARCH_PATH}] ; then
|
54
|
+
printf "\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\"${COPY_PATH}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\\"\\n requires objc\\n}\\n" >> "${MODULE_MAP_SEARCH_PATH}"
|
55
|
+
fi
|
56
|
+
|
57
|
+
printf "\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\"${COMPATIBILITY_HEADER_PATH}\\"\\n requires objc\\n}\\n" >> "${MODULE_MAP_PATH}"
|
58
|
+
|
59
|
+
SH
|
60
|
+
build_phase.input_paths = %W(
|
61
|
+
${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h
|
62
|
+
${PODS_ROOT}/#{relative_module_map_path}
|
63
|
+
${PODS_ROOT}/#{relative_umbrella_header_path}
|
64
|
+
)
|
65
|
+
build_phase.output_paths = %W(
|
66
|
+
${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap
|
67
|
+
${BUILT_PRODUCTS_DIR}/#{relative_umbrella_header_path.basename}
|
68
|
+
${BUILT_PRODUCTS_DIR}/Swift\ Compatibility\ Header/${PRODUCT_MODULE_NAME}-Swift.h
|
69
|
+
)
|
70
|
+
else
|
71
|
+
old_add_swift_library_compatibility_header_phase(native_target)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
#-----------------------------------------------------------------------#
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods'
|
4
|
+
require 'cocoapods-tj/native/podfile_env'
|
5
|
+
|
6
|
+
module Pod
|
7
|
+
class Podfile
|
8
|
+
# TREAT_DEVELOPMENTS_AS_NORMAL = 'treat_developments_as_normal'.freeze
|
9
|
+
|
10
|
+
module DSL
|
11
|
+
def allow_prerelease!
|
12
|
+
set_internal_hash_value(ALLOW_PRERELEASE, true)
|
13
|
+
end
|
14
|
+
|
15
|
+
def use_binaries!(flag = true)
|
16
|
+
set_internal_hash_value(USE_BINARIES, flag)
|
17
|
+
end
|
18
|
+
|
19
|
+
def use_binaries_with_spec_selector!(&block)
|
20
|
+
raise Informative, '必须提供选择需要二进制组件的 block !' unless block_given?
|
21
|
+
|
22
|
+
set_internal_hash_value(USE_BINARIES_SELECTOR, block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_use_source_pods(pods)
|
26
|
+
hash_pods_use_source = get_internal_hash_value(USE_SOURCE_PODS) || []
|
27
|
+
hash_pods_use_source += Array(pods)
|
28
|
+
set_internal_hash_value(USE_SOURCE_PODS, hash_pods_use_source)
|
29
|
+
end
|
30
|
+
|
31
|
+
# 0 dev
|
32
|
+
# 1 debug_iphoneos
|
33
|
+
# 2 release_iphoneos
|
34
|
+
# 需要在podfile_env 先定义 CONFIGURATION_ENV
|
35
|
+
def set_configuration_env(env = "dev")
|
36
|
+
set_internal_hash_value(CONFIGURATION_ENV, env)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
alias old_plugins plugins
|
41
|
+
def plugins
|
42
|
+
if ENV[USE_PLUGINS]
|
43
|
+
env_plugins = ENV[USE_PLUGINS].split(',').each_with_object({}) do |name, result|
|
44
|
+
result[name] = {}
|
45
|
+
end
|
46
|
+
env_plugins.merge!(old_plugins)
|
47
|
+
else
|
48
|
+
old_plugins
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def use_binaries_selector
|
53
|
+
get_internal_hash_value(USE_BINARIES_SELECTOR, nil)
|
54
|
+
end
|
55
|
+
|
56
|
+
def allow_prerelease?
|
57
|
+
get_internal_hash_value(ALLOW_PRERELEASE, false) || ENV[ALLOW_PRERELEASE] == 'true'
|
58
|
+
end
|
59
|
+
|
60
|
+
def use_binaries?
|
61
|
+
get_internal_hash_value(USE_BINARIES, false) || ENV[USE_BINARIES] == 'true'
|
62
|
+
end
|
63
|
+
|
64
|
+
def use_source_pods
|
65
|
+
get_internal_hash_value(USE_SOURCE_PODS, []) + String(ENV[USE_SOURCE_PODS]).split('|').uniq
|
66
|
+
end
|
67
|
+
|
68
|
+
def configuration_env
|
69
|
+
get_internal_hash_value(CONFIGURATION_ENV, "dev") || ENV[CONFIGURATION_ENV] == "dev"
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def valid_bin_plugin
|
75
|
+
unless plugins.keys.include?('cocoapods-tj')
|
76
|
+
raise Pod::Informative, 'You should add `plugin \'cocoapods-tj\'` before using its DSL'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# set_hash_value 有 key 限制
|
81
|
+
def set_internal_hash_value(key, value)
|
82
|
+
valid_bin_plugin
|
83
|
+
|
84
|
+
internal_hash[key] = value
|
85
|
+
end
|
86
|
+
|
87
|
+
def get_internal_hash_value(key, default = nil)
|
88
|
+
internal_hash.fetch(key, default)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Podfile
|
5
|
+
USE_BINARIES = 'use_binaries'
|
6
|
+
USE_SOURCE_PODS = 'use_source_pods'
|
7
|
+
USE_BINARIES_SELECTOR = 'use_binaries_selector'
|
8
|
+
ALLOW_PRERELEASE = 'allow_prerelease'
|
9
|
+
USE_PLUGINS = 'use_plugins'
|
10
|
+
CONFIGURATION_ENV = 'configuration_env'
|
11
|
+
|
12
|
+
module ENVExecutor
|
13
|
+
def execute_with_bin_plugin(&block)
|
14
|
+
execute_with_key(USE_PLUGINS, -> { 'cocoapods-tj' }, &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute_with_allow_prerelease(allow_prerelease, &block)
|
18
|
+
execute_with_key(ALLOW_PRERELEASE, -> { allow_prerelease ? 'true' : 'false' }, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute_with_use_binaries(use_binaries, &block)
|
22
|
+
execute_with_key(USE_BINARIES, -> { use_binaries ? 'true' : 'false' }, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def execute_with_key(key, value_returner)
|
26
|
+
origin_value = ENV[key]
|
27
|
+
ENV[key] = value_returner.call
|
28
|
+
|
29
|
+
yield if block_given?
|
30
|
+
|
31
|
+
ENV[key] = origin_value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
extend ENVExecutor
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'cocoapods'
|
5
|
+
require 'cocoapods-tj/native/pod_source_installer'
|
6
|
+
|
7
|
+
|
8
|
+
require 'parallel'
|
9
|
+
require 'cocoapods'
|
10
|
+
|
11
|
+
module Pod
|
12
|
+
module Generate
|
13
|
+
class PodfileGenerator
|
14
|
+
alias old_podfile_for_spec podfile_for_spec
|
15
|
+
|
16
|
+
def podfile_for_spec(spec)
|
17
|
+
generator = self
|
18
|
+
dir = configuration.gen_dir_for_pod(spec.name)
|
19
|
+
|
20
|
+
Pod::Podfile.new do
|
21
|
+
project "#{spec.name}.xcodeproj"
|
22
|
+
workspace "#{spec.name}.xcworkspace"
|
23
|
+
|
24
|
+
plugin 'cocoapods-generate'
|
25
|
+
|
26
|
+
install! 'cocoapods', generator.installation_options
|
27
|
+
|
28
|
+
generator.podfile_plugins.each do |name, options|
|
29
|
+
plugin(*[name, options].compact)
|
30
|
+
end
|
31
|
+
|
32
|
+
use_frameworks!(generator.configuration.use_frameworks?)
|
33
|
+
|
34
|
+
if (supported_swift_versions = generator.supported_swift_versions)
|
35
|
+
supports_swift_versions(supported_swift_versions)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Explicitly set sources
|
39
|
+
generator.configuration.sources.each do |source_url|
|
40
|
+
source(source_url)
|
41
|
+
end
|
42
|
+
|
43
|
+
self.defined_in_file = dir.join('CocoaPods.podfile.yaml')
|
44
|
+
|
45
|
+
test_specs = spec.recursive_subspecs.select(&:test_specification?)
|
46
|
+
app_specs = if spec.respond_to?(:app_specification?)
|
47
|
+
spec.recursive_subspecs.select(&:app_specification?)
|
48
|
+
else
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
|
52
|
+
spec_platform_names = spec.available_platforms.map(&:string_name).flatten.each.reject do |platform_name|
|
53
|
+
!generator.configuration.platforms.nil? && !generator.configuration.platforms.include?(platform_name.downcase)
|
54
|
+
end
|
55
|
+
|
56
|
+
spec_platform_names.sort.each do |platform_name|
|
57
|
+
target "App-#{platform_name}" do
|
58
|
+
current_target_definition.swift_version = generator.swift_version if generator.swift_version
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
inhibit_all_warnings! if generator.inhibit_all_warnings?
|
64
|
+
use_modular_headers! if generator.use_modular_headers?
|
65
|
+
|
66
|
+
|
67
|
+
pod_options = generator.dependency_compilation_kwargs(spec.name)
|
68
|
+
pod_options[:path] = spec.defined_in_file.relative_path_from(dir).to_s
|
69
|
+
|
70
|
+
|
71
|
+
{ testspecs: test_specs, appspecs: app_specs }.each do |key, specs|
|
72
|
+
pod_options[key] = specs.map { |s| s.name.sub(%r{^#{Regexp.escape spec.root.name}/}, '') }.sort unless specs.empty?
|
73
|
+
end
|
74
|
+
|
75
|
+
pod spec.name, **pod_options
|
76
|
+
|
77
|
+
if Pod::Config.instance.podfile
|
78
|
+
target_definitions['Pods'].instance_exec do
|
79
|
+
target_definition = nil
|
80
|
+
Pod::Config.instance.podfile.target_definition_list.each do |target|
|
81
|
+
if target.label == "Pods-#{spec.name}"
|
82
|
+
target_definition = target
|
83
|
+
break
|
84
|
+
end
|
85
|
+
end
|
86
|
+
if(target_definition && target_definition.use_modular_headers_hash.values.any?)
|
87
|
+
target_definition.use_modular_headers_hash.values.each do |f|
|
88
|
+
f.each { | pod_name| self.set_use_modular_headers_for_pod(pod_name, true) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
if target_definition
|
94
|
+
value = target_definition.to_hash['dependencies']
|
95
|
+
next if value.blank?
|
96
|
+
value.each do |f|
|
97
|
+
if f.is_a?(Hash) && f.keys.first == spec.name
|
98
|
+
value.delete f
|
99
|
+
break
|
100
|
+
end
|
101
|
+
end
|
102
|
+
old_value = self.to_hash['dependencies'].first
|
103
|
+
value << old_value unless (old_value == nil || value.include?(old_value))
|
104
|
+
|
105
|
+
set_hash_value(%w(dependencies).first, value)
|
106
|
+
|
107
|
+
value = target_definition.to_hash['configuration_pod_whitelist']
|
108
|
+
next if value.blank?
|
109
|
+
set_hash_value(%w(configuration_pod_whitelist).first, value)
|
110
|
+
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
next if generator.configuration.local_sources.empty?
|
121
|
+
generator.transitive_local_dependencies(spec, generator.configuration.local_sources).each do |dependency, podspec_file|
|
122
|
+
pod_options = generator.dependency_compilation_kwargs(dependency.name)
|
123
|
+
pod_options[:path] = if podspec_file[0] == '/' # absolute path
|
124
|
+
podspec_file
|
125
|
+
else
|
126
|
+
'../../' + podspec_file
|
127
|
+
end
|
128
|
+
pod dependency.name, **pod_options
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods-tj/native/specification'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Sandbox
|
7
|
+
class PodspecFinder
|
8
|
+
def podspecs
|
9
|
+
return @specs_by_name if @specs_by_name
|
10
|
+
|
11
|
+
@specs_by_name = {}
|
12
|
+
spec_files = Pathname.glob(root + '{,*}.podspec{,.json}')
|
13
|
+
spec_files = spec_files.reject { |p| Specification::DEFAULT_TEMPLATE_EXTNAME.find { |e| p.to_s.end_with?(e) } }
|
14
|
+
spec_files.sort_by { |p| -p.to_path.split(File::SEPARATOR).size }.each do |file|
|
15
|
+
spec = Specification.from_file(file)
|
16
|
+
spec.validate_cocoapods_version
|
17
|
+
@specs_by_name[spec.name] = spec
|
18
|
+
end
|
19
|
+
@specs_by_name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|