Skip to content

Commit d8b8648

Browse files
committed
Add BlastOff project
- an example of using variable width strings in a localizable strings dictionary
1 parent 63114f8 commit d8b8648

File tree

10 files changed

+726
-0
lines changed

10 files changed

+726
-0
lines changed
+349
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 50;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
53E5DCE32184979D001EE0D8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E5DCE22184979D001EE0D8 /* AppDelegate.swift */; };
11+
53E5DCE82184979D001EE0D8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53E5DCE62184979D001EE0D8 /* Main.storyboard */; };
12+
53E5DCEA2184979E001EE0D8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53E5DCE92184979E001EE0D8 /* Assets.xcassets */; };
13+
53E5DCED2184979E001EE0D8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53E5DCEB2184979E001EE0D8 /* LaunchScreen.storyboard */; };
14+
53E5DCFE2184A8EF001EE0D8 /* LaunchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E5DCFD2184A8EF001EE0D8 /* LaunchController.swift */; };
15+
53E5DCFF2184A938001EE0D8 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 53E5DCF42184A728001EE0D8 /* Localizable.stringsdict */; };
16+
/* End PBXBuildFile section */
17+
18+
/* Begin PBXFileReference section */
19+
53B0B511218750E800BBD609 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
20+
53E5DCDF2184979D001EE0D8 /* BlastOff.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BlastOff.app; sourceTree = BUILT_PRODUCTS_DIR; };
21+
53E5DCE22184979D001EE0D8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
22+
53E5DCE72184979D001EE0D8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
23+
53E5DCE92184979E001EE0D8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
24+
53E5DCEC2184979E001EE0D8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
25+
53E5DCEE2184979E001EE0D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
26+
53E5DCF42184A728001EE0D8 /* Localizable.stringsdict */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; path = Localizable.stringsdict; sourceTree = "<group>"; };
27+
53E5DCFD2184A8EF001EE0D8 /* LaunchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchController.swift; sourceTree = "<group>"; };
28+
/* End PBXFileReference section */
29+
30+
/* Begin PBXFrameworksBuildPhase section */
31+
53E5DCDC2184979D001EE0D8 /* Frameworks */ = {
32+
isa = PBXFrameworksBuildPhase;
33+
buildActionMask = 2147483647;
34+
files = (
35+
);
36+
runOnlyForDeploymentPostprocessing = 0;
37+
};
38+
/* End PBXFrameworksBuildPhase section */
39+
40+
/* Begin PBXGroup section */
41+
53E5DCD62184979D001EE0D8 = {
42+
isa = PBXGroup;
43+
children = (
44+
53B0B511218750E800BBD609 /* README.md */,
45+
53E5DCE12184979D001EE0D8 /* BlastOff */,
46+
53E5DCE02184979D001EE0D8 /* Products */,
47+
);
48+
sourceTree = "<group>";
49+
};
50+
53E5DCE02184979D001EE0D8 /* Products */ = {
51+
isa = PBXGroup;
52+
children = (
53+
53E5DCDF2184979D001EE0D8 /* BlastOff.app */,
54+
);
55+
name = Products;
56+
sourceTree = "<group>";
57+
};
58+
53E5DCE12184979D001EE0D8 /* BlastOff */ = {
59+
isa = PBXGroup;
60+
children = (
61+
53E5DCE22184979D001EE0D8 /* AppDelegate.swift */,
62+
53E5DCFD2184A8EF001EE0D8 /* LaunchController.swift */,
63+
53E5DCF42184A728001EE0D8 /* Localizable.stringsdict */,
64+
53E5DCE62184979D001EE0D8 /* Main.storyboard */,
65+
53E5DCE92184979E001EE0D8 /* Assets.xcassets */,
66+
53E5DCEB2184979E001EE0D8 /* LaunchScreen.storyboard */,
67+
53E5DCEE2184979E001EE0D8 /* Info.plist */,
68+
);
69+
path = BlastOff;
70+
sourceTree = "<group>";
71+
};
72+
/* End PBXGroup section */
73+
74+
/* Begin PBXNativeTarget section */
75+
53E5DCDE2184979D001EE0D8 /* BlastOff */ = {
76+
isa = PBXNativeTarget;
77+
buildConfigurationList = 53E5DCF12184979E001EE0D8 /* Build configuration list for PBXNativeTarget "BlastOff" */;
78+
buildPhases = (
79+
53E5DCDB2184979D001EE0D8 /* Sources */,
80+
53E5DCDC2184979D001EE0D8 /* Frameworks */,
81+
53E5DCDD2184979D001EE0D8 /* Resources */,
82+
);
83+
buildRules = (
84+
);
85+
dependencies = (
86+
);
87+
name = BlastOff;
88+
productName = BlastOff;
89+
productReference = 53E5DCDF2184979D001EE0D8 /* BlastOff.app */;
90+
productType = "com.apple.product-type.application";
91+
};
92+
/* End PBXNativeTarget section */
93+
94+
/* Begin PBXProject section */
95+
53E5DCD72184979D001EE0D8 /* Project object */ = {
96+
isa = PBXProject;
97+
attributes = {
98+
LastSwiftUpdateCheck = 1000;
99+
LastUpgradeCheck = 1000;
100+
ORGANIZATIONNAME = "Keith Harrison";
101+
TargetAttributes = {
102+
53E5DCDE2184979D001EE0D8 = {
103+
CreatedOnToolsVersion = 10.0;
104+
};
105+
};
106+
};
107+
buildConfigurationList = 53E5DCDA2184979D001EE0D8 /* Build configuration list for PBXProject "BlastOff" */;
108+
compatibilityVersion = "Xcode 9.3";
109+
developmentRegion = en;
110+
hasScannedForEncodings = 0;
111+
knownRegions = (
112+
en,
113+
Base,
114+
);
115+
mainGroup = 53E5DCD62184979D001EE0D8;
116+
productRefGroup = 53E5DCE02184979D001EE0D8 /* Products */;
117+
projectDirPath = "";
118+
projectRoot = "";
119+
targets = (
120+
53E5DCDE2184979D001EE0D8 /* BlastOff */,
121+
);
122+
};
123+
/* End PBXProject section */
124+
125+
/* Begin PBXResourcesBuildPhase section */
126+
53E5DCDD2184979D001EE0D8 /* Resources */ = {
127+
isa = PBXResourcesBuildPhase;
128+
buildActionMask = 2147483647;
129+
files = (
130+
53E5DCED2184979E001EE0D8 /* LaunchScreen.storyboard in Resources */,
131+
53E5DCFF2184A938001EE0D8 /* Localizable.stringsdict in Resources */,
132+
53E5DCEA2184979E001EE0D8 /* Assets.xcassets in Resources */,
133+
53E5DCE82184979D001EE0D8 /* Main.storyboard in Resources */,
134+
);
135+
runOnlyForDeploymentPostprocessing = 0;
136+
};
137+
/* End PBXResourcesBuildPhase section */
138+
139+
/* Begin PBXSourcesBuildPhase section */
140+
53E5DCDB2184979D001EE0D8 /* Sources */ = {
141+
isa = PBXSourcesBuildPhase;
142+
buildActionMask = 2147483647;
143+
files = (
144+
53E5DCFE2184A8EF001EE0D8 /* LaunchController.swift in Sources */,
145+
53E5DCE32184979D001EE0D8 /* AppDelegate.swift in Sources */,
146+
);
147+
runOnlyForDeploymentPostprocessing = 0;
148+
};
149+
/* End PBXSourcesBuildPhase section */
150+
151+
/* Begin PBXVariantGroup section */
152+
53E5DCE62184979D001EE0D8 /* Main.storyboard */ = {
153+
isa = PBXVariantGroup;
154+
children = (
155+
53E5DCE72184979D001EE0D8 /* Base */,
156+
);
157+
name = Main.storyboard;
158+
sourceTree = "<group>";
159+
};
160+
53E5DCEB2184979E001EE0D8 /* LaunchScreen.storyboard */ = {
161+
isa = PBXVariantGroup;
162+
children = (
163+
53E5DCEC2184979E001EE0D8 /* Base */,
164+
);
165+
name = LaunchScreen.storyboard;
166+
sourceTree = "<group>";
167+
};
168+
/* End PBXVariantGroup section */
169+
170+
/* Begin XCBuildConfiguration section */
171+
53E5DCEF2184979E001EE0D8 /* Debug */ = {
172+
isa = XCBuildConfiguration;
173+
buildSettings = {
174+
ALWAYS_SEARCH_USER_PATHS = NO;
175+
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
176+
CLANG_ANALYZER_NONNULL = YES;
177+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
178+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
179+
CLANG_CXX_LIBRARY = "libc++";
180+
CLANG_ENABLE_MODULES = YES;
181+
CLANG_ENABLE_OBJC_ARC = YES;
182+
CLANG_ENABLE_OBJC_WEAK = YES;
183+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
184+
CLANG_WARN_BOOL_CONVERSION = YES;
185+
CLANG_WARN_COMMA = YES;
186+
CLANG_WARN_CONSTANT_CONVERSION = YES;
187+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
188+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
189+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
190+
CLANG_WARN_EMPTY_BODY = YES;
191+
CLANG_WARN_ENUM_CONVERSION = YES;
192+
CLANG_WARN_INFINITE_RECURSION = YES;
193+
CLANG_WARN_INT_CONVERSION = YES;
194+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
195+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
196+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
197+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
198+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
199+
CLANG_WARN_STRICT_PROTOTYPES = YES;
200+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
201+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
202+
CLANG_WARN_UNREACHABLE_CODE = YES;
203+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
204+
CODE_SIGN_IDENTITY = "iPhone Developer";
205+
COPY_PHASE_STRIP = NO;
206+
DEBUG_INFORMATION_FORMAT = dwarf;
207+
ENABLE_STRICT_OBJC_MSGSEND = YES;
208+
ENABLE_TESTABILITY = YES;
209+
GCC_C_LANGUAGE_STANDARD = gnu11;
210+
GCC_DYNAMIC_NO_PIC = NO;
211+
GCC_NO_COMMON_BLOCKS = YES;
212+
GCC_OPTIMIZATION_LEVEL = 0;
213+
GCC_PREPROCESSOR_DEFINITIONS = (
214+
"DEBUG=1",
215+
"$(inherited)",
216+
);
217+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
218+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
219+
GCC_WARN_UNDECLARED_SELECTOR = YES;
220+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
221+
GCC_WARN_UNUSED_FUNCTION = YES;
222+
GCC_WARN_UNUSED_VARIABLE = YES;
223+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
224+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
225+
MTL_FAST_MATH = YES;
226+
ONLY_ACTIVE_ARCH = YES;
227+
SDKROOT = iphoneos;
228+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
229+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
230+
};
231+
name = Debug;
232+
};
233+
53E5DCF02184979E001EE0D8 /* Release */ = {
234+
isa = XCBuildConfiguration;
235+
buildSettings = {
236+
ALWAYS_SEARCH_USER_PATHS = NO;
237+
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
238+
CLANG_ANALYZER_NONNULL = YES;
239+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
240+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
241+
CLANG_CXX_LIBRARY = "libc++";
242+
CLANG_ENABLE_MODULES = YES;
243+
CLANG_ENABLE_OBJC_ARC = YES;
244+
CLANG_ENABLE_OBJC_WEAK = YES;
245+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
246+
CLANG_WARN_BOOL_CONVERSION = YES;
247+
CLANG_WARN_COMMA = YES;
248+
CLANG_WARN_CONSTANT_CONVERSION = YES;
249+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
250+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
251+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
252+
CLANG_WARN_EMPTY_BODY = YES;
253+
CLANG_WARN_ENUM_CONVERSION = YES;
254+
CLANG_WARN_INFINITE_RECURSION = YES;
255+
CLANG_WARN_INT_CONVERSION = YES;
256+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
257+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
258+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
259+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
260+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
261+
CLANG_WARN_STRICT_PROTOTYPES = YES;
262+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
263+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
264+
CLANG_WARN_UNREACHABLE_CODE = YES;
265+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
266+
CODE_SIGN_IDENTITY = "iPhone Developer";
267+
COPY_PHASE_STRIP = NO;
268+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
269+
ENABLE_NS_ASSERTIONS = NO;
270+
ENABLE_STRICT_OBJC_MSGSEND = YES;
271+
GCC_C_LANGUAGE_STANDARD = gnu11;
272+
GCC_NO_COMMON_BLOCKS = YES;
273+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
274+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
275+
GCC_WARN_UNDECLARED_SELECTOR = YES;
276+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
277+
GCC_WARN_UNUSED_FUNCTION = YES;
278+
GCC_WARN_UNUSED_VARIABLE = YES;
279+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
280+
MTL_ENABLE_DEBUG_INFO = NO;
281+
MTL_FAST_MATH = YES;
282+
SDKROOT = iphoneos;
283+
SWIFT_COMPILATION_MODE = wholemodule;
284+
SWIFT_OPTIMIZATION_LEVEL = "-O";
285+
VALIDATE_PRODUCT = YES;
286+
};
287+
name = Release;
288+
};
289+
53E5DCF22184979E001EE0D8 /* Debug */ = {
290+
isa = XCBuildConfiguration;
291+
buildSettings = {
292+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
293+
CODE_SIGN_STYLE = Automatic;
294+
DEVELOPMENT_TEAM = LCC2J94N44;
295+
INFOPLIST_FILE = BlastOff/Info.plist;
296+
LD_RUNPATH_SEARCH_PATHS = (
297+
"$(inherited)",
298+
"@executable_path/Frameworks",
299+
);
300+
PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.BlastOff;
301+
PRODUCT_NAME = "$(TARGET_NAME)";
302+
SWIFT_VERSION = 4.2;
303+
TARGETED_DEVICE_FAMILY = "1,2";
304+
};
305+
name = Debug;
306+
};
307+
53E5DCF32184979E001EE0D8 /* Release */ = {
308+
isa = XCBuildConfiguration;
309+
buildSettings = {
310+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
311+
CODE_SIGN_STYLE = Automatic;
312+
DEVELOPMENT_TEAM = LCC2J94N44;
313+
INFOPLIST_FILE = BlastOff/Info.plist;
314+
LD_RUNPATH_SEARCH_PATHS = (
315+
"$(inherited)",
316+
"@executable_path/Frameworks",
317+
);
318+
PRODUCT_BUNDLE_IDENTIFIER = com.useyourloaf.BlastOff;
319+
PRODUCT_NAME = "$(TARGET_NAME)";
320+
SWIFT_VERSION = 4.2;
321+
TARGETED_DEVICE_FAMILY = "1,2";
322+
};
323+
name = Release;
324+
};
325+
/* End XCBuildConfiguration section */
326+
327+
/* Begin XCConfigurationList section */
328+
53E5DCDA2184979D001EE0D8 /* Build configuration list for PBXProject "BlastOff" */ = {
329+
isa = XCConfigurationList;
330+
buildConfigurations = (
331+
53E5DCEF2184979E001EE0D8 /* Debug */,
332+
53E5DCF02184979E001EE0D8 /* Release */,
333+
);
334+
defaultConfigurationIsVisible = 0;
335+
defaultConfigurationName = Release;
336+
};
337+
53E5DCF12184979E001EE0D8 /* Build configuration list for PBXNativeTarget "BlastOff" */ = {
338+
isa = XCConfigurationList;
339+
buildConfigurations = (
340+
53E5DCF22184979E001EE0D8 /* Debug */,
341+
53E5DCF32184979E001EE0D8 /* Release */,
342+
);
343+
defaultConfigurationIsVisible = 0;
344+
defaultConfigurationName = Release;
345+
};
346+
/* End XCConfigurationList section */
347+
};
348+
rootObject = 53E5DCD72184979D001EE0D8 /* Project object */;
349+
}

BlastOff/BlastOff/AppDelegate.swift

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright © 2018 Keith Harrison. All rights reserved.
2+
//
3+
// Redistribution and use in source and binary forms, with or without
4+
// modification, are permitted provided that the following conditions are met:
5+
//
6+
// 1. Redistributions of source code must retain the above copyright
7+
// notice, this list of conditions and the following disclaimer.
8+
//
9+
// 2. Redistributions in binary form must reproduce the above copyright
10+
// notice, this list of conditions and the following disclaimer in the
11+
// documentation and/or other materials provided with the distribution.
12+
//
13+
// 3. Neither the name of the copyright holder nor the names of its
14+
// contributors may be used to endorse or promote products derived from
15+
// this software without specific prior written permission.
16+
//
17+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27+
// POSSIBILITY OF SUCH DAMAGE.
28+
29+
import UIKit
30+
31+
@UIApplicationMain
32+
class AppDelegate: UIResponder, UIApplicationDelegate {
33+
34+
var window: UIWindow?
35+
}

0 commit comments

Comments
 (0)