framework-generate 1.1.0 → 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 +4 -4
- data/README.md +41 -0
- data/bin/framework-generate +1 -1
- data/lib/SampleFrameworkSpec +6 -7
- data/lib/framework-generate/platform.rb +8 -8
- data/lib/framework-generate/project.rb +12 -17
- data/lib/framework-generate/target.rb +48 -35
- data/lib/framework-generate.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3352d76542ce29f95a8bb5a5f8fe901d95437551
|
4
|
+
data.tar.gz: '08b648f80dad19a6d78bc8175b169d566e26f98a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6e0333bedeea1689a55d1be0cd460b9e32b0ce265f8a09a4d13fe33319d929429b4b8a0b290386fdb437a1105a27a85f37bc89568aa4252c270cd9ba557bc33
|
7
|
+
data.tar.gz: fa17ccdc4bbb3e3efeaae96702ad2e202bb04c05be803f6ac5995ac7fbadb041d19134d22b892fa87699f33d669d3b8d55630e63e918dda92d42372420dfcf7e
|
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# framework-generate
|
2
|
+
[](https://badge.fury.io/rb/framework-generate)
|
3
|
+
[](LICENSE)
|
4
|
+
|
2
5
|
Simple tool to help generate a [multiplatform, single-scheme Xcode project](http://promisekit.org/news/2016/08/Multiplatform-Single-Scheme-Xcode-Projects/).
|
3
6
|
|
4
7
|
## Installation
|
@@ -21,6 +24,44 @@ framework-generate
|
|
21
24
|
|
22
25
|
To view the full `FrameworkSpec` documentation see the [`docs`](docs/FrameworkSpec.md) folder.
|
23
26
|
|
27
|
+
## Contributing
|
28
|
+
|
29
|
+
Love framework-generate but want to make it even better?
|
30
|
+
|
31
|
+
Open source isn't just writing code. We could use your help with any of the
|
32
|
+
following:
|
33
|
+
|
34
|
+
- Finding (and reporting!) bugs.
|
35
|
+
- New feature suggestions.
|
36
|
+
- Answering questions on issues.
|
37
|
+
- Documentation improvements.
|
38
|
+
- Reviewing pull requests.
|
39
|
+
- Helping to manage issue priorities.
|
40
|
+
- Fixing bugs/new features.
|
41
|
+
|
42
|
+
If any of that sounds cool to you, send a pull request! After a few
|
43
|
+
contributions, we'll add you as an admin to the repo so you can merge pull
|
44
|
+
requests and help build framework-generate.
|
45
|
+
|
46
|
+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by [its terms](CODE_OF_CONDUCT.md).
|
47
|
+
|
48
|
+
### How to contribute
|
49
|
+
|
50
|
+
Contributing is easy but you will need to have bundler installed. If you don't it can be installed using:
|
51
|
+
|
52
|
+
```bash
|
53
|
+
[sudo] gem install bundler
|
54
|
+
```
|
55
|
+
|
56
|
+
When you have bundler installed, simply make your changes to the tool and then try it out using:
|
57
|
+
|
58
|
+
```bash
|
59
|
+
bundle install
|
60
|
+
bundle exec framework-generate
|
61
|
+
```
|
62
|
+
|
63
|
+
Once your change is good to go open up a pull request!
|
64
|
+
|
24
65
|
## License
|
25
66
|
|
26
67
|
This project is licensed under the terms of the MIT license. See the [LICENSE](LICENSE) file.
|
data/bin/framework-generate
CHANGED
data/lib/SampleFrameworkSpec
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
target = new_target do |target|
|
2
|
+
target.name = #TARGET_NAME#
|
3
|
+
target.language = swift("3.0")
|
4
|
+
target.platforms = [
|
4
5
|
macos("10.11"),
|
5
6
|
ios("8.0"),
|
6
7
|
tvos("9.0"),
|
7
8
|
watchos("2.0")
|
8
|
-
]
|
9
|
-
|
10
|
-
target = new_target do |target|
|
11
|
-
target.name = #TARGET_NAME#
|
9
|
+
]
|
12
10
|
target.info_plist = #TARGET_INFO_PLIST#
|
13
11
|
target.bundle_id = #TARGET_BUNDLE_ID#
|
14
12
|
target.include_files = [
|
@@ -16,6 +14,7 @@ target = new_target do |target|
|
|
16
14
|
]
|
17
15
|
end
|
18
16
|
|
17
|
+
project.name = #PROJECT_NAME#
|
19
18
|
project.targets = [
|
20
19
|
target
|
21
20
|
]
|
@@ -5,7 +5,7 @@ module FrameworkGenerate
|
|
5
5
|
def initialize(type = nil, minimum_version = nil, search_paths = nil)
|
6
6
|
@type = type
|
7
7
|
@minimum_version = minimum_version
|
8
|
-
@search_paths = search_paths
|
8
|
+
@search_paths = search_paths.nil? ? default_search_paths : search_paths
|
9
9
|
|
10
10
|
yield(self) if block_given?
|
11
11
|
end
|
@@ -16,21 +16,21 @@ module FrameworkGenerate
|
|
16
16
|
|
17
17
|
def self.supported_platforms(platforms, is_test_target = false)
|
18
18
|
platforms
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
.reject { |platform| is_test_target && platform.type == :watchos }
|
20
|
+
.map(&:raw_values)
|
21
|
+
.join(' ')
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.find_platform(platforms, type)
|
25
25
|
platforms.find { |platform| platform.type == type }
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.deployment_target(
|
29
|
-
|
28
|
+
def self.deployment_target(platform)
|
29
|
+
platform.minimum_version
|
30
30
|
end
|
31
31
|
|
32
|
-
def self.search_paths(
|
33
|
-
|
32
|
+
def self.search_paths(platform)
|
33
|
+
platform.search_paths
|
34
34
|
end
|
35
35
|
|
36
36
|
def raw_values
|
@@ -22,27 +22,27 @@ module FrameworkGenerate
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# DSL
|
25
|
-
def new_target
|
25
|
+
def new_target
|
26
26
|
Target.new do |target|
|
27
|
-
|
27
|
+
yield(target)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def new_platform
|
31
|
+
def new_platform
|
32
32
|
Platform.new do |platform|
|
33
|
-
|
33
|
+
yield(platform)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def new_language
|
37
|
+
def new_language
|
38
38
|
Language.new do |language|
|
39
|
-
|
39
|
+
yield(language)
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
43
|
-
def new_script
|
42
|
+
|
43
|
+
def new_script
|
44
44
|
Script.new do |script|
|
45
|
-
|
45
|
+
yield(script)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -73,9 +73,7 @@ module FrameworkGenerate
|
|
73
73
|
|
74
74
|
# Interface
|
75
75
|
def project_path
|
76
|
-
if File.extname(@name) == '.xcodeproj'
|
77
|
-
return @name
|
78
|
-
end
|
76
|
+
return @name if File.extname(@name) == '.xcodeproj'
|
79
77
|
|
80
78
|
"#{@name}.xcodeproj"
|
81
79
|
end
|
@@ -101,12 +99,11 @@ module FrameworkGenerate
|
|
101
99
|
settings
|
102
100
|
end
|
103
101
|
|
104
|
-
def target_with_name(project, name)
|
105
|
-
project.native_targets.detect { |e| e.name == name }
|
102
|
+
def target_with_name(project, name)
|
103
|
+
project.native_targets.detect { |e| e.name == name }
|
106
104
|
end
|
107
105
|
|
108
106
|
def generate
|
109
|
-
|
110
107
|
project = Xcodeproj::Project.new(project_path)
|
111
108
|
|
112
109
|
schemes_dir = Xcodeproj::XCScheme.user_data_dir(project.path)
|
@@ -151,7 +148,6 @@ module FrameworkGenerate
|
|
151
148
|
scheme.save_as(project.path, target.name, true)
|
152
149
|
xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"] = {}
|
153
150
|
xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"]['isShown'] = true
|
154
|
-
|
155
151
|
end
|
156
152
|
|
157
153
|
project.native_targets.each do |target|
|
@@ -168,6 +164,5 @@ module FrameworkGenerate
|
|
168
164
|
|
169
165
|
puts "Successfully generated #{project_path}"
|
170
166
|
end
|
171
|
-
|
172
167
|
end
|
173
168
|
end
|
@@ -34,16 +34,33 @@ module FrameworkGenerate
|
|
34
34
|
|
35
35
|
settings['INFOPLIST_FILE'] = @info_plist
|
36
36
|
settings['PRODUCT_BUNDLE_IDENTIFIER'] = @bundle_id
|
37
|
-
settings['APPLICATION_EXTENSION_API_ONLY'] = @is_safe_for_extensions ? 'YES' : 'NO'
|
38
|
-
settings['SUPPORTED_PLATFORMS'] = FrameworkGenerate::Platform
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
settings['APPLICATION_EXTENSION_API_ONLY'] = @is_safe_for_extensions ? 'YES' : 'NO'
|
38
|
+
settings['SUPPORTED_PLATFORMS'] = FrameworkGenerate::Platform.supported_platforms(@platforms)
|
39
|
+
|
40
|
+
macos = FrameworkGenerate::Platform.find_platform(@platforms, :macos)
|
41
|
+
unless macos.nil?
|
42
|
+
settings['MACOSX_DEPLOYMENT_TARGET'] = FrameworkGenerate::Platform.deployment_target(macos)
|
43
|
+
settings['FRAMEWORK_SEARCH_PATHS[sdk=macosx*]'] = FrameworkGenerate::Platform.search_paths(macos)
|
44
|
+
end
|
45
|
+
|
46
|
+
ios = FrameworkGenerate::Platform.find_platform(@platforms, :ios)
|
47
|
+
unless ios.nil?
|
48
|
+
settings['IPHONEOS_DEPLOYMENT_TARGET'] = FrameworkGenerate::Platform.deployment_target(ios)
|
49
|
+
settings['FRAMEWORK_SEARCH_PATHS[sdk=iphone*]'] = FrameworkGenerate::Platform.search_paths(ios)
|
50
|
+
end
|
51
|
+
|
52
|
+
watchos = FrameworkGenerate::Platform.find_platform(@platforms, :watchos)
|
53
|
+
unless watchos.nil?
|
54
|
+
settings['WATCHOS_DEPLOYMENT_TARGET'] = FrameworkGenerate::Platform.deployment_target(watchos)
|
55
|
+
settings['FRAMEWORK_SEARCH_PATHS[sdk=watch*]'] = FrameworkGenerate::Platform.search_paths(watchos)
|
56
|
+
end
|
57
|
+
|
58
|
+
tvos = FrameworkGenerate::Platform.find_platform(@platforms, :tvos)
|
59
|
+
unless tvos.nil?
|
60
|
+
settings['TVOS_DEPLOYMENT_TARGET'] = FrameworkGenerate::Platform.deployment_target(tvos)
|
61
|
+
settings['FRAMEWORK_SEARCH_PATHS[sdk=appletv*]'] = FrameworkGenerate::Platform.search_paths(tvos)
|
62
|
+
end
|
63
|
+
|
47
64
|
settings['SWIFT_VERSION'] = @language.version
|
48
65
|
|
49
66
|
settings
|
@@ -55,7 +72,7 @@ module FrameworkGenerate
|
|
55
72
|
end
|
56
73
|
|
57
74
|
def add_framework_header(project, target)
|
58
|
-
return
|
75
|
+
return if @header.nil?
|
59
76
|
header_path = @header
|
60
77
|
header_file_group = find_group(project, header_path)
|
61
78
|
header_file = header_file_group.new_reference(header_path)
|
@@ -89,13 +106,13 @@ module FrameworkGenerate
|
|
89
106
|
end
|
90
107
|
|
91
108
|
def add_source_files(project, target)
|
92
|
-
if @exclude_files
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
109
|
+
exclude_files = if @exclude_files.nil?
|
110
|
+
[]
|
111
|
+
else
|
112
|
+
@exclude_files.map do |files|
|
113
|
+
Dir[files]
|
114
|
+
end
|
115
|
+
end
|
99
116
|
|
100
117
|
source_files = @include_files.map do |files|
|
101
118
|
Dir[files].reject do |path|
|
@@ -116,15 +133,13 @@ module FrameworkGenerate
|
|
116
133
|
end
|
117
134
|
|
118
135
|
def append_framework_extension(framework)
|
119
|
-
if File.extname(framework) == '.framework'
|
120
|
-
return framework
|
121
|
-
end
|
136
|
+
return framework if File.extname(framework) == '.framework'
|
122
137
|
|
123
138
|
"#{framework}.framework"
|
124
139
|
end
|
125
140
|
|
126
141
|
def add_dependencies(project, target)
|
127
|
-
return
|
142
|
+
return if @dependencies.nil?
|
128
143
|
|
129
144
|
dependency_names = @dependencies.map do |dependency|
|
130
145
|
append_framework_extension(dependency)
|
@@ -156,21 +171,19 @@ module FrameworkGenerate
|
|
156
171
|
else
|
157
172
|
script_path = File.join(Dir.pwd, scripts_directory, script_file_name)
|
158
173
|
dirname = File.dirname(script_path)
|
159
|
-
unless File.directory?(dirname)
|
160
|
-
FileUtils.mkdir_p(dirname)
|
161
|
-
end
|
174
|
+
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
162
175
|
|
163
|
-
FileUtils.cp(script_file_path, script_path,
|
176
|
+
FileUtils.cp(script_file_path, script_path, preserve: true)
|
164
177
|
|
165
|
-
xcode_path = File.join(
|
178
|
+
xcode_path = File.join('${SRCROOT}', scripts_directory, script_file_name)
|
166
179
|
build_phase.shell_script = " exec \"#{xcode_path}\""
|
167
180
|
end
|
168
|
-
|
181
|
+
|
169
182
|
add_framework_to_copy_phase(project, build_phase)
|
170
183
|
end
|
171
184
|
|
172
185
|
def add_framework_to_copy_phase(project, build_phase)
|
173
|
-
return
|
186
|
+
return if @dependencies.nil?
|
174
187
|
|
175
188
|
dependency_names = @dependencies.map do |dependency|
|
176
189
|
append_framework_extension(dependency)
|
@@ -186,7 +199,7 @@ module FrameworkGenerate
|
|
186
199
|
end
|
187
200
|
|
188
201
|
def add_resource_files(project, target)
|
189
|
-
return
|
202
|
+
return if @resource_files.nil?
|
190
203
|
|
191
204
|
files = @resource_files.map do |files|
|
192
205
|
Dir[files]
|
@@ -205,9 +218,9 @@ module FrameworkGenerate
|
|
205
218
|
end
|
206
219
|
|
207
220
|
def add_build_scripts(target, scripts)
|
208
|
-
return
|
221
|
+
return if scripts.nil?
|
209
222
|
|
210
|
-
scripts.each do |script|
|
223
|
+
scripts.each do |script|
|
211
224
|
build_phase = target.new_shell_script_build_phase(script.name)
|
212
225
|
build_phase.shell_script = script.script
|
213
226
|
build_phase.input_paths = script.inputs
|
@@ -217,11 +230,11 @@ module FrameworkGenerate
|
|
217
230
|
def add_pre_build_scripts(target)
|
218
231
|
add_build_scripts(target, @pre_build_scripts)
|
219
232
|
end
|
220
|
-
|
233
|
+
|
221
234
|
def add_post_build_scripts(target)
|
222
235
|
add_build_scripts(target, @post_build_scripts)
|
223
236
|
end
|
224
|
-
|
237
|
+
|
225
238
|
def create(project, language, scripts_directory)
|
226
239
|
name = @name
|
227
240
|
type = @type
|
@@ -252,7 +265,7 @@ module FrameworkGenerate
|
|
252
265
|
|
253
266
|
target.build_phases << project.new(Xcodeproj::Project::Object::PBXResourcesBuildPhase)
|
254
267
|
target.build_phases << project.new(Xcodeproj::Project::Object::PBXFrameworksBuildPhase)
|
255
|
-
|
268
|
+
|
256
269
|
# Post build script
|
257
270
|
add_post_build_scripts(target)
|
258
271
|
|
data/lib/framework-generate.rb
CHANGED
@@ -9,14 +9,14 @@ module FrameworkGenerate
|
|
9
9
|
puts "Couldn't find FrameworkSpec. Do you want to create one? [Y/N]"
|
10
10
|
create_file = gets.chomp
|
11
11
|
|
12
|
-
if create_file
|
12
|
+
if create_file.casecmp('Y').zero?
|
13
13
|
sample_framework_spec = File.join(File.dirname(__FILE__), 'SampleFrameworkSpec')
|
14
14
|
|
15
15
|
FileUtils.cp(sample_framework_spec, file_path)
|
16
16
|
|
17
|
-
abort
|
17
|
+
abort 'Created a FrameworkSpec. Update the contents of the FrameworkSpec file and rerun the command'
|
18
18
|
elsif
|
19
|
-
abort
|
19
|
+
abort 'Cannot create a project without a FrameworkSpec'
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: framework-generate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre-Marc Airoldi
|
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
69
|
version: '0'
|
70
70
|
requirements: []
|
71
71
|
rubyforge_project:
|
72
|
-
rubygems_version: 2.
|
72
|
+
rubygems_version: 2.6.12
|
73
73
|
signing_key:
|
74
74
|
specification_version: 4
|
75
75
|
summary: Tool to generate an Xcode framework project
|