xcake 0.6.25 → 0.7.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 +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
|