cocoapods-acknowledgements 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +115 -0
- data/README.md +7 -1
- data/cocoapods_acknowledgements.gemspec +2 -1
- data/lib/cocoapods_acknowledgements.rb +32 -30
- data/lib/cocoapods_acknowledgements/plist_generator.rb +6 -8
- data/lib/cocoapods_acknowledgements/settings_plist_generator.rb +5 -5
- data/lib/cocoapods_acknowledgements/version.rb +1 -1
- data/spec/acknowledgement_spec.rb +150 -0
- data/spec/plist_generator_spec.rb +138 -1
- data/spec/settings_plist_generator_spec.rb +76 -1
- data/spec/spec_helper.rb +62 -0
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f75510ee94aabecc1ad7344e4f06d1f48137321fc153b970ec73c3c4bf68d81
|
4
|
+
data.tar.gz: f032430ac9827e8dbb6753c2e415d860992c213850c7a2ee38178297a5104594
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df979610134e829e971ed8ecd92ac7bfcac68b9dd70b9995a64c3ecafa8b54baee1ff0e514d87d5f8adaddd1abc7e1a27b8b681c366e9c2208870cd3a8bcfaf
|
7
|
+
data.tar.gz: 1ad0eb6bcbd3f6472851c9990dfbee26cd22e7d9e6de9507a8f6d97fa40a4e82522872675119d1f0224b6b9263b1e52f3f98c1edee9e363136bca8732f0b6e2e
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
# CocoaPods Acknowledgements Changelog
|
2
2
|
|
3
|
+
## 1.2.0 (2020-03-23)
|
4
|
+
|
5
|
+
##### Enhancements
|
6
|
+
|
7
|
+
* Update internal gem dependencies to latest versions
|
8
|
+
[Olivier Halligon](https://github.com/AliSoftware)
|
9
|
+
[#56](https://github.com/CocoaPods/cocoapods-acknowledgements/pull/56)
|
10
|
+
|
11
|
+
* Add `targets` options to specify targets to add metadata
|
12
|
+
[Richard Lee](https://github.com/dlackty)
|
13
|
+
[#46](https://github.com/CocoaPods/cocoapods-acknowledgements/issues/46)
|
14
|
+
|
15
|
+
* Improve the performance of metadata generation
|
16
|
+
[Eric Amorde](https://github.com/amorde)
|
17
|
+
[#54](https://github.com/CocoaPods/cocoapods-acknowledgements/pull/54)
|
18
|
+
|
19
|
+
* Add tests
|
20
|
+
[Eric Amorde](https://github.com/amorde)
|
21
|
+
[#1](https://github.com/CocoaPods/cocoapods-acknowledgements/issues/1)
|
22
|
+
|
23
|
+
##### Bug Fixes
|
24
|
+
|
25
|
+
* None.
|
26
|
+
|
27
|
+
|
3
28
|
## 1.1.3 (2018-04-04)
|
4
29
|
|
5
30
|
##### Enhancements
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cocoapods-acknowledgements (1.2.0)
|
5
|
+
activesupport (>= 4.0.2, < 5)
|
6
|
+
redcarpet (~> 3.3)
|
7
|
+
xcodeproj
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
CFPropertyList (3.0.2)
|
13
|
+
activesupport (4.2.11.1)
|
14
|
+
i18n (~> 0.7)
|
15
|
+
minitest (~> 5.1)
|
16
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
17
|
+
tzinfo (~> 1.1)
|
18
|
+
algoliasearch (1.27.1)
|
19
|
+
httpclient (~> 2.8, >= 2.8.3)
|
20
|
+
json (>= 1.5.1)
|
21
|
+
atomos (0.1.3)
|
22
|
+
bacon (1.2.0)
|
23
|
+
claide (1.0.3)
|
24
|
+
cocoapods (1.9.1)
|
25
|
+
activesupport (>= 4.0.2, < 5)
|
26
|
+
claide (>= 1.0.2, < 2.0)
|
27
|
+
cocoapods-core (= 1.9.1)
|
28
|
+
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
29
|
+
cocoapods-downloader (>= 1.2.2, < 2.0)
|
30
|
+
cocoapods-plugins (>= 1.0.0, < 2.0)
|
31
|
+
cocoapods-search (>= 1.0.0, < 2.0)
|
32
|
+
cocoapods-stats (>= 1.0.0, < 2.0)
|
33
|
+
cocoapods-trunk (>= 1.4.0, < 2.0)
|
34
|
+
cocoapods-try (>= 1.1.0, < 2.0)
|
35
|
+
colored2 (~> 3.1)
|
36
|
+
escape (~> 0.0.4)
|
37
|
+
fourflusher (>= 2.3.0, < 3.0)
|
38
|
+
gh_inspector (~> 1.0)
|
39
|
+
molinillo (~> 0.6.6)
|
40
|
+
nap (~> 1.0)
|
41
|
+
ruby-macho (~> 1.4)
|
42
|
+
xcodeproj (>= 1.14.0, < 2.0)
|
43
|
+
cocoapods-core (1.9.1)
|
44
|
+
activesupport (>= 4.0.2, < 6)
|
45
|
+
algoliasearch (~> 1.0)
|
46
|
+
concurrent-ruby (~> 1.1)
|
47
|
+
fuzzy_match (~> 2.0.4)
|
48
|
+
nap (~> 1.0)
|
49
|
+
netrc (~> 0.11)
|
50
|
+
typhoeus (~> 1.0)
|
51
|
+
cocoapods-deintegrate (1.0.4)
|
52
|
+
cocoapods-downloader (1.3.0)
|
53
|
+
cocoapods-plugins (1.0.0)
|
54
|
+
nap
|
55
|
+
cocoapods-search (1.0.0)
|
56
|
+
cocoapods-stats (1.1.0)
|
57
|
+
cocoapods-trunk (1.4.1)
|
58
|
+
nap (>= 0.8, < 2.0)
|
59
|
+
netrc (~> 0.11)
|
60
|
+
cocoapods-try (1.1.0)
|
61
|
+
colored2 (3.1.2)
|
62
|
+
concurrent-ruby (1.1.6)
|
63
|
+
escape (0.0.4)
|
64
|
+
ethon (0.12.0)
|
65
|
+
ffi (>= 1.3.0)
|
66
|
+
ffi (1.12.2)
|
67
|
+
fourflusher (2.3.1)
|
68
|
+
fuzzy_match (2.0.4)
|
69
|
+
gh_inspector (1.1.3)
|
70
|
+
httpclient (2.8.3)
|
71
|
+
i18n (0.9.5)
|
72
|
+
concurrent-ruby (~> 1.0)
|
73
|
+
json (2.3.0)
|
74
|
+
metaclass (0.0.4)
|
75
|
+
minitest (5.14.0)
|
76
|
+
mocha (0.11.4)
|
77
|
+
metaclass (~> 0.0.1)
|
78
|
+
mocha-on-bacon (0.2.1)
|
79
|
+
mocha (>= 0.9.8)
|
80
|
+
molinillo (0.6.6)
|
81
|
+
nanaimo (0.2.6)
|
82
|
+
nap (1.1.0)
|
83
|
+
netrc (0.11.0)
|
84
|
+
prettybacon (0.0.2)
|
85
|
+
bacon (~> 1.2)
|
86
|
+
rake (13.0.1)
|
87
|
+
redcarpet (3.5.0)
|
88
|
+
ruby-macho (1.4.0)
|
89
|
+
thread_safe (0.3.6)
|
90
|
+
typhoeus (1.3.1)
|
91
|
+
ethon (>= 0.9.0)
|
92
|
+
tzinfo (1.2.6)
|
93
|
+
thread_safe (~> 0.1)
|
94
|
+
xcodeproj (1.15.0)
|
95
|
+
CFPropertyList (>= 2.3.3, < 4.0)
|
96
|
+
atomos (~> 0.1.3)
|
97
|
+
claide (>= 1.0.2, < 2.0)
|
98
|
+
colored2 (~> 3.1)
|
99
|
+
nanaimo (~> 0.2.6)
|
100
|
+
|
101
|
+
PLATFORMS
|
102
|
+
ruby
|
103
|
+
|
104
|
+
DEPENDENCIES
|
105
|
+
bacon
|
106
|
+
bundler (~> 2.0)
|
107
|
+
cocoapods
|
108
|
+
cocoapods-acknowledgements!
|
109
|
+
mocha (~> 0.11.4)
|
110
|
+
mocha-on-bacon
|
111
|
+
prettybacon
|
112
|
+
rake
|
113
|
+
|
114
|
+
BUNDLED WITH
|
115
|
+
2.0.2
|
data/README.md
CHANGED
@@ -35,7 +35,7 @@ plugin 'cocoapods-acknowledgements', :settings_bundle => true , :settings_post_p
|
|
35
35
|
|
36
36
|
The plugin will search through your project files to find a `Settings.bundle` file, and add the file to the bundle. If this is not enough for you, we'd love a PR.
|
37
37
|
|
38
|
-
You can
|
38
|
+
You can exclude some dependencies so they won't be added to the generated plists. This is useful when you don't want to add private dependencies.
|
39
39
|
|
40
40
|
```ruby
|
41
41
|
plugin 'cocoapods-acknowledgements', :settings_bundle => true, :exclude => 'PrivateKit'
|
@@ -43,6 +43,12 @@ plugin 'cocoapods-acknowledgements', :settings_bundle => true, :exclude => 'Priv
|
|
43
43
|
plugin 'cocoapods-acknowledgements', :settings_bundle => true, :exclude => ['PrivateKit', 'SecretLib']
|
44
44
|
```
|
45
45
|
|
46
|
+
You can also specify a list of targets for which to generate acknowledgements. This can be useful to exclude test or extension targets.
|
47
|
+
|
48
|
+
``` ruby
|
49
|
+
plugin 'cocoapods-acknowledgements', :targets => ['MyApp']
|
50
|
+
```
|
51
|
+
|
46
52
|
### Location
|
47
53
|
|
48
54
|
The plist generated by this plugin is located under the root of your ```Pods``` directory.
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_runtime_dependency 'activesupport', '>= 4.0.2', '< 5'
|
21
21
|
|
22
22
|
spec.add_dependency "redcarpet", "~> 3.3"
|
23
|
-
spec.
|
23
|
+
spec.add_dependency "xcodeproj"
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
24
25
|
spec.add_development_dependency "rake"
|
25
26
|
end
|
@@ -29,7 +29,6 @@ module CocoaPodsAcknowledgements
|
|
29
29
|
end
|
30
30
|
|
31
31
|
project.save
|
32
|
-
|
33
32
|
end
|
34
33
|
|
35
34
|
def self.settings_bundle_in_project(project)
|
@@ -51,8 +50,9 @@ module CocoaPodsAcknowledgements
|
|
51
50
|
|
52
51
|
Pod::UI.section 'Adding Acknowledgements' do
|
53
52
|
|
54
|
-
should_include_settings = user_options["settings_bundle"]
|
53
|
+
should_include_settings = user_options["settings_bundle"]
|
55
54
|
excluded_pods = Set.new(user_options["exclude"])
|
55
|
+
targets = Set.new(user_options["targets"])
|
56
56
|
|
57
57
|
sandbox = context.sandbox if defined? context.sandbox
|
58
58
|
sandbox ||= Pod::Sandbox.new(context.sandbox_root)
|
@@ -60,44 +60,46 @@ module CocoaPodsAcknowledgements
|
|
60
60
|
context.umbrella_targets.each do |umbrella_target|
|
61
61
|
project = Xcodeproj::Project.open(umbrella_target.user_project_path)
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
# Generate a plist representing all of the podspecs
|
64
|
+
metadata = PlistGenerator.generate(umbrella_target, sandbox, excluded_pods)
|
65
|
+
next unless metadata
|
66
|
+
|
67
|
+
if should_include_settings
|
68
|
+
# We need to look for a Settings.bundle
|
69
|
+
# and add this to the root of the bundle
|
70
|
+
settings_bundle = settings_bundle_in_project(project)
|
71
|
+
if settings_bundle == nil
|
72
|
+
Pod::UI.warn "Could not find a Settings.bundle to add the Pod Settings Plist to."
|
73
|
+
else
|
74
74
|
# Generate a plist in Settings format
|
75
75
|
settings_metadata = SettingsPlistGenerator.generate(umbrella_target, sandbox, excluded_pods)
|
76
|
+
settings_plist_path = settings_bundle + "/#{umbrella_target.cocoapods_target_label}-settings-metadata.plist"
|
77
|
+
end
|
78
|
+
end
|
76
79
|
|
77
|
-
|
78
|
-
# and add this to the root of the bundle
|
80
|
+
plist_path = sandbox.root + "#{umbrella_target.cocoapods_target_label}-metadata.plist"
|
79
81
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
82
|
+
user_target_uuids = if targets.empty?
|
83
|
+
umbrella_target.user_target_uuids
|
84
|
+
else
|
85
|
+
umbrella_target.user_targets.select do |target|
|
86
|
+
targets.include?(target.name)
|
87
|
+
end.map(&:uuid)
|
88
|
+
end
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
-
user_options["settings_post_process"].call(settings_plist_path, umbrella_target, excluded_pods)
|
91
|
-
end
|
90
|
+
user_target_uuids.each do |user_target_uuid|
|
91
|
+
save_metadata(metadata, plist_path, project, sandbox, user_target_uuid)
|
92
92
|
|
93
|
+
if settings_metadata && settings_plist_path
|
94
|
+
save_metadata(settings_metadata, settings_plist_path, project, sandbox, user_target_uuid)
|
95
|
+
Pod::UI.info "Added Pod info to Settings.bundle for target #{umbrella_target.cocoapods_target_label}"
|
96
|
+
# Support a callback for the key :settings_post_process
|
97
|
+
if user_options["settings_post_process"]
|
98
|
+
user_options["settings_post_process"].call(settings_plist_path, umbrella_target, excluded_pods)
|
93
99
|
end
|
94
100
|
end
|
95
|
-
|
96
101
|
end
|
97
|
-
|
98
102
|
end
|
99
|
-
|
100
103
|
end
|
101
|
-
|
102
104
|
end
|
103
105
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'redcarpet'
|
2
3
|
|
3
4
|
module CocoaPodsAcknowledgements
|
@@ -13,14 +14,12 @@ module CocoaPodsAcknowledgements
|
|
13
14
|
|
14
15
|
return nil if root_specs.empty?
|
15
16
|
|
16
|
-
specs_metadata =
|
17
|
-
root_specs.each do |spec|
|
18
|
-
pod_root = sandbox.pod_dir(spec.name)
|
17
|
+
specs_metadata = root_specs.map do |spec|
|
19
18
|
platform = Pod::Platform.new(target_description.platform_name)
|
20
19
|
file_accessor = file_accessor(spec, platform, sandbox)
|
21
20
|
license_text = license_text(spec, file_accessor)
|
22
21
|
|
23
|
-
|
22
|
+
{
|
24
23
|
"name" => spec.name,
|
25
24
|
"version" => spec.version,
|
26
25
|
"authors" => spec.authors,
|
@@ -31,12 +30,11 @@ module CocoaPodsAcknowledgements
|
|
31
30
|
"licenseText" => license_text,
|
32
31
|
"homepage" => spec.homepage,
|
33
32
|
}
|
34
|
-
specs_metadata << spec_metadata
|
35
33
|
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
{
|
36
|
+
"specs" => specs_metadata
|
37
|
+
}
|
40
38
|
end
|
41
39
|
|
42
40
|
#-----------------------------------------------------------------------#
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'cocoapods_acknowledgements/plist_generator'
|
2
3
|
|
3
4
|
module CocoaPodsAcknowledgements
|
@@ -12,7 +13,6 @@ module CocoaPodsAcknowledgements
|
|
12
13
|
specs_metadata = [header]
|
13
14
|
|
14
15
|
root_specs.each do |spec|
|
15
|
-
pod_root = sandbox.pod_dir(spec.name)
|
16
16
|
platform = Pod::Platform.new(target_description.platform_name)
|
17
17
|
file_accessor = file_accessor(spec, platform, sandbox)
|
18
18
|
license_text = license_text(spec, file_accessor)
|
@@ -26,7 +26,7 @@ module CocoaPodsAcknowledgements
|
|
26
26
|
end
|
27
27
|
|
28
28
|
specs_metadata << footer
|
29
|
-
|
29
|
+
{
|
30
30
|
"PreferenceSpecifiers" => specs_metadata,
|
31
31
|
"Title" => "Acknowledgements",
|
32
32
|
"StringsTable" => "Acknowledgements"
|
@@ -34,7 +34,7 @@ module CocoaPodsAcknowledgements
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def header
|
37
|
-
|
37
|
+
{
|
38
38
|
"FooterText" => "This application makes use of the following third party libraries:",
|
39
39
|
"Title" => "Acknowledgements",
|
40
40
|
"Type" => "PSGroupSpecifier"
|
@@ -42,8 +42,8 @@ module CocoaPodsAcknowledgements
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def footer
|
45
|
-
|
46
|
-
"FooterText" => "Generated by CocoaPods -
|
45
|
+
{
|
46
|
+
"FooterText" => "Generated by CocoaPods - https://cocoapods.org",
|
47
47
|
"Title" => nil,
|
48
48
|
"Type" => "PSGroupSpecifier"
|
49
49
|
}
|
@@ -1,5 +1,155 @@
|
|
1
1
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
+
require 'xcodeproj'
|
2
3
|
|
3
4
|
describe CocoaPodsAcknowledgements do
|
4
5
|
|
6
|
+
UmbrellaTargetDescription = Pod::Installer::PostInstallHooksContext::UmbrellaTargetDescription
|
7
|
+
|
8
|
+
before do
|
9
|
+
@project_path = SpecHelper.temporary_directory + 'project.xcodeproj'
|
10
|
+
@project = Xcodeproj::Project.new(@project_path)
|
11
|
+
@project.initialize_from_scratch
|
12
|
+
@sandbox = temporary_sandbox
|
13
|
+
@spec1 = SpecHelper.spec1
|
14
|
+
@spec2 = SpecHelper.spec2
|
15
|
+
|
16
|
+
@settings_plist_content = {
|
17
|
+
'Title' => 'Acknowledgements',
|
18
|
+
'StringsTable' => 'Acknowledgements',
|
19
|
+
'PreferenceSpecifiers' => [
|
20
|
+
{
|
21
|
+
'Title' => 'Acknowledgements',
|
22
|
+
'Type' => 'PSGroupSpecifier',
|
23
|
+
'FooterText' => 'This application makes use of the following third party libraries:'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
'Title' => 'monkeylib',
|
27
|
+
'Type' => 'PSGroupSpecifier',
|
28
|
+
'FooterText' => 'Permission is hereby granted ...'
|
29
|
+
},
|
30
|
+
{
|
31
|
+
'Title' => 'BananaLib',
|
32
|
+
'Type' => 'PSGroupSpecifier',
|
33
|
+
'FooterText' => 'Permission is hereby granted ...'
|
34
|
+
},
|
35
|
+
{
|
36
|
+
'Title' => nil,
|
37
|
+
'Type' => 'PSGroupSpecifier',
|
38
|
+
'FooterText' => 'Generated by CocoaPods - https://cocoapods.org'
|
39
|
+
},
|
40
|
+
]
|
41
|
+
}
|
42
|
+
@plist_content = {
|
43
|
+
"specs" => [
|
44
|
+
{
|
45
|
+
"name" => "monkeylib",
|
46
|
+
"version"=> Pod::Version.new(1.0),
|
47
|
+
"authors"=> {
|
48
|
+
"CocoaPods" => "email@cocoapods.org"
|
49
|
+
},
|
50
|
+
"socialMediaURL" => "https://twitter.com/CocoaPods",
|
51
|
+
"summary" => "A lib to do monkey things",
|
52
|
+
"description" => "<h2>What is it</h2>\n\n<p>A lib to do monkey things</p>\n\n<h2>Why?</h2>\n\n<p>Why not?</p>\n",
|
53
|
+
"licenseType" => "MIT",
|
54
|
+
"licenseText" => "Permission is hereby granted ...",
|
55
|
+
"homepage" => "https://github.com/CocoaPods/monkeylib"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"name" => "BananaLib",
|
59
|
+
"version" => Pod::Version.new(1.0),
|
60
|
+
"authors" => {
|
61
|
+
"Banana Corp" => nil,
|
62
|
+
"Monkey Boy" => "monkey@banana-corp.local"
|
63
|
+
},
|
64
|
+
"socialMediaURL" => nil,
|
65
|
+
"summary" => "Chunky bananas!",
|
66
|
+
"description" => "<p>Full of chunky bananas.</p>\n",
|
67
|
+
"licenseType" => "MIT",
|
68
|
+
"licenseText" => "Permission is hereby granted ...",
|
69
|
+
"homepage" => "http://banana-corp.local/banana-lib.html"
|
70
|
+
}
|
71
|
+
]
|
72
|
+
}
|
73
|
+
|
74
|
+
@target = @project.new_target(:application, 'MyApp', :ios)
|
75
|
+
@plist_path = @sandbox.root + 'Pods-MyApp-metadata.plist'
|
76
|
+
@project.save
|
77
|
+
end
|
78
|
+
|
79
|
+
after do
|
80
|
+
FileUtils.rm_rf(SpecHelper.temporary_directory)
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'In general' do
|
84
|
+
it 'finds existing settings bundles' do
|
85
|
+
settings_bundle = SpecHelper.temporary_directory + 'Settings.bundle'
|
86
|
+
FileUtils.mkdir(settings_bundle)
|
87
|
+
resource_group = @project.main_group.new_group('Resources')
|
88
|
+
resource_group.new_file(settings_bundle)
|
89
|
+
|
90
|
+
result = CocoaPodsAcknowledgements.settings_bundle_in_project(@project)
|
91
|
+
result.to_s.should == settings_bundle.to_s
|
92
|
+
FileUtils.rm_rf(settings_bundle)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#save_metadata' do
|
97
|
+
it 'saves the metadata to disk' do
|
98
|
+
Xcodeproj::Plist.expects(:write_to_path).with(@plist_content, @plist_path).once
|
99
|
+
CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'adds the Pods group if not already existing' do
|
103
|
+
@project.main_group["Pods"].should.be.nil?
|
104
|
+
CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid)
|
105
|
+
@project.main_group["Pods"].should.not.be.nil?
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'adds the plist to the Pods group' do
|
109
|
+
CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid)
|
110
|
+
@project.main_group["Pods"].files.find { |f| f.path == 'Pods-MyApp-metadata.plist' }.should.not.be.nil?
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'adds the plist to user target Copy Resources build phase' do
|
114
|
+
CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid)
|
115
|
+
file_ref = @project.main_group["Pods"].files.find { |f| f.path == 'Pods-MyApp-metadata.plist' }
|
116
|
+
file_ref.should.not.be.nil?
|
117
|
+
|
118
|
+
@target.resources_build_phase.files.find { |f| f.file_ref == file_ref }.should.not.be.nil?
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'plugin-hook' do
|
123
|
+
before do
|
124
|
+
@target_description = UmbrellaTargetDescription.new(@project, [@target], [@spec1, @spec2], :ios, '8.0', 'Pods-MyApp')
|
125
|
+
@hook_context = Pod::Installer::PostInstallHooksContext.new(@sandbox, @sandbox.root, nil, [@target_description])
|
126
|
+
Xcodeproj::Project.stubs(:open).returns(@project)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'generates acknowledgement plists' do
|
130
|
+
CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid)
|
131
|
+
Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => {}})
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'generates a settings plist when specified' do
|
135
|
+
settings_bundle = SpecHelper.temporary_directory + 'Settings.bundle'
|
136
|
+
settings_plist_path = settings_bundle + 'Pods-MyApp-settings-metadata.plist'
|
137
|
+
FileUtils.mkdir(settings_bundle)
|
138
|
+
resource_group = @project.main_group.new_group('Resources')
|
139
|
+
resource_group.new_file(settings_bundle)
|
140
|
+
|
141
|
+
CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid).once
|
142
|
+
CocoaPodsAcknowledgements.expects(:save_metadata).with(@settings_plist_content, settings_plist_path.to_s, @project, @sandbox, @target.uuid).once
|
143
|
+
Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { :settings_bundle => true }})
|
144
|
+
FileUtils.rm_rf(settings_bundle)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "generates acknowledgement plists to only specified targets" do
|
148
|
+
CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid).once
|
149
|
+
Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { targets: ['MyApp'] }})
|
150
|
+
|
151
|
+
CocoaPodsAcknowledgements.expects(:save_metadata).never
|
152
|
+
Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { targets: ['TheOtherTarget'] }})
|
153
|
+
end
|
154
|
+
end
|
5
155
|
end
|
@@ -1,5 +1,142 @@
|
|
1
1
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
2
|
|
3
|
-
describe CocoaPodsAcknowledgements::PlistGenerator do
|
3
|
+
describe PlistGenerator = CocoaPodsAcknowledgements::PlistGenerator do
|
4
4
|
|
5
|
+
before do
|
6
|
+
@spec1 = SpecHelper.spec1
|
7
|
+
@spec2 = SpecHelper.spec2
|
8
|
+
PlistGenerator.stubs(:file_accessor).returns(nil)
|
9
|
+
@sandbox = temporary_sandbox
|
10
|
+
@target_description = stub('target_description',
|
11
|
+
:specs => [@spec1, @spec2],
|
12
|
+
:platform_name => 'ios')
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'In general' do
|
16
|
+
it 'generates metadata' do
|
17
|
+
result = PlistGenerator.generate(@target_description, @sandbox, [])
|
18
|
+
result.should == {
|
19
|
+
"specs" => [
|
20
|
+
{
|
21
|
+
"name" => "monkeylib",
|
22
|
+
"version"=> Pod::Version.new(1.0),
|
23
|
+
"authors"=> {
|
24
|
+
"CocoaPods" => "email@cocoapods.org"
|
25
|
+
},
|
26
|
+
"socialMediaURL" => "https://twitter.com/CocoaPods",
|
27
|
+
"summary" => "A lib to do monkey things",
|
28
|
+
"description" => "<h2>What is it</h2>\n\n<p>A lib to do monkey things</p>\n\n<h2>Why?</h2>\n\n<p>Why not?</p>\n",
|
29
|
+
"licenseType" => "MIT",
|
30
|
+
"licenseText" => "Permission is hereby granted ...",
|
31
|
+
"homepage" => "https://github.com/CocoaPods/monkeylib"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"name" => "BananaLib",
|
35
|
+
"version" => Pod::Version.new(1.0),
|
36
|
+
"authors" => {
|
37
|
+
"Banana Corp" => nil,
|
38
|
+
"Monkey Boy" => "monkey@banana-corp.local"
|
39
|
+
},
|
40
|
+
"socialMediaURL" => nil,
|
41
|
+
"summary" => "Chunky bananas!",
|
42
|
+
"description" => "<p>Full of chunky bananas.</p>\n",
|
43
|
+
"licenseType" => "MIT",
|
44
|
+
"licenseText" => "Permission is hereby granted ...",
|
45
|
+
"homepage" => "http://banana-corp.local/banana-lib.html"
|
46
|
+
}
|
47
|
+
]
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'generates nil if specs is empty' do
|
52
|
+
target_description = stub('target_description',
|
53
|
+
:specs => [],
|
54
|
+
:platform_name => 'ios')
|
55
|
+
result = PlistGenerator.generate(target_description, @sandbox, [])
|
56
|
+
result.should.be.nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'does not include metadata for excluded specs' do
|
60
|
+
target_description = stub('target_description',
|
61
|
+
:specs => [@spec1, @spec2],
|
62
|
+
:platform_name => 'ios')
|
63
|
+
result = PlistGenerator.generate(target_description, @sandbox, [@spec1.name])
|
64
|
+
result.should == {
|
65
|
+
"specs" => [
|
66
|
+
{
|
67
|
+
"name" => "BananaLib",
|
68
|
+
"version" => Pod::Version.new(1.0),
|
69
|
+
"authors" => {
|
70
|
+
"Banana Corp" => nil,
|
71
|
+
"Monkey Boy" => "monkey@banana-corp.local"
|
72
|
+
},
|
73
|
+
"socialMediaURL" => nil,
|
74
|
+
"summary" => "Chunky bananas!",
|
75
|
+
"description" => "<p>Full of chunky bananas.</p>\n",
|
76
|
+
"licenseType" => "MIT",
|
77
|
+
"licenseText" => "Permission is hereby granted ...",
|
78
|
+
"homepage" => "http://banana-corp.local/banana-lib.html"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'generates nil when all specs are excluded' do
|
85
|
+
target_description = stub('target_description',
|
86
|
+
:specs => [@spec1, @spec2],
|
87
|
+
:platform_name => 'ios')
|
88
|
+
result = PlistGenerator.generate(target_description, @sandbox, [@spec1.name, @spec2.name])
|
89
|
+
result.should.be.nil?
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '#license_text' do
|
93
|
+
it 'returns nil if license is missing' do
|
94
|
+
spec = stub('spec', :license => nil)
|
95
|
+
result = PlistGenerator.license_text(spec, nil)
|
96
|
+
result.should.be.nil?
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'returns text if specified' do
|
100
|
+
spec = stub('spec', :license => { :text => 'Permission is hereby granted ...'})
|
101
|
+
result = PlistGenerator.license_text(spec, nil)
|
102
|
+
result.should == 'Permission is hereby granted ...'
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'reads license files when specified' do
|
106
|
+
license_file = SpecHelper.temporary_directory + 'LICENSE'
|
107
|
+
license_file.open('w') { |f| f.write("Permission is hereby granted ...") }
|
108
|
+
spec = stub('spec', :license => { :file => license_file })
|
109
|
+
file_accessor = stub('file_accessor', :license => license_file)
|
110
|
+
result = PlistGenerator.license_text(spec, file_accessor)
|
111
|
+
result.should == 'Permission is hereby granted ...'
|
112
|
+
FileUtils.rm_f(license_file)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'warns when a license file is specified but does not exist' do
|
116
|
+
license_file = SpecHelper.temporary_directory + 'non-existent-file.txt'
|
117
|
+
spec = stub('spec', :license => { :file => license_file })
|
118
|
+
file_accessor = stub('file_accessor', :license => license_file)
|
119
|
+
PlistGenerator.license_text(spec, file_accessor)
|
120
|
+
Pod::UI.warnings.should.match /Unable to read the license file/
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'renders markdown' do
|
125
|
+
contents = <<EOT
|
126
|
+
# Title
|
127
|
+
Title description
|
128
|
+
|
129
|
+
## H2 Title
|
130
|
+
* List item 1
|
131
|
+
* List item 2
|
132
|
+
|
133
|
+
### Sub Sub Head
|
134
|
+
> Some interesting quote
|
135
|
+
**
|
136
|
+
EOT
|
137
|
+
expected = "<h1>Title</h1>\n\n<p>Title description</p>\n\n<h2>H2 Title</h2>\n\n<ul>\n<li>List item 1</li>\n<li>List item 2</li>\n</ul>\n\n<h3>Sub Sub Head</h3>\n\n<blockquote>\n<p>Some interesting quote\n**</p>\n</blockquote>\n"
|
138
|
+
result = PlistGenerator.parse_markdown(contents)
|
139
|
+
result.should == "<h1>Title</h1>\n\n<p>Title description</p>\n\n<h2>H2 Title</h2>\n\n<ul>\n<li>List item 1</li>\n<li>List item 2</li>\n</ul>\n\n<h3>Sub Sub Head</h3>\n\n<blockquote>\n<p>Some interesting quote\n**</p>\n</blockquote>\n"
|
140
|
+
end
|
141
|
+
end
|
5
142
|
end
|
@@ -1,5 +1,80 @@
|
|
1
1
|
require File.expand_path('../spec_helper.rb', __FILE__)
|
2
2
|
|
3
|
-
describe CocoaPodsAcknowledgements::SettingsPlistGenerator do
|
3
|
+
describe SettingsPlistGenerator = CocoaPodsAcknowledgements::SettingsPlistGenerator do
|
4
4
|
|
5
|
+
before do
|
6
|
+
@spec1 = SpecHelper.spec1
|
7
|
+
@spec2 = SpecHelper.spec2
|
8
|
+
SettingsPlistGenerator.stubs(:file_accessor).returns(nil)
|
9
|
+
@sandbox = temporary_sandbox
|
10
|
+
@target_description = stub('target_description',
|
11
|
+
:specs => [@spec1, @spec2],
|
12
|
+
:platform_name => 'ios')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'generates metadata' do
|
16
|
+
result = SettingsPlistGenerator.generate(@target_description, @sandbox, [])
|
17
|
+
result.should == {
|
18
|
+
'Title' => 'Acknowledgements',
|
19
|
+
'StringsTable' => 'Acknowledgements',
|
20
|
+
'PreferenceSpecifiers' => [
|
21
|
+
{
|
22
|
+
'Title' => 'Acknowledgements',
|
23
|
+
'Type' => 'PSGroupSpecifier',
|
24
|
+
'FooterText' => 'This application makes use of the following third party libraries:'
|
25
|
+
},
|
26
|
+
{
|
27
|
+
'Title' => 'monkeylib',
|
28
|
+
'Type' => 'PSGroupSpecifier',
|
29
|
+
'FooterText' => 'Permission is hereby granted ...'
|
30
|
+
},
|
31
|
+
{
|
32
|
+
'Title' => 'BananaLib',
|
33
|
+
'Type' => 'PSGroupSpecifier',
|
34
|
+
'FooterText' => 'Permission is hereby granted ...'
|
35
|
+
},
|
36
|
+
{
|
37
|
+
'Title' => nil,
|
38
|
+
'Type' => 'PSGroupSpecifier',
|
39
|
+
'FooterText' => 'Generated by CocoaPods - https://cocoapods.org'
|
40
|
+
},
|
41
|
+
]
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'generates nil if specs is empty' do
|
46
|
+
target_description = stub('target_description',
|
47
|
+
:specs => [],
|
48
|
+
:platform_name => 'ios')
|
49
|
+
result = SettingsPlistGenerator.generate(target_description, @sandbox, [])
|
50
|
+
result.should.be.nil?
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'does not include metadata for excluded specs' do
|
54
|
+
target_description = stub('target_description',
|
55
|
+
:specs => [@spec1, @spec2],
|
56
|
+
:platform_name => 'ios')
|
57
|
+
result = SettingsPlistGenerator.generate(target_description, @sandbox, [@spec1.name])
|
58
|
+
result.should == {
|
59
|
+
'Title' => 'Acknowledgements',
|
60
|
+
'StringsTable' => 'Acknowledgements',
|
61
|
+
'PreferenceSpecifiers' => [
|
62
|
+
{
|
63
|
+
'Title' => 'Acknowledgements',
|
64
|
+
'Type' => 'PSGroupSpecifier',
|
65
|
+
'FooterText' => 'This application makes use of the following third party libraries:'
|
66
|
+
},
|
67
|
+
{
|
68
|
+
'Title' => 'BananaLib',
|
69
|
+
'Type' => 'PSGroupSpecifier',
|
70
|
+
'FooterText' => 'Permission is hereby granted ...'
|
71
|
+
},
|
72
|
+
{
|
73
|
+
'Title' => nil,
|
74
|
+
'Type' => 'PSGroupSpecifier',
|
75
|
+
'FooterText' => 'Generated by CocoaPods - https://cocoapods.org'
|
76
|
+
},
|
77
|
+
]
|
78
|
+
}
|
79
|
+
end
|
5
80
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -44,4 +44,66 @@ module Pod
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
module SpecHelper
|
48
|
+
def self.temporary_directory
|
49
|
+
ROOT + 'tmp'
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.spec1
|
53
|
+
Pod::Specification.new do |s|
|
54
|
+
s.name = 'monkeylib'
|
55
|
+
s.version = '1.0'
|
56
|
+
s.authors = {
|
57
|
+
'CocoaPods' => 'email@cocoapods.org'
|
58
|
+
}
|
59
|
+
s.social_media_url = 'https://twitter.com/CocoaPods'
|
60
|
+
s.homepage = 'https://github.com/CocoaPods/monkeylib'
|
61
|
+
s.license = {
|
62
|
+
:type => 'MIT',
|
63
|
+
:file => 'LICENSE',
|
64
|
+
:text => 'Permission is hereby granted ...'
|
65
|
+
}
|
66
|
+
s.summary = 'A lib to do monkey things'
|
67
|
+
s.description = <<EOF
|
68
|
+
## What is it
|
69
|
+
A lib to do monkey things
|
70
|
+
## Why?
|
71
|
+
Why not?
|
72
|
+
EOF
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.spec2
|
77
|
+
Pod::Specification.new do |s|
|
78
|
+
s.name = 'BananaLib'
|
79
|
+
s.version = '1.0'
|
80
|
+
s.authors = 'Banana Corp', { 'Monkey Boy' => 'monkey@banana-corp.local' }
|
81
|
+
s.homepage = 'http://banana-corp.local/banana-lib.html'
|
82
|
+
s.summary = 'Chunky bananas!'
|
83
|
+
s.description = 'Full of chunky bananas.'
|
84
|
+
s.source = { :git => 'http://banana-corp.local/banana-lib.git', :tag => 'v1.0' }
|
85
|
+
s.license = {
|
86
|
+
:type => 'MIT',
|
87
|
+
:file => 'LICENSE',
|
88
|
+
:text => 'Permission is hereby granted ...'
|
89
|
+
}
|
90
|
+
s.source_files = 'Classes/*.{h,m,d}', 'Vendor', 'framework/Source/*.h'
|
91
|
+
s.resources = "Resources/*", "Resources/Images.xcassets"
|
92
|
+
s.vendored_framework = 'BananaFramework.framework'
|
93
|
+
s.vendored_library = 'libBananaStaticLib.a'
|
94
|
+
s.preserve_paths = 'preserve_me.txt'
|
95
|
+
s.public_header_files = 'Classes/Banana.h', 'framework/Source/MoreBanana.h'
|
96
|
+
s.module_map = 'Banana.modulemap'
|
97
|
+
|
98
|
+
s.prefix_header_file = 'Classes/BananaLib.pch'
|
99
|
+
s.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-framework SystemConfiguration' }
|
100
|
+
s.dependency 'monkey', '~> 1.0.1', '< 1.0.9'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def temporary_sandbox
|
106
|
+
Pod::Sandbox.new(SpecHelper.temporary_directory + 'Pods')
|
107
|
+
end
|
108
|
+
|
47
109
|
#-----------------------------------------------------------------------------#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-acknowledgements
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Pelosin
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-03-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -46,20 +46,34 @@ dependencies:
|
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '3.3'
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: xcodeproj
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
49
63
|
- !ruby/object:Gem::Dependency
|
50
64
|
name: bundler
|
51
65
|
requirement: !ruby/object:Gem::Requirement
|
52
66
|
requirements:
|
53
67
|
- - "~>"
|
54
68
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
69
|
+
version: '2.0'
|
56
70
|
type: :development
|
57
71
|
prerelease: false
|
58
72
|
version_requirements: !ruby/object:Gem::Requirement
|
59
73
|
requirements:
|
60
74
|
- - "~>"
|
61
75
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
76
|
+
version: '2.0'
|
63
77
|
- !ruby/object:Gem::Dependency
|
64
78
|
name: rake
|
65
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,6 +98,7 @@ files:
|
|
84
98
|
- ".travis.yml"
|
85
99
|
- CHANGELOG.md
|
86
100
|
- Gemfile
|
101
|
+
- Gemfile.lock
|
87
102
|
- LICENSE
|
88
103
|
- README.md
|
89
104
|
- Rakefile
|
@@ -116,8 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
131
|
- !ruby/object:Gem::Version
|
117
132
|
version: '0'
|
118
133
|
requirements: []
|
119
|
-
|
120
|
-
rubygems_version: 2.7.6
|
134
|
+
rubygems_version: 3.0.6
|
121
135
|
signing_key:
|
122
136
|
specification_version: 4
|
123
137
|
summary: CocoaPods plugin that generates an acknowledgements plist to make it easy
|