xcake 0.7.1 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -3
- data/CHANGELOG.md +15 -0
- data/README.md +3 -1
- data/bin/xcake +0 -1
- data/docs/Cakefile.md +82 -1
- data/docs/Xcode Project Support.md +5 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/project.pbxproj +973 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/project.xcworkspace/xcuserdata/maxim.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcshareddata/xcschemes/CakeMania-AppStore.xcscheme +91 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcshareddata/xcschemes/CakeMania-Debug.xcscheme +91 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcshareddata/xcschemes/CakeMania-Production.xcscheme +91 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcshareddata/xcschemes/CakeMania-RC.xcscheme +91 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcshareddata/xcschemes/CakeMania-Staging.xcscheme +91 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcuserdata/maxim.xcuserdatad/xcschemes/CakeManiaTst.xcscheme +56 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcuserdata/maxim.xcuserdatad/xcschemes/CakeManiaUITst.xcscheme +56 -0
- data/example/app/CakeMania/CakeMania.xcodeproj/xcuserdata/maxim.xcuserdatad/xcschemes/xcschememanagement.plist +72 -0
- data/{docs/Sample → example/app/CakeMania}/Cakefile +80 -47
- data/example/app/CakeMania/Info/CakeMania.plist +38 -0
- data/example/app/CakeMania/Info/CakeManiaTst.plist +22 -0
- data/example/app/CakeMania/Info/CakeManiaUITst.plist +22 -0
- data/example/app/CakeMania/Res/CakeMania-test.entitlements +10 -0
- data/example/app/CakeMania/Res/CakeMania.entitlements +10 -0
- data/example/app/CakeMania/Res/CakeMania.xcassets/AppIcon.appiconset/Contents.json +48 -0
- data/example/app/CakeMania/Src/AppDelegate.swift +46 -0
- data/example/app/CakeMania/Src/Base.lproj/LaunchScreen.storyboard +27 -0
- data/example/app/CakeMania/Src/Base.lproj/Main.storyboard +26 -0
- data/example/app/CakeMania/Src/ObjC/CakeMania-Bridging-Header.h +3 -0
- data/example/app/CakeMania/Src/ObjC/Prefix.pch +14 -0
- data/example/app/CakeMania/Src/ViewController.swift +25 -0
- data/example/app/CakeMania/Tst/Main.swift +36 -0
- data/example/app/CakeMania/UITst/Main.swift +36 -0
- data/example/framework/Cakefile +133 -0
- data/gemfiles/Gemfile.xcodeproj-1.3.x +5 -0
- data/gemfiles/Gemfile.xcodeproj-1.4.x +5 -0
- data/gemfiles/Gemfile.xcodeproj-edge +5 -0
- data/lib/xcake/build_phase/headers_build_phase.rb +47 -0
- data/lib/xcake/build_phase/shell_script_build_phase.rb +24 -0
- data/lib/xcake/build_phase.rb +36 -0
- data/lib/xcake/constants.rb +82 -0
- data/lib/xcake/context/xcodeproj_context.rb +10 -0
- data/lib/xcake/context.rb +24 -0
- data/lib/xcake/generator/scheme_generator.rb +13 -2
- data/lib/xcake/generator/target_build_phase_generator.rb +11 -3
- data/lib/xcake/generator/target_dependency_generator.rb +1 -1
- data/lib/xcake/generator/target_file_reference_generator.rb +4 -5
- data/lib/xcake/generator/target_link_generator.rb +25 -0
- data/lib/xcake/informative.rb +0 -1
- data/lib/xcake/path_classifier.rb +5 -5
- data/lib/xcake/project/sugar.rb +7 -5
- data/lib/xcake/project.rb +0 -1
- data/lib/xcake/target/configurable.rb +2 -6
- data/lib/xcake/target/sugar.rb +28 -3
- data/lib/xcake/target.rb +34 -18
- data/lib/xcake/ui.rb +1 -4
- data/lib/xcake/version.rb +1 -1
- data/lib/xcake/xcode/project.rb +25 -13
- data/lib/xcake/xcode/scheme.rb +3 -0
- data/lib/xcake/xcode/scheme_list.rb +0 -23
- data/lib/xcake/xcodeproj_ext/PBXGroup.rb +3 -3
- data/lib/xcake/xcodeproj_ext/PBXNativeTarget.rb +0 -1
- data/lib/xcake.rb +10 -5
- data/rubocop.yml +0 -4
- data/xcake.gemspec +8 -7
- metadata +112 -80
- data/lib/xcake/generator/target_custom_build_phase_generator.rb +0 -16
- data/lib/xcake/shell_script_build_phase.rb +0 -15
@@ -5,6 +5,35 @@
|
|
5
5
|
|
6
6
|
#===
|
7
7
|
|
8
|
+
# just helper variables to use these values in a consistent way across whole file
|
9
|
+
|
10
|
+
iOSdeploymentTarget = "8.0"
|
11
|
+
currentSwiftVersion = "3.0.1" # to set "Use Legacy Swift ..." to "No"
|
12
|
+
companyIdentifier = "com.CakeMania"
|
13
|
+
developmentTeamId = "XYZXYZ" # for automatic debug signing in Xcode 8
|
14
|
+
testSuffix = "Tst"
|
15
|
+
testSuffixUI = "UI" + testSuffix
|
16
|
+
|
17
|
+
provProfAdHoc = "XXX"
|
18
|
+
provProfAppStore = "YYY"
|
19
|
+
|
20
|
+
#=== 3d-party integration keys (global variables)
|
21
|
+
|
22
|
+
# The values below will be used to set "user-defined" build settings
|
23
|
+
# for build configurations on target level,
|
24
|
+
# so we can reuse the same, lets say, "test" FB key
|
25
|
+
# within several "test" configurations (for example, the same test key
|
26
|
+
# would be used for "Debug" and "Staging" configurations), and can easily
|
27
|
+
# see what is the value/key we use for testing and production,
|
28
|
+
# and even update it in future if needed.
|
29
|
+
|
30
|
+
# "FACEBOOK_KEY"
|
31
|
+
|
32
|
+
facebookProdKey = "888888888888888"
|
33
|
+
facebookTestKey = "999999999999999"
|
34
|
+
|
35
|
+
#===
|
36
|
+
|
8
37
|
# lets define high level project settings
|
9
38
|
|
10
39
|
project.name = "CakeMania"
|
@@ -47,7 +76,7 @@ project.release_configuration :AppStore # for App Store builds, pointing to "www
|
|
47
76
|
# "CakeMania-Production"
|
48
77
|
# "CakeMania-AppStore"
|
49
78
|
|
50
|
-
#===
|
79
|
+
#=== DEFAULT target settings
|
51
80
|
|
52
81
|
# Below we define "project level" build configurations.
|
53
82
|
# REMEMBER this entiire file is just an interpretable script,
|
@@ -91,26 +120,30 @@ project.all_configurations.each do |configuration|
|
|
91
120
|
configuration.settings["CLANG_WARN__DUPLICATE_METHOD_MATCH"] = "YES"
|
92
121
|
configuration.settings["GCC_WARN_UNDECLARED_SELECTOR"] = "YES"
|
93
122
|
configuration.settings["CLANG_WARN_OBJC_ROOT_CLASS"] = "YES_ERROR"
|
94
|
-
configuration.settings["DEFINES_MODULE"] = "YES" # http://stackoverflow.com/a/27251979
|
95
123
|
|
96
124
|
configuration.settings["CURRENT_PROJECT_VERSION"] = "1" # just default non-empty value
|
97
125
|
|
98
|
-
|
126
|
+
configuration.settings["DEFINES_MODULE"] = "YES" # http://stackoverflow.com/a/27251979
|
99
127
|
|
100
|
-
|
128
|
+
configuration.settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
|
101
129
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
# see what is the value/key we use for testing and production,
|
108
|
-
# and even update it in future if needed.
|
130
|
+
configuration.settings["CLANG_WARN_INFINITE_RECURSION"] = "YES" # Xcode 8
|
131
|
+
configuration.settings["CLANG_WARN_SUSPICIOUS_MOVE"] = "YES" # Xcode 8
|
132
|
+
configuration.settings["ENABLE_STRICT_OBJC_MSGSEND"] = "YES" # Xcode 8
|
133
|
+
configuration.settings["GCC_NO_COMMON_BLOCKS"] = "YES"
|
134
|
+
configuration.settings["ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES"] = "$(inherited)" # "YES"
|
109
135
|
|
110
|
-
|
136
|
+
configuration.settings["SWIFT_VERSION"] = currentSwiftVersion
|
111
137
|
|
112
|
-
|
113
|
-
|
138
|
+
#===
|
139
|
+
|
140
|
+
if configuration.name == "RC" || configuration.name == "AppStore"
|
141
|
+
|
142
|
+
configuration.settings["DEBUG_INFORMATION_FORMAT"] = "dwarf-with-dsym"
|
143
|
+
configuration.settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Owholemodule" # Xcode 8
|
144
|
+
|
145
|
+
end
|
146
|
+
end
|
114
147
|
|
115
148
|
#=== Targets
|
116
149
|
|
@@ -124,12 +157,13 @@ facebookTestKey = "999999999999999"
|
|
124
157
|
# put all it's settings (including definition or related unit test targets)
|
125
158
|
# inside "application_for ... do ... end" structure.
|
126
159
|
|
127
|
-
|
128
|
-
|
129
|
-
# first of all, we set target settings
|
160
|
+
target do |target|
|
130
161
|
|
131
|
-
target.name =
|
162
|
+
target.name = project.name
|
132
163
|
target.language = :swift
|
164
|
+
target.type = :application
|
165
|
+
target.platform = :ios
|
166
|
+
target.deployment_target = iOSdeploymentTarget
|
133
167
|
|
134
168
|
#===
|
135
169
|
|
@@ -149,13 +183,9 @@ application_for :ios, 8.0 do |target|
|
|
149
183
|
# - Cakefile
|
150
184
|
# - Info/
|
151
185
|
# | - CakeMania.plist
|
152
|
-
# | -
|
153
|
-
# | -
|
154
|
-
# -
|
155
|
-
# | - ...
|
156
|
-
# | - ObjC/
|
157
|
-
# | - Prefix.pch
|
158
|
-
# | - CakeMania-Bridging-Header.h
|
186
|
+
# | - CakeManiaTst.plist
|
187
|
+
# | - CakeManiaUITst.plist
|
188
|
+
# - Lib/
|
159
189
|
# | - ...
|
160
190
|
# - Res/
|
161
191
|
# | - CakeMania.entitlements
|
@@ -165,10 +195,12 @@ application_for :ios, 8.0 do |target|
|
|
165
195
|
# | - ...
|
166
196
|
# | - AppIcon.appiconset/
|
167
197
|
# | - ...
|
168
|
-
# | - Brand Assets.launchimage/
|
169
|
-
# | - ...
|
170
198
|
# | - ...
|
171
|
-
# -
|
199
|
+
# - Src/
|
200
|
+
# | - ...
|
201
|
+
# | - ObjC/
|
202
|
+
# | - Prefix.pch
|
203
|
+
# | - CakeMania-Bridging-Header.h
|
172
204
|
# | - ...
|
173
205
|
# - Tst/
|
174
206
|
# | - ...
|
@@ -180,17 +212,17 @@ application_for :ios, 8.0 do |target|
|
|
180
212
|
|
181
213
|
#=== Build Settings - Core
|
182
214
|
|
183
|
-
configuration.product_bundle_identifier = "
|
184
|
-
|
185
|
-
configuration.settings["INFOPLIST_FILE"] = "Info/
|
186
|
-
|
215
|
+
configuration.product_bundle_identifier = companyIdentifier + "." + target.name
|
216
|
+
configuration.supported_devices = :universal
|
217
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/" + target.name + ".plist"
|
187
218
|
configuration.settings["PRODUCT_NAME"] = "$(TARGET_NAME)"
|
219
|
+
|
188
220
|
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania.entitlements"
|
189
221
|
configuration.settings["GCC_PREFIX_HEADER"] = "Src/ObjC/Prefix.pch"
|
190
222
|
# configuration.settings["FRAMEWORK_SEARCH_PATHS"] = "$(inherited)"
|
191
223
|
configuration.settings["LIBRARY_SEARCH_PATHS"] = "$(inherited) $(SRCROOT)/Lib/**"
|
192
224
|
configuration.settings["ASSETCATALOG_COMPILER_APPICON_NAME"] = "AppIcon"
|
193
|
-
configuration.settings["ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME"] = "Brand Assets"
|
225
|
+
# configuration.settings["ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME"] = "Brand Assets"
|
194
226
|
configuration.settings["SWIFT_OBJC_BRIDGING_HEADER"] = "Src/ObjC/CakeMania-Bridging-Header.h"
|
195
227
|
configuration.settings["OTHER_LDFLAGS"] = "$(inherited) -ObjC"
|
196
228
|
|
@@ -201,7 +233,11 @@ application_for :ios, 8.0 do |target|
|
|
201
233
|
|
202
234
|
# This will show "Automatic" in Xcode,
|
203
235
|
# relies on proper/valid "PROVISIONING_PROFILE" value:
|
204
|
-
configuration.settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = nil
|
236
|
+
# configuration.settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = nil # DEPRECATED
|
237
|
+
|
238
|
+
# Xcode 8 automati c signing support
|
239
|
+
configuration.settings["CODE_SIGN_IDENTITY[sdk=iphoneos*]"] = "iPhone Developer"
|
240
|
+
configuration.settings["DEVELOPMENT_TEAM"] = developmentTeamId
|
205
241
|
|
206
242
|
#=== Build Settings - Per-configuration
|
207
243
|
|
@@ -213,13 +249,10 @@ application_for :ios, 8.0 do |target|
|
|
213
249
|
|
214
250
|
#=== Config
|
215
251
|
|
216
|
-
configuration.settings["PROVISIONING_PROFILE"] = "f39ljkcf-2be6-49ee-8088-5741718g0969" # dev
|
217
|
-
|
218
252
|
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
219
253
|
|
220
254
|
#=== Config - User Defined Build Settings
|
221
255
|
|
222
|
-
configuration.settings["BRANCH_KEY"] = branchTestKey
|
223
256
|
configuration.settings["FACEBOOK_KEY"] = facebookTestKey
|
224
257
|
|
225
258
|
end
|
@@ -230,7 +263,7 @@ application_for :ios, 8.0 do |target|
|
|
230
263
|
|
231
264
|
#=== Config
|
232
265
|
|
233
|
-
configuration.settings["PROVISIONING_PROFILE"] =
|
266
|
+
configuration.settings["PROVISIONING_PROFILE"] = provProfAdHoc
|
234
267
|
|
235
268
|
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
236
269
|
|
@@ -246,7 +279,7 @@ application_for :ios, 8.0 do |target|
|
|
246
279
|
|
247
280
|
#=== Config
|
248
281
|
|
249
|
-
configuration.settings["PROVISIONING_PROFILE"] =
|
282
|
+
configuration.settings["PROVISIONING_PROFILE"] = provProfAdHoc
|
250
283
|
|
251
284
|
configuration.settings["CODE_SIGN_ENTITLEMENTS"] = "Res/CakeMania-test.entitlements"
|
252
285
|
|
@@ -262,7 +295,7 @@ application_for :ios, 8.0 do |target|
|
|
262
295
|
|
263
296
|
#=== Config
|
264
297
|
|
265
|
-
configuration.settings["PROVISIONING_PROFILE"] =
|
298
|
+
configuration.settings["PROVISIONING_PROFILE"] = provProfAdHoc # AdHoc
|
266
299
|
|
267
300
|
#=== Config - User Defined Build Settings
|
268
301
|
|
@@ -276,7 +309,7 @@ application_for :ios, 8.0 do |target|
|
|
276
309
|
|
277
310
|
#=== Config
|
278
311
|
|
279
|
-
configuration.settings["PROVISIONING_PROFILE"] =
|
312
|
+
configuration.settings["PROVISIONING_PROFILE"] = provProfAppStore
|
280
313
|
|
281
314
|
#=== Config - User Defined Build Settings
|
282
315
|
|
@@ -327,17 +360,17 @@ application_for :ios, 8.0 do |target|
|
|
327
360
|
|
328
361
|
unit_tests_for target do |test_target|
|
329
362
|
|
330
|
-
test_target.name =
|
363
|
+
test_target.name = target.name + testSuffix
|
331
364
|
|
332
365
|
test_target.all_configurations.each do |configuration|
|
333
366
|
|
334
|
-
configuration.settings["INFOPLIST_FILE"] = "Info/
|
367
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/" + test_target.name + ".plist"
|
335
368
|
|
336
369
|
end
|
337
370
|
|
338
371
|
#=== Source Files
|
339
372
|
|
340
|
-
test_target.include_files = ["
|
373
|
+
test_target.include_files = [testSuffix + "/**/*.*"] # we set array with 1 element here!
|
341
374
|
|
342
375
|
end
|
343
376
|
|
@@ -348,17 +381,17 @@ application_for :ios, 8.0 do |target|
|
|
348
381
|
|
349
382
|
ui_tests_for target do |test_target|
|
350
383
|
|
351
|
-
test_target.name =
|
384
|
+
test_target.name = target.name + testSuffixUI
|
352
385
|
|
353
386
|
test_target.all_configurations.each do |configuration|
|
354
387
|
|
355
|
-
configuration.settings["INFOPLIST_FILE"] = "Info/
|
388
|
+
configuration.settings["INFOPLIST_FILE"] = "Info/" + test_target.name + ".plist"
|
356
389
|
|
357
390
|
end
|
358
391
|
|
359
392
|
#=== Source Files
|
360
393
|
|
361
|
-
test_target.include_files = ["
|
394
|
+
test_target.include_files = [testSuffixUI + "/**/*.*"] # we set array with 1 element here!
|
362
395
|
|
363
396
|
end
|
364
397
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
6
|
+
<string>en</string>
|
7
|
+
<key>CFBundleExecutable</key>
|
8
|
+
<string>$(EXECUTABLE_NAME)</string>
|
9
|
+
<key>CFBundleIdentifier</key>
|
10
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
11
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
12
|
+
<string>6.0</string>
|
13
|
+
<key>CFBundleName</key>
|
14
|
+
<string>$(PRODUCT_NAME)</string>
|
15
|
+
<key>CFBundlePackageType</key>
|
16
|
+
<string>APPL</string>
|
17
|
+
<key>CFBundleShortVersionString</key>
|
18
|
+
<string>1.0</string>
|
19
|
+
<key>CFBundleVersion</key>
|
20
|
+
<string>1</string>
|
21
|
+
<key>LSRequiresIPhoneOS</key>
|
22
|
+
<true/>
|
23
|
+
<key>UILaunchStoryboardName</key>
|
24
|
+
<string>LaunchScreen</string>
|
25
|
+
<key>UIMainStoryboardFile</key>
|
26
|
+
<string>Main</string>
|
27
|
+
<key>UIRequiredDeviceCapabilities</key>
|
28
|
+
<array>
|
29
|
+
<string>armv7</string>
|
30
|
+
</array>
|
31
|
+
<key>UISupportedInterfaceOrientations</key>
|
32
|
+
<array>
|
33
|
+
<string>UIInterfaceOrientationPortrait</string>
|
34
|
+
<string>UIInterfaceOrientationLandscapeLeft</string>
|
35
|
+
<string>UIInterfaceOrientationLandscapeRight</string>
|
36
|
+
</array>
|
37
|
+
</dict>
|
38
|
+
</plist>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
6
|
+
<string>en</string>
|
7
|
+
<key>CFBundleExecutable</key>
|
8
|
+
<string>$(EXECUTABLE_NAME)</string>
|
9
|
+
<key>CFBundleIdentifier</key>
|
10
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
11
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
12
|
+
<string>6.0</string>
|
13
|
+
<key>CFBundleName</key>
|
14
|
+
<string>$(PRODUCT_NAME)</string>
|
15
|
+
<key>CFBundlePackageType</key>
|
16
|
+
<string>BNDL</string>
|
17
|
+
<key>CFBundleShortVersionString</key>
|
18
|
+
<string>1.0</string>
|
19
|
+
<key>CFBundleVersion</key>
|
20
|
+
<string>1</string>
|
21
|
+
</dict>
|
22
|
+
</plist>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>CFBundleDevelopmentRegion</key>
|
6
|
+
<string>en</string>
|
7
|
+
<key>CFBundleExecutable</key>
|
8
|
+
<string>$(EXECUTABLE_NAME)</string>
|
9
|
+
<key>CFBundleIdentifier</key>
|
10
|
+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
11
|
+
<key>CFBundleInfoDictionaryVersion</key>
|
12
|
+
<string>6.0</string>
|
13
|
+
<key>CFBundleName</key>
|
14
|
+
<string>$(PRODUCT_NAME)</string>
|
15
|
+
<key>CFBundlePackageType</key>
|
16
|
+
<string>BNDL</string>
|
17
|
+
<key>CFBundleShortVersionString</key>
|
18
|
+
<string>1.0</string>
|
19
|
+
<key>CFBundleVersion</key>
|
20
|
+
<string>1</string>
|
21
|
+
</dict>
|
22
|
+
</plist>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>com.apple.developer.in-app-payments</key>
|
6
|
+
<array>
|
7
|
+
<string>merchant.com.cakemania</string>
|
8
|
+
</array>
|
9
|
+
</dict>
|
10
|
+
</plist>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>com.apple.developer.in-app-payments</key>
|
6
|
+
<array>
|
7
|
+
<string>merchant.com.cakemania</string>
|
8
|
+
</array>
|
9
|
+
</dict>
|
10
|
+
</plist>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
{
|
2
|
+
"images" : [
|
3
|
+
{
|
4
|
+
"idiom" : "iphone",
|
5
|
+
"size" : "20x20",
|
6
|
+
"scale" : "2x"
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"idiom" : "iphone",
|
10
|
+
"size" : "20x20",
|
11
|
+
"scale" : "3x"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"idiom" : "iphone",
|
15
|
+
"size" : "29x29",
|
16
|
+
"scale" : "2x"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"idiom" : "iphone",
|
20
|
+
"size" : "29x29",
|
21
|
+
"scale" : "3x"
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"idiom" : "iphone",
|
25
|
+
"size" : "40x40",
|
26
|
+
"scale" : "2x"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"idiom" : "iphone",
|
30
|
+
"size" : "40x40",
|
31
|
+
"scale" : "3x"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"idiom" : "iphone",
|
35
|
+
"size" : "60x60",
|
36
|
+
"scale" : "2x"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"idiom" : "iphone",
|
40
|
+
"size" : "60x60",
|
41
|
+
"scale" : "3x"
|
42
|
+
}
|
43
|
+
],
|
44
|
+
"info" : {
|
45
|
+
"version" : 1,
|
46
|
+
"author" : "xcode"
|
47
|
+
}
|
48
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
//
|
2
|
+
// AppDelegate.swift
|
3
|
+
// CakeMania
|
4
|
+
//
|
5
|
+
// Created by Maxim Khatskevich on 11/25/16.
|
6
|
+
// Copyright © 2016 CakeMania Inc. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import UIKit
|
10
|
+
|
11
|
+
@UIApplicationMain
|
12
|
+
class AppDelegate: UIResponder, UIApplicationDelegate {
|
13
|
+
|
14
|
+
var window: UIWindow?
|
15
|
+
|
16
|
+
|
17
|
+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
|
18
|
+
// Override point for customization after application launch.
|
19
|
+
return true
|
20
|
+
}
|
21
|
+
|
22
|
+
func applicationWillResignActive(_ application: UIApplication) {
|
23
|
+
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
|
24
|
+
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
|
25
|
+
}
|
26
|
+
|
27
|
+
func applicationDidEnterBackground(_ application: UIApplication) {
|
28
|
+
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
|
29
|
+
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
|
30
|
+
}
|
31
|
+
|
32
|
+
func applicationWillEnterForeground(_ application: UIApplication) {
|
33
|
+
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
|
34
|
+
}
|
35
|
+
|
36
|
+
func applicationDidBecomeActive(_ application: UIApplication) {
|
37
|
+
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
|
38
|
+
}
|
39
|
+
|
40
|
+
func applicationWillTerminate(_ application: UIApplication) {
|
41
|
+
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
}
|
46
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
3
|
+
<dependencies>
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
|
5
|
+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
6
|
+
</dependencies>
|
7
|
+
<scenes>
|
8
|
+
<!--View Controller-->
|
9
|
+
<scene sceneID="EHf-IW-A2E">
|
10
|
+
<objects>
|
11
|
+
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
12
|
+
<layoutGuides>
|
13
|
+
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
|
14
|
+
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
|
15
|
+
</layoutGuides>
|
16
|
+
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
17
|
+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
18
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
19
|
+
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
20
|
+
</view>
|
21
|
+
</viewController>
|
22
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
23
|
+
</objects>
|
24
|
+
<point key="canvasLocation" x="53" y="375"/>
|
25
|
+
</scene>
|
26
|
+
</scenes>
|
27
|
+
</document>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
3
|
+
<dependencies>
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
|
5
|
+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
6
|
+
</dependencies>
|
7
|
+
<scenes>
|
8
|
+
<!--View Controller-->
|
9
|
+
<scene sceneID="tne-QT-ifu">
|
10
|
+
<objects>
|
11
|
+
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
12
|
+
<layoutGuides>
|
13
|
+
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
14
|
+
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
15
|
+
</layoutGuides>
|
16
|
+
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
17
|
+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
18
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
19
|
+
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
20
|
+
</view>
|
21
|
+
</viewController>
|
22
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
23
|
+
</objects>
|
24
|
+
</scene>
|
25
|
+
</scenes>
|
26
|
+
</document>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
#import <Availability.h>
|
2
|
+
|
3
|
+
#ifndef __IPHONE_4_0
|
4
|
+
#warning "This project uses features only available in iOS SDK 4.0 and later."
|
5
|
+
#endif
|
6
|
+
|
7
|
+
#ifdef __OBJC__
|
8
|
+
|
9
|
+
@import Foundation;
|
10
|
+
@import UIKit;
|
11
|
+
|
12
|
+
#import "CakeMania-Swift.h" // http://stackoverflow.com/a/27251979
|
13
|
+
|
14
|
+
#endif
|
@@ -0,0 +1,25 @@
|
|
1
|
+
//
|
2
|
+
// ViewController.swift
|
3
|
+
// CakeMania
|
4
|
+
//
|
5
|
+
// Created by Maxim Khatskevich on 11/25/16.
|
6
|
+
// Copyright © 2016 CakeMania Inc. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import UIKit
|
10
|
+
|
11
|
+
class ViewController: UIViewController {
|
12
|
+
|
13
|
+
override func viewDidLoad() {
|
14
|
+
super.viewDidLoad()
|
15
|
+
// Do any additional setup after loading the view, typically from a nib.
|
16
|
+
}
|
17
|
+
|
18
|
+
override func didReceiveMemoryWarning() {
|
19
|
+
super.didReceiveMemoryWarning()
|
20
|
+
// Dispose of any resources that can be recreated.
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
}
|
25
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//
|
2
|
+
// CakeManiaTests.swift
|
3
|
+
// CakeManiaTests
|
4
|
+
//
|
5
|
+
// Created by Maxim Khatskevich on 11/25/16.
|
6
|
+
// Copyright © 2016 CakeMania Inc. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import XCTest
|
10
|
+
@testable import CakeMania
|
11
|
+
|
12
|
+
class CakeManiaTests: XCTestCase {
|
13
|
+
|
14
|
+
override func setUp() {
|
15
|
+
super.setUp()
|
16
|
+
// Put setup code here. This method is called before the invocation of each test method in the class.
|
17
|
+
}
|
18
|
+
|
19
|
+
override func tearDown() {
|
20
|
+
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
21
|
+
super.tearDown()
|
22
|
+
}
|
23
|
+
|
24
|
+
func testExample() {
|
25
|
+
// This is an example of a functional test case.
|
26
|
+
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
27
|
+
}
|
28
|
+
|
29
|
+
func testPerformanceExample() {
|
30
|
+
// This is an example of a performance test case.
|
31
|
+
self.measure {
|
32
|
+
// Put the code you want to measure the time of here.
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//
|
2
|
+
// CakeManiaUITests.swift
|
3
|
+
// CakeManiaUITests
|
4
|
+
//
|
5
|
+
// Created by Maxim Khatskevich on 11/25/16.
|
6
|
+
// Copyright © 2016 CakeMania Inc. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import XCTest
|
10
|
+
|
11
|
+
class CakeManiaUITests: XCTestCase {
|
12
|
+
|
13
|
+
override func setUp() {
|
14
|
+
super.setUp()
|
15
|
+
|
16
|
+
// Put setup code here. This method is called before the invocation of each test method in the class.
|
17
|
+
|
18
|
+
// In UI tests it is usually best to stop immediately when a failure occurs.
|
19
|
+
continueAfterFailure = false
|
20
|
+
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
|
21
|
+
XCUIApplication().launch()
|
22
|
+
|
23
|
+
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
|
24
|
+
}
|
25
|
+
|
26
|
+
override func tearDown() {
|
27
|
+
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
28
|
+
super.tearDown()
|
29
|
+
}
|
30
|
+
|
31
|
+
func testExample() {
|
32
|
+
// Use recording to get started writing UI tests.
|
33
|
+
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|