xcake 0.6.25 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +10 -10
- data/README.md +4 -0
- data/bin/xcake +1 -1
- data/docs/Cakefile.md +23 -4
- data/docs/Sample/Cakefile +365 -0
- data/lib/xcake/context/xcodeproj_context.rb +3 -4
- data/lib/xcake/generator/configuration_generator.rb +1 -1
- data/lib/xcake/generator/target_file_reference_generator.rb +24 -30
- data/lib/xcake/informative.rb +1 -1
- data/lib/xcake/path_classifier.rb +66 -0
- data/lib/xcake/project/sugar.rb +26 -0
- data/lib/xcake/project.rb +0 -1
- data/lib/xcake/target/configurable.rb +38 -0
- data/lib/xcake/target.rb +0 -39
- data/lib/xcake/ui.rb +2 -3
- data/lib/xcake/version.rb +1 -1
- data/lib/xcake/xcode/project.rb +35 -43
- data/lib/xcake/xcodeproj_ext/PBXGroup.rb +41 -0
- data/lib/xcake/xcodeproj_ext/PBXNativeTarget.rb +14 -0
- data/lib/xcake.rb +6 -2
- data/xcake.gemspec +1 -1
- metadata +10 -14
- data/lib/xcake/file_reference_installer/compile_source_file_reference_installer.rb +0 -15
- data/lib/xcake/file_reference_installer/compile_xcdatamodeld_file_reference_installer.rb +0 -22
- data/lib/xcake/file_reference_installer/copy_resources_file_reference_installer.rb +0 -25
- data/lib/xcake/file_reference_installer/copy_xcassets_file_reference_installer.rb +0 -22
- data/lib/xcake/file_reference_installer/header_file_reference_installer.rb +0 -11
- data/lib/xcake/file_reference_installer/link_library_file_reference_installer.rb +0 -21
- data/lib/xcake/file_reference_installer.rb +0 -83
- data/lib/xcake/node.rb +0 -138
- /data/{_hound.yml → hound.yml} +0 -0
- /data/{_rubocop.yml → rubocop.yml} +0 -0
- /data/{_rubocop_general.yml → rubocop_general.yml} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59b934c91bcb37c5f0d097d51c3e7a0871a9f1de
|
4
|
+
data.tar.gz: 50b91a77213c6682a9eafae98400a62b09f04883
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7288c8d779b598cf328b77635dc16e5c183c00a2e7765691b96f261b7dfabb0547c6bc199bc3420bbf09e6981995f0aed71735418d2878e2f44e39a16e105866
|
7
|
+
data.tar.gz: 4eb8286ac978fc3cce5556e363fd2419a16b71a3306183219ed2db619063eac195f66a6f080383b3dac7afd70da3366cff15c344a0e991a4323cc34b3ad375c6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
v0.7.0
|
2
|
+
======
|
3
|
+
- Simplified Target File Reference Generator.
|
4
|
+
- Adds support for UI Tests.
|
5
|
+
- Adds sample Cakefile to documentation.
|
6
|
+
- Adds support for extension targets.
|
7
|
+
|
1
8
|
v0.6.25
|
2
9
|
=======
|
3
10
|
- Fixed bug where Xcake would set incorrect path for a group of a Localized file.
|
@@ -117,6 +124,7 @@ v0.6.1
|
|
117
124
|
v0.6.0
|
118
125
|
======
|
119
126
|
- Infers build phases for the apple watch.
|
127
|
+
- Re-engineered generator infastructure.
|
120
128
|
- Fixes bug where configurations lacked a name when using shorthand syntax. (Thanks to @colinta).
|
121
129
|
- Adds support for custom script build phases (Thanks to @colinta).
|
122
130
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
xcake (0.
|
4
|
+
xcake (0.7.0)
|
5
5
|
activesupport (< 5)
|
6
6
|
claide (>= 0.9.1, < 2.0)
|
7
7
|
cork
|
@@ -11,7 +11,7 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
activesupport (4.2.
|
14
|
+
activesupport (4.2.7.1)
|
15
15
|
i18n (~> 0.7)
|
16
16
|
json (~> 1.7, >= 1.7.7)
|
17
17
|
minitest (~> 5.1)
|
@@ -21,14 +21,14 @@ GEM
|
|
21
21
|
claide (1.0.0)
|
22
22
|
coderay (1.1.1)
|
23
23
|
colored (1.2)
|
24
|
-
cork (0.
|
24
|
+
cork (0.2.0)
|
25
25
|
colored (~> 1.2)
|
26
|
-
coveralls (0.8.
|
26
|
+
coveralls (0.8.15)
|
27
27
|
json (>= 1.8, < 3)
|
28
28
|
simplecov (~> 0.12.0)
|
29
29
|
term-ansicolor (~> 1.3)
|
30
30
|
thor (~> 0.19.1)
|
31
|
-
tins (
|
31
|
+
tins (>= 1.6.0, < 2)
|
32
32
|
diff-lcs (1.2.5)
|
33
33
|
docile (1.1.5)
|
34
34
|
hooks (0.4.1)
|
@@ -40,7 +40,7 @@ GEM
|
|
40
40
|
parser (2.3.1.2)
|
41
41
|
ast (~> 2.2)
|
42
42
|
powerpack (0.1.1)
|
43
|
-
pry (0.10.
|
43
|
+
pry (0.10.4)
|
44
44
|
coderay (~> 1.1.0)
|
45
45
|
method_source (~> 0.8.1)
|
46
46
|
slop (~> 3.4)
|
@@ -59,7 +59,7 @@ GEM
|
|
59
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
60
60
|
rspec-support (~> 3.4.0)
|
61
61
|
rspec-support (3.4.1)
|
62
|
-
rubocop (0.
|
62
|
+
rubocop (0.42.0)
|
63
63
|
parser (>= 2.3.1.1, < 3.0)
|
64
64
|
powerpack (~> 0.1)
|
65
65
|
rainbow (>= 1.99.1, < 3.0)
|
@@ -78,16 +78,16 @@ GEM
|
|
78
78
|
tins (~> 1.0)
|
79
79
|
thor (0.19.1)
|
80
80
|
thread_safe (0.3.5)
|
81
|
-
tins (1.
|
81
|
+
tins (1.12.0)
|
82
82
|
tzinfo (1.2.2)
|
83
83
|
thread_safe (~> 0.1)
|
84
84
|
uber (0.0.15)
|
85
85
|
unicode-display_width (1.1.0)
|
86
|
-
xcodeproj (1.
|
86
|
+
xcodeproj (1.2.0)
|
87
87
|
activesupport (>= 3)
|
88
88
|
claide (>= 1.0.0, < 2.0)
|
89
89
|
colored (~> 1.2)
|
90
|
-
yard (0.9.
|
90
|
+
yard (0.9.5)
|
91
91
|
|
92
92
|
PLATFORMS
|
93
93
|
ruby
|
data/README.md
CHANGED
@@ -95,6 +95,10 @@ Usually you'll use xcake by running the command
|
|
95
95
|
|
96
96
|
Xcake will then generate a Xcode project based on your Cakefile
|
97
97
|
|
98
|
+
## Sample Cakefile
|
99
|
+
|
100
|
+
To get better understanding of how to start using Xcake in a real project, see sample [Cakefile](https://github.com/jcampbell05/xcake/blob/master/docs/Sample/Cakefile).
|
101
|
+
|
98
102
|
## Need help?
|
99
103
|
Please submit an issue on GitHub and provide information about your setup
|
100
104
|
|
data/bin/xcake
CHANGED
data/docs/Cakefile.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#Cakefile Syntax Reference
|
1
|
+
# Cakefile Syntax Reference
|
2
2
|
|
3
3
|
The `Cakefile` contains a lightweight DSL which provides the instructions on how to generate
|
4
4
|
a project file. We adopt the convention over configuration and thus it can be very simple:
|
@@ -92,7 +92,7 @@ Mac App:
|
|
92
92
|
application_for :mac, 8.0
|
93
93
|
```
|
94
94
|
|
95
|
-
###Tests
|
95
|
+
### Tests
|
96
96
|
|
97
97
|
We can also specify a testing targets for other targets as well:
|
98
98
|
|
@@ -115,13 +115,32 @@ application_for :mac, 8.0 do |target|
|
|
115
115
|
test_target.include_files = ["Tests/**/*.*"]
|
116
116
|
|
117
117
|
# configure any other target-related properties
|
118
|
-
# as you would do with
|
118
|
+
# as you would do with application target
|
119
119
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
```
|
123
123
|
|
124
|
-
###
|
124
|
+
### UI Tests
|
125
|
+
|
126
|
+
To create UI tests target, you do everything the same as for unit tests, but instead of "unit_tests_for" use "ui_tests_for", like this:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
application_for :mac, 8.0 do |target|
|
130
|
+
|
131
|
+
ui_tests_for target do |test_target|
|
132
|
+
|
133
|
+
test_target.name = "MyAwesomeUITests"
|
134
|
+
test_target.include_files = ["UITests/**/*.*"]
|
135
|
+
|
136
|
+
# configure any other target-related properties
|
137
|
+
# as you would do with application target
|
138
|
+
|
139
|
+
end
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
### Watch
|
125
144
|
|
126
145
|
To create watch applications we can simply use the `watch_app_for` method:
|
127
146
|
|
@@ -0,0 +1,365 @@
|
|
1
|
+
# https://github.com/jcampbell05/xcake
|
2
|
+
# http://www.rubydoc.info/github/jcampbell05/xcake/master/file/docs/Cakefile.md
|
3
|
+
|
4
|
+
# this is a sample Cakefile for a fictional project that is called "CakeMania"
|
5
|
+
|
6
|
+
#===
|
7
|
+
|
8
|
+
# lets define high level project settings
|
9
|
+
|
10
|
+
project.name = "CakeMania"
|
11
|
+
project.class_prefix = "CMN"
|
12
|
+
project.organization = "CakeMania Inc."
|
13
|
+
|
14
|
+
#===
|
15
|
+
|
16
|
+
# Below we explicitly define the list of project build configurations.
|
17
|
+
# If you do not define it explicitly, Xcake will implicitly define default ones,
|
18
|
+
# that are equivalent to this:
|
19
|
+
#
|
20
|
+
# project.debug_configuration :Debug
|
21
|
+
# project.release_configuration :Release
|
22
|
+
#
|
23
|
+
|
24
|
+
project.debug_configuration :Debug # for local development/debugging only, pointing to "test.*" API server
|
25
|
+
project.release_configuration :Staging # for alpha and beta AdHoc builds, pointing to "test.*" API server
|
26
|
+
project.release_configuration :RC # for release candidate AdHoc builds, pointing to "rc.*" API server
|
27
|
+
project.release_configuration :Production # for App Store ready AdHoc builds, pointing to "www." API server
|
28
|
+
project.release_configuration :AppStore # for App Store builds, pointing to "www." API server
|
29
|
+
|
30
|
+
# Note, that Xcake will also automatically create set of project "Schemes" -
|
31
|
+
# one for each build configuration, their names will be constructed from
|
32
|
+
# project name and configuration name, separated by dash, like this:
|
33
|
+
#
|
34
|
+
# "<project_name>-<configuration_name>"
|
35
|
+
#
|
36
|
+
# NOTE: every scheme will have the same build configiuration
|
37
|
+
# for all phases (Run, Test, Profile, Archive). If you need different build configurations
|
38
|
+
# based on phase - lets say one configuration for Run, but different one for Archive -
|
39
|
+
# consider to have different build configurations (and as result - build shemes) for these purposes
|
40
|
+
# (as proposed in this sample file).
|
41
|
+
#
|
42
|
+
# For this example, shemes will be:
|
43
|
+
#
|
44
|
+
# "CakeMania-Debug"
|
45
|
+
# "CakeMania-Staging"
|
46
|
+
# "CakeMania-RC"
|
47
|
+
# "CakeMania-Production"
|
48
|
+
# "CakeMania-AppStore"
|
49
|
+
|
50
|
+
#===
|
51
|
+
|
52
|
+
# Below we define "project level" build configurations.
|
53
|
+
# REMEMBER this entiire file is just an interpretable script,
|
54
|
+
# and the structure below is just a loop.
|
55
|
+
# At every iteration we have reference to one
|
56
|
+
# of the build configurations defined above explicitly or implicitly.
|
57
|
+
|
58
|
+
# In this case, we set the same build settings to each configuration,
|
59
|
+
# but, if we need to have some settings to be different for different
|
60
|
+
# configurations, then you can use "if" expression to set different build settings
|
61
|
+
# dependiong on "configuration.name" (we will see example of that in target settings below in this document).
|
62
|
+
|
63
|
+
project.all_configurations.each do |configuration|
|
64
|
+
|
65
|
+
# the settings listed below are just a copy
|
66
|
+
# of what Xcode sets explicitly in a newly created Xcode
|
67
|
+
# project file in comparison with default values
|
68
|
+
# (the values that are marked with bold font).
|
69
|
+
|
70
|
+
configuration.settings["ENABLE_BITCODE"] = "YES"
|
71
|
+
|
72
|
+
configuration.settings["SDKROOT"] = "iphoneos"
|
73
|
+
configuration.settings["GCC_DYNAMIC_NO_PIC"] = "NO"
|
74
|
+
configuration.settings["OTHER_CFLAGS"] = "$(inherited) -DNS_BLOCK_ASSERTIONS=1"
|
75
|
+
configuration.settings["GCC_C_LANGUAGE_STANDARD"] = "gnu99"
|
76
|
+
configuration.settings["CLANG_ENABLE_MODULES"] = "YES"
|
77
|
+
configuration.settings["CLANG_ENABLE_OBJC_ARC"] = "YES"
|
78
|
+
configuration.settings["ENABLE_NS_ASSERTIONS"] = "NO"
|
79
|
+
configuration.settings["ENABLE_STRICT_OBJC_MSGSEND"] = "YES"
|
80
|
+
configuration.settings["CLANG_WARN_EMPTY_BODY"] = "YES"
|
81
|
+
configuration.settings["CLANG_WARN_BOOL_CONVERSION"] = "YES"
|
82
|
+
configuration.settings["CLANG_WARN_CONSTANT_CONVERSION"] = "YES"
|
83
|
+
configuration.settings["GCC_WARN_64_TO_32_BIT_CONVERSION"] = "YES"
|
84
|
+
configuration.settings["CLANG_WARN_INT_CONVERSION"] = "YES"
|
85
|
+
configuration.settings["GCC_WARN_ABOUT_RETURN_TYPE"] = "YES_ERROR"
|
86
|
+
configuration.settings["GCC_WARN_UNINITIALIZED_AUTOS"] = "YES_AGGRESSIVE"
|
87
|
+
configuration.settings["CLANG_WARN_UNREACHABLE_CODE"] = "YES"
|
88
|
+
configuration.settings["GCC_WARN_UNUSED_FUNCTION"] = "YES"
|
89
|
+
configuration.settings["GCC_WARN_UNUSED_VARIABLE"] = "YES"
|
90
|
+
configuration.settings["CLANG_WARN_DIRECT_OBJC_ISA_USAGE"] = "YES_ERROR"
|
91
|
+
configuration.settings["CLANG_WARN__DUPLICATE_METHOD_MATCH"] = "YES"
|
92
|
+
configuration.settings["GCC_WARN_UNDECLARED_SELECTOR"] = "YES"
|
93
|
+
configuration.settings["CLANG_WARN_OBJC_ROOT_CLASS"] = "YES_ERROR"
|
94
|
+
configuration.settings["DEFINES_MODULE"] = "YES" # http://stackoverflow.com/a/27251979
|
95
|
+
|
96
|
+
configuration.settings["CURRENT_PROJECT_VERSION"] = "1" # just default non-empty value
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
#=== 3d-party integration keys (global variables)
|
101
|
+
|
102
|
+
# The values below will be used to set "user-defined" build settings
|
103
|
+
# for build configurations on target level,
|
104
|
+
# so we can reuse the same, lets say, "test" FB key
|
105
|
+
# within several "test" configurations (for example, the same test key
|
106
|
+
# would be used for "Debug" and "Staging" configurations), and can easily
|
107
|
+
# see what is the value/key we use for testing and production,
|
108
|
+
# and even update it in future if needed.
|
109
|
+
|
110
|
+
# "FACEBOOK_KEY"
|
111
|
+
|
112
|
+
facebookProdKey = "888888888888888"
|
113
|
+
facebookTestKey = "999999999999999"
|
114
|
+
|
115
|
+
#=== Targets
|
116
|
+
|
117
|
+
# So far, we've defined poject settings and
|
118
|
+
# project level build configuration settings
|
119
|
+
# (which define defaults for target level build configurations).
|
120
|
+
#
|
121
|
+
# Now it's time to define target-level build settings.
|
122
|
+
|
123
|
+
# Below we define "application"-type target and
|
124
|
+
# put all it's settings (including definition or related unit test targets)
|
125
|
+
# inside "application_for ... do ... end" structure.
|
126
|
+
|
127
|
+
application_for :ios, 8.0 do |target|
|
128
|
+
|
129
|
+
# first of all, we set target settings
|
130
|
+
|
131
|
+
target.name = "CakeMania"
|
132
|
+
target.language = :swift
|
133
|
+
|
134
|
+
#===
|
135
|
+
|
136
|
+
# Now lets set target-level build settigns.
|
137
|
+
# Again, the structure below is just a loop,
|
138
|
+
# everything between "target.all_configurations.each do |configuration|"
|
139
|
+
# and corresponding "end" (see below on the same level in the very bottom of the file)
|
140
|
+
# is body of this loop, that repeats every iteration. This loop goes through
|
141
|
+
# the list of build configurations (defined above) and on each iteration
|
142
|
+
# we have variable "configuration" that contains reference to one
|
143
|
+
# of the build configurations in CONTEXT of the TARGET. This is equivalent of setting
|
144
|
+
# build settings on target-level in Xcode (you can access it if you choose to
|
145
|
+
# see build settigns by "Levels", not "Combined").
|
146
|
+
|
147
|
+
# Imagine we have project folder structure like this:
|
148
|
+
#
|
149
|
+
# - Cakefile
|
150
|
+
# - Info/
|
151
|
+
# | - CakeMania.plist
|
152
|
+
# | - CakeManiaTests.plist
|
153
|
+
# | - CakeManiaUITests.plist
|
154
|
+
# - Src/
|
155
|
+
# | - ...
|
156
|
+
# | - ObjC/
|
157
|
+
# | - Prefix.pch
|
158
|
+
# | - CakeMania-Bridging-Header.h
|
159
|
+
# | - ...
|
160
|
+
# - Res/
|
161
|
+
# | - CakeMania.entitlements
|
162
|
+
# | - CakeMania-test.entitlements
|
163
|
+
# | - ...
|
164
|
+
# | - CakeMania.xcassets/
|
165
|
+
# | - ...
|
166
|
+
# | - AppIcon.appiconset/
|
167
|
+
# | - ...
|
168
|
+
# | - Brand Assets.launchimage/
|
169
|
+
# | - ...
|
170
|
+
# | - ...
|
171
|
+
# - Lib/
|
172
|
+
# | - ...
|
173
|
+
# - Tst/
|
174
|
+
# | - ...
|
175
|
+
# - UITst/
|
176
|
+
# | - ...
|
177
|
+
#
|
178
|
+
|
179
|
+
target.all_configurations.each do |configuration|
|
180
|
+
|
181
|
+
#=== Build Settings - Core
|
182
|
+
|
183
|
+
configuration.product_bundle_identifier = "com.CakeMania.theApp"
|
184
|
+
|
185
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/CakeMania.plist"
|
186
|
+
|
187
|
+
configuration.settings["PRODUCT_NAME"] = "$(TARGET_NAME)"
|
188
|
+
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania.entitlements"
|
189
|
+
configuration.settings["GCC_PREFIX_HEADER"] = "Src/ObjC/Prefix.pch"
|
190
|
+
# configuration.settings["FRAMEWORK_SEARCH_PATHS"] = "$(inherited)"
|
191
|
+
configuration.settings["LIBRARY_SEARCH_PATHS"] = "$(inherited) $(SRCROOT)/Lib/**"
|
192
|
+
configuration.settings["ASSETCATALOG_COMPILER_APPICON_NAME"] = "AppIcon"
|
193
|
+
configuration.settings["ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME"] = "Brand Assets"
|
194
|
+
configuration.settings["SWIFT_OBJC_BRIDGING_HEADER"] = "Src/ObjC/CakeMania-Bridging-Header.h"
|
195
|
+
configuration.settings["OTHER_LDFLAGS"] = "$(inherited) -ObjC"
|
196
|
+
|
197
|
+
# make configuration name available in run time:
|
198
|
+
configNameFlag = "CONFIG_" + configuration.name.upcase
|
199
|
+
configuration.settings["GCC_PREPROCESSOR_DEFINITIONS"] = "$(inherited) " + configNameFlag + "=1" # Obj-C support
|
200
|
+
configuration.settings["OTHER_SWIFT_FLAGS"] = "$(inherited) -D" + configNameFlag # Swift support
|
201
|
+
|
202
|
+
# This will show "Automatic" in Xcode,
|
203
|
+
# relies on proper/valid "PROVISIONING_PROFILE" value:
|
204
|
+
configuration.settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = nil
|
205
|
+
|
206
|
+
#=== Build Settings - Per-configuration
|
207
|
+
|
208
|
+
# NOTE: any configuration-specific settings below will override
|
209
|
+
# common settings that you already applied above inside this
|
210
|
+
# "target.all_configurations.each do |configuration|" block
|
211
|
+
|
212
|
+
if configuration.name == "Debug"
|
213
|
+
|
214
|
+
#=== Config
|
215
|
+
|
216
|
+
configuration.settings["PROVISIONING_PROFILE"] = "f39ljkcf-2be6-49ee-8088-5741718g0969" # dev
|
217
|
+
|
218
|
+
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
219
|
+
|
220
|
+
#=== Config - User Defined Build Settings
|
221
|
+
|
222
|
+
configuration.settings["BRANCH_KEY"] = branchTestKey
|
223
|
+
configuration.settings["FACEBOOK_KEY"] = facebookTestKey
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
#===
|
228
|
+
|
229
|
+
if configuration.name == "Staging"
|
230
|
+
|
231
|
+
#=== Config
|
232
|
+
|
233
|
+
configuration.settings["PROVISIONING_PROFILE"] = "19701b9a-p784-4476-ac01-af327a8deea8" # AdHoc
|
234
|
+
|
235
|
+
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
236
|
+
|
237
|
+
#=== Config - User Defined Build Settings
|
238
|
+
|
239
|
+
configuration.settings["FACEBOOK_KEY"] = facebookTestKey
|
240
|
+
|
241
|
+
end
|
242
|
+
|
243
|
+
#===
|
244
|
+
|
245
|
+
if configuration.name == "RC"
|
246
|
+
|
247
|
+
#=== Config
|
248
|
+
|
249
|
+
configuration.settings["PROVISIONING_PROFILE"] = "19701b9a-p784-4476-ac01-af327a8deea8" # AdHoc
|
250
|
+
|
251
|
+
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
252
|
+
|
253
|
+
#=== Config - User Defined Build Settings
|
254
|
+
|
255
|
+
configuration.settings["FACEBOOK_KEY"] = facebookTestKey
|
256
|
+
|
257
|
+
end
|
258
|
+
|
259
|
+
#===
|
260
|
+
|
261
|
+
if configuration.name == "Production"
|
262
|
+
|
263
|
+
#=== Config
|
264
|
+
|
265
|
+
configuration.settings["PROVISIONING_PROFILE"] = "19701b9a-p784-4476-ac01-af327a8deea8" # AdHoc
|
266
|
+
|
267
|
+
#=== Config - User Defined Build Settings
|
268
|
+
|
269
|
+
configuration.settings["FACEBOOK_KEY"] = facebookProdKey
|
270
|
+
|
271
|
+
end
|
272
|
+
|
273
|
+
#===
|
274
|
+
|
275
|
+
if configuration.name == "AppStore"
|
276
|
+
|
277
|
+
#=== Config
|
278
|
+
|
279
|
+
configuration.settings["PROVISIONING_PROFILE"] = "ba8502ed-6d0b-4aab-07do-61a7ad4dd5cb" # App Store
|
280
|
+
|
281
|
+
#=== Config - User Defined Build Settings
|
282
|
+
|
283
|
+
configuration.settings["FACEBOOK_KEY"] = facebookProdKey
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
288
|
+
|
289
|
+
#=== Extra System Frameworks
|
290
|
+
|
291
|
+
# Here is how we tell Xcake to include Apple system framework
|
292
|
+
# into the target.
|
293
|
+
|
294
|
+
# NOTE: "target.system_frameworks" is an array, that always have at least
|
295
|
+
# "Foundation" and "UIKit", os it's always non-empty and we should not initialize it
|
296
|
+
# before adding something there, so we jsut add values, one at a time (one per each line below).
|
297
|
+
|
298
|
+
target.system_frameworks << "AdSupport"
|
299
|
+
target.system_frameworks << "QuartzCore"
|
300
|
+
|
301
|
+
#=== Source Files
|
302
|
+
|
303
|
+
# Here is how we tell Xcake where to look for source files
|
304
|
+
# which need to be added into the target. Moreover, the folder struture
|
305
|
+
# will be re-created with Xcode groups.
|
306
|
+
|
307
|
+
# NOTE: "target.include_files" is an array, that is empty by default
|
308
|
+
# (no source files will be added to the target). So it's our responsibility
|
309
|
+
# to initialize this array (with "=" operand) before adding values/elements
|
310
|
+
# into it (with "<<" operand). Remember, this file is a Ruby script, and
|
311
|
+
# that's just how Ruby works.
|
312
|
+
|
313
|
+
target.include_files = ["Src/**/*.*"] # initialize array with 1 element
|
314
|
+
target.include_files << "Lib/**/*.*" # add value into already non-empty array
|
315
|
+
|
316
|
+
target.include_files << "Res/**/*.*" # add another value
|
317
|
+
|
318
|
+
#=== Tests
|
319
|
+
|
320
|
+
# Below we define unit tests target for the application target.
|
321
|
+
# "unit_tests_for" is a reserved word, then you put variable that contains reference
|
322
|
+
# to the application target that you want to create unit tests for, it's "target" in our case.
|
323
|
+
# The "test_target" is reference to the newly created unit test target
|
324
|
+
# so we can configure it as we want - set name, build configurations (at least info plist file)
|
325
|
+
# and its source files, or course. The rules of how we work with test target (set its settings)
|
326
|
+
# are the same, as we work with application target.
|
327
|
+
|
328
|
+
unit_tests_for target do |test_target|
|
329
|
+
|
330
|
+
test_target.name = "CakeManiaTests"
|
331
|
+
|
332
|
+
test_target.all_configurations.each do |configuration|
|
333
|
+
|
334
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/CakeManiaTests.plist"
|
335
|
+
|
336
|
+
end
|
337
|
+
|
338
|
+
#=== Source Files
|
339
|
+
|
340
|
+
test_target.include_files = ["Tst/**/*.*"] # we set array with 1 element here!
|
341
|
+
|
342
|
+
end
|
343
|
+
|
344
|
+
#===
|
345
|
+
|
346
|
+
# Below we define UI tests target for the application target.
|
347
|
+
# See https://github.com/jcampbell05/xcake/issues/44
|
348
|
+
|
349
|
+
ui_tests_for target do |test_target|
|
350
|
+
|
351
|
+
test_target.name = "CakeManiaUITests"
|
352
|
+
|
353
|
+
test_target.all_configurations.each do |configuration|
|
354
|
+
|
355
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/CakeManiaUITests.plist"
|
356
|
+
|
357
|
+
end
|
358
|
+
|
359
|
+
#=== Source Files
|
360
|
+
|
361
|
+
test_target.include_files = ["UITst/**/*.*"] # we set array with 1 element here!
|
362
|
+
|
363
|
+
end
|
364
|
+
|
365
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'pathname'
|
1
2
|
require 'xcodeproj'
|
2
3
|
|
3
4
|
module Xcake
|
@@ -16,13 +17,10 @@ module Xcake
|
|
16
17
|
create_object_for_configuration(dsl_object)
|
17
18
|
when Node
|
18
19
|
create_object_for_node(dsl_object)
|
19
|
-
else
|
20
|
-
nil
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
24
23
|
def create_object_for_project(project)
|
25
|
-
# TODO: Make setup of project testable
|
26
24
|
@project = Xcode::Project.new("./#{project.name}.xcodeproj", true)
|
27
25
|
@project.setup_for_xcake
|
28
26
|
@project
|
@@ -41,7 +39,8 @@ module Xcake
|
|
41
39
|
end
|
42
40
|
|
43
41
|
def file_reference_for_path(path)
|
44
|
-
|
42
|
+
pathname = Pathname.new path
|
43
|
+
@project.file_reference_for_path(pathname)
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -1,51 +1,45 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
1
3
|
module Xcake
|
4
|
+
# This generator processes the files to add to the project from the
|
5
|
+
# `include_files` and `exclude_files`
|
6
|
+
#
|
2
7
|
class TargetFileReferenceGenerator < Generator
|
3
|
-
attr_accessor :root_node
|
4
|
-
attr_accessor :dependency_provider
|
5
|
-
|
6
8
|
def initialize(context)
|
7
9
|
@context = context
|
8
|
-
@root_node = Node.new
|
9
|
-
|
10
|
-
@dependency_provider = DependencyProvider.new(FileReferenceInstaller)
|
11
10
|
end
|
12
11
|
|
13
12
|
def self.dependencies
|
14
13
|
[TargetGenerator]
|
15
14
|
end
|
16
15
|
|
17
|
-
def
|
18
|
-
native_target = @context.native_object_for(target)
|
16
|
+
def visit_target(target)
|
19
17
|
|
20
|
-
Dir.glob(target.include_files).
|
21
|
-
|
22
|
-
|
18
|
+
paths_to_include = Dir.glob(target.include_files).map { |f|
|
19
|
+
Pathname.new(f).cleanpath.to_s
|
20
|
+
}
|
21
|
+
paths_to_exclude = Dir.glob(target.exclude_files).map { |f|
|
22
|
+
Pathname.new(f).cleanpath.to_s
|
23
|
+
}
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def visit_project(project)
|
30
|
-
project.targets.each do |target|
|
31
|
-
process_files_for_target(target)
|
25
|
+
paths = paths_to_include - paths_to_exclude
|
26
|
+
paths.each do |p|
|
27
|
+
include_file_for_path_and_target(p, target) if PathClassifier.should_include_path?(p)
|
32
28
|
end
|
33
|
-
|
34
|
-
root_node.accept(self)
|
35
29
|
end
|
36
30
|
|
37
|
-
|
38
|
-
return unless node.path
|
31
|
+
private
|
39
32
|
|
40
|
-
|
33
|
+
def include_file_for_path_and_target(path, target)
|
34
|
+
file_reference = @context.file_reference_for_path(path)
|
35
|
+
native_target = @context.native_object_for(target)
|
41
36
|
|
42
|
-
|
43
|
-
i.can_install_node(node)
|
44
|
-
end
|
37
|
+
build_phase_symbol = PathClassifier.classification_for_path(path)
|
45
38
|
|
46
|
-
|
47
|
-
|
48
|
-
|
39
|
+
if PathClassifier.should_create_build_phase_for_classification?(build_phase_symbol)
|
40
|
+
build_phase_class = Xcodeproj::Project::Object.const_get(build_phase_symbol)
|
41
|
+
build_phase = native_target.build_phase_by_class(build_phase_class)
|
42
|
+
build_phase.add_file_reference(file_reference)
|
49
43
|
end
|
50
44
|
end
|
51
45
|
end
|