├── .gitignore
├── .swift-format
├── .swift-lint.yml
├── Mintfile
├── README.md
├── bank.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── andrew.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── xcuserdata
│ └── andrew.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── bank
├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
├── ContentView.swift
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
└── bankApp.swift
├── bankTests
└── bankTests.swift
└── bankUITests
├── bankUITests.swift
└── bankUITestsLaunchTests.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | node_modules/
3 | .expo/
4 | dist/
5 | npm-debug.*
6 | *.jks
7 | *.p8
8 | *.p12
9 | *.key
10 | *.mobileprovision
11 | *.orig.*
12 | web-build/
13 |
14 | # macOS
15 | .DS_Store
16 |
17 | ### VisualStudioCode ###
18 | .vscode/* # Maybe .vscode/**/* instead - see comments
19 | !.vscode/settings.json
20 | !.vscode/tasks.json
21 | !.vscode/launch.json
22 | !.vscode/extensions.json
23 |
24 | .env
--------------------------------------------------------------------------------
/.swift-format:
--------------------------------------------------------------------------------
1 | # indentation
2 | indent = spaces
3 | indent_size = 4
4 |
5 | # line breaks
6 | line_break = lf
7 |
8 | # wrapping
9 | wrap_line_length = 80
10 |
11 | # semicolons
12 | semicolons = never
13 |
14 | # attributes
15 | attributes_indent_size = 0
16 |
17 | # operators
18 | operator_spacing = ignore
19 |
20 | # quotes
21 | quotes = double
22 |
23 | # whitespace
24 | trim_whitespace = true
25 | insert_final_newline = false
26 |
27 |
--------------------------------------------------------------------------------
/.swift-lint.yml:
--------------------------------------------------------------------------------
1 | enabled_rules:
2 | - trailing_semicolon
3 | - vertical_whitespace
4 | - no_trailing_whitespace
5 | - trailing_newline
6 |
7 | excluded:
8 | - Pods
--------------------------------------------------------------------------------
/Mintfile:
--------------------------------------------------------------------------------
1 | apple/swift-format@release/5.7
2 | realm/SwiftLint
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # 💸 HCB App
4 | [](https://github.com/anddddrew/hcbapp/actions/workflows/ios.yml)
5 | [](https://github.com/hackclub/hcbapp/actions/workflows/format.yml)
6 |
7 |
8 | This is [HCB](https://hackclub.com/hcb) but a mobile version of it. This allows people to easily use & manage HCB on the go.
9 |
10 | ## 🚀 Getting started
11 | 1. Download yarn: https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable
12 | 2. Clone the repository: `git clone https://github.com/hackclub/hcbapp.git`
13 | 3. Install depenedncies: `yarn i`
14 | 4. Run: `yarn run dev:tailwind`
15 | 5. Run: `yarn start` (**In a seperate terminal session**)
16 |
17 | ## 👥 Contributing
18 |
19 | Contributions are much appreciated!
20 |
21 | - The designs are on [Figma](https://www.figma.com/team_invite/redeem/QiB0pt21NRldORTSH9TCCV)
22 | - Look into our [GitHub Issues](https://github.com/hackclub/hcbapp/issues) for any potential tasks to pickup
23 |
24 | If you would like to contribute, please refer to the [CONTRIBUTING.md](./CONTRIBUTING.md) file first.
25 |
26 | ## ❓Help
27 |
28 | If you have any issues, or questions regarding the app. Feel free to join the `#hcbapp-dev` channel on the Hack Club [Slack](https://slack.hackclub.com).
29 |
--------------------------------------------------------------------------------
/bank.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 49FB7FCC2967982A003A5A04 /* bankApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7FCB2967982A003A5A04 /* bankApp.swift */; };
11 | 49FB7FCE2967982A003A5A04 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7FCD2967982A003A5A04 /* ContentView.swift */; };
12 | 49FB7FD02967982B003A5A04 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 49FB7FCF2967982B003A5A04 /* Assets.xcassets */; };
13 | 49FB7FD32967982B003A5A04 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 49FB7FD22967982B003A5A04 /* Preview Assets.xcassets */; };
14 | 49FB7FDD2967982B003A5A04 /* bankTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7FDC2967982B003A5A04 /* bankTests.swift */; };
15 | 49FB7FE72967982B003A5A04 /* bankUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7FE62967982B003A5A04 /* bankUITests.swift */; };
16 | 49FB7FE92967982B003A5A04 /* bankUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7FE82967982B003A5A04 /* bankUITestsLaunchTests.swift */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXContainerItemProxy section */
20 | 49FB7FD92967982B003A5A04 /* PBXContainerItemProxy */ = {
21 | isa = PBXContainerItemProxy;
22 | containerPortal = 49FB7FC02967982A003A5A04 /* Project object */;
23 | proxyType = 1;
24 | remoteGlobalIDString = 49FB7FC72967982A003A5A04;
25 | remoteInfo = bank;
26 | };
27 | 49FB7FE32967982B003A5A04 /* PBXContainerItemProxy */ = {
28 | isa = PBXContainerItemProxy;
29 | containerPortal = 49FB7FC02967982A003A5A04 /* Project object */;
30 | proxyType = 1;
31 | remoteGlobalIDString = 49FB7FC72967982A003A5A04;
32 | remoteInfo = bank;
33 | };
34 | /* End PBXContainerItemProxy section */
35 |
36 | /* Begin PBXFileReference section */
37 | 49FB7FC82967982A003A5A04 /* bank.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bank.app; sourceTree = BUILT_PRODUCTS_DIR; };
38 | 49FB7FCB2967982A003A5A04 /* bankApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bankApp.swift; sourceTree = ""; };
39 | 49FB7FCD2967982A003A5A04 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
40 | 49FB7FCF2967982B003A5A04 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
41 | 49FB7FD22967982B003A5A04 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
42 | 49FB7FD82967982B003A5A04 /* bankTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = bankTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
43 | 49FB7FDC2967982B003A5A04 /* bankTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bankTests.swift; sourceTree = ""; };
44 | 49FB7FE22967982B003A5A04 /* bankUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = bankUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 49FB7FE62967982B003A5A04 /* bankUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bankUITests.swift; sourceTree = ""; };
46 | 49FB7FE82967982B003A5A04 /* bankUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bankUITestsLaunchTests.swift; sourceTree = ""; };
47 | /* End PBXFileReference section */
48 |
49 | /* Begin PBXFrameworksBuildPhase section */
50 | 49FB7FC52967982A003A5A04 /* Frameworks */ = {
51 | isa = PBXFrameworksBuildPhase;
52 | buildActionMask = 2147483647;
53 | files = (
54 | );
55 | runOnlyForDeploymentPostprocessing = 0;
56 | };
57 | 49FB7FD52967982B003A5A04 /* Frameworks */ = {
58 | isa = PBXFrameworksBuildPhase;
59 | buildActionMask = 2147483647;
60 | files = (
61 | );
62 | runOnlyForDeploymentPostprocessing = 0;
63 | };
64 | 49FB7FDF2967982B003A5A04 /* Frameworks */ = {
65 | isa = PBXFrameworksBuildPhase;
66 | buildActionMask = 2147483647;
67 | files = (
68 | );
69 | runOnlyForDeploymentPostprocessing = 0;
70 | };
71 | /* End PBXFrameworksBuildPhase section */
72 |
73 | /* Begin PBXGroup section */
74 | 49FB7FBF2967982A003A5A04 = {
75 | isa = PBXGroup;
76 | children = (
77 | 49FB7FCA2967982A003A5A04 /* bank */,
78 | 49FB7FDB2967982B003A5A04 /* bankTests */,
79 | 49FB7FE52967982B003A5A04 /* bankUITests */,
80 | 49FB7FC92967982A003A5A04 /* Products */,
81 | );
82 | sourceTree = "";
83 | };
84 | 49FB7FC92967982A003A5A04 /* Products */ = {
85 | isa = PBXGroup;
86 | children = (
87 | 49FB7FC82967982A003A5A04 /* bank.app */,
88 | 49FB7FD82967982B003A5A04 /* bankTests.xctest */,
89 | 49FB7FE22967982B003A5A04 /* bankUITests.xctest */,
90 | );
91 | name = Products;
92 | sourceTree = "";
93 | };
94 | 49FB7FCA2967982A003A5A04 /* bank */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 49FB7FCB2967982A003A5A04 /* bankApp.swift */,
98 | 49FB7FCD2967982A003A5A04 /* ContentView.swift */,
99 | 49FB7FCF2967982B003A5A04 /* Assets.xcassets */,
100 | 49FB7FD12967982B003A5A04 /* Preview Content */,
101 | );
102 | path = bank;
103 | sourceTree = "";
104 | };
105 | 49FB7FD12967982B003A5A04 /* Preview Content */ = {
106 | isa = PBXGroup;
107 | children = (
108 | 49FB7FD22967982B003A5A04 /* Preview Assets.xcassets */,
109 | );
110 | path = "Preview Content";
111 | sourceTree = "";
112 | };
113 | 49FB7FDB2967982B003A5A04 /* bankTests */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 49FB7FDC2967982B003A5A04 /* bankTests.swift */,
117 | );
118 | path = bankTests;
119 | sourceTree = "";
120 | };
121 | 49FB7FE52967982B003A5A04 /* bankUITests */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 49FB7FE62967982B003A5A04 /* bankUITests.swift */,
125 | 49FB7FE82967982B003A5A04 /* bankUITestsLaunchTests.swift */,
126 | );
127 | path = bankUITests;
128 | sourceTree = "";
129 | };
130 | /* End PBXGroup section */
131 |
132 | /* Begin PBXNativeTarget section */
133 | 49FB7FC72967982A003A5A04 /* bank */ = {
134 | isa = PBXNativeTarget;
135 | buildConfigurationList = 49FB7FEC2967982B003A5A04 /* Build configuration list for PBXNativeTarget "bank" */;
136 | buildPhases = (
137 | 49FB7FC42967982A003A5A04 /* Sources */,
138 | 49FB7FC52967982A003A5A04 /* Frameworks */,
139 | 49FB7FC62967982A003A5A04 /* Resources */,
140 | );
141 | buildRules = (
142 | );
143 | dependencies = (
144 | );
145 | name = bank;
146 | productName = bank;
147 | productReference = 49FB7FC82967982A003A5A04 /* bank.app */;
148 | productType = "com.apple.product-type.application";
149 | };
150 | 49FB7FD72967982B003A5A04 /* bankTests */ = {
151 | isa = PBXNativeTarget;
152 | buildConfigurationList = 49FB7FEF2967982B003A5A04 /* Build configuration list for PBXNativeTarget "bankTests" */;
153 | buildPhases = (
154 | 49FB7FD42967982B003A5A04 /* Sources */,
155 | 49FB7FD52967982B003A5A04 /* Frameworks */,
156 | 49FB7FD62967982B003A5A04 /* Resources */,
157 | );
158 | buildRules = (
159 | );
160 | dependencies = (
161 | 49FB7FDA2967982B003A5A04 /* PBXTargetDependency */,
162 | );
163 | name = bankTests;
164 | productName = bankTests;
165 | productReference = 49FB7FD82967982B003A5A04 /* bankTests.xctest */;
166 | productType = "com.apple.product-type.bundle.unit-test";
167 | };
168 | 49FB7FE12967982B003A5A04 /* bankUITests */ = {
169 | isa = PBXNativeTarget;
170 | buildConfigurationList = 49FB7FF22967982B003A5A04 /* Build configuration list for PBXNativeTarget "bankUITests" */;
171 | buildPhases = (
172 | 49FB7FDE2967982B003A5A04 /* Sources */,
173 | 49FB7FDF2967982B003A5A04 /* Frameworks */,
174 | 49FB7FE02967982B003A5A04 /* Resources */,
175 | );
176 | buildRules = (
177 | );
178 | dependencies = (
179 | 49FB7FE42967982B003A5A04 /* PBXTargetDependency */,
180 | );
181 | name = bankUITests;
182 | productName = bankUITests;
183 | productReference = 49FB7FE22967982B003A5A04 /* bankUITests.xctest */;
184 | productType = "com.apple.product-type.bundle.ui-testing";
185 | };
186 | /* End PBXNativeTarget section */
187 |
188 | /* Begin PBXProject section */
189 | 49FB7FC02967982A003A5A04 /* Project object */ = {
190 | isa = PBXProject;
191 | attributes = {
192 | BuildIndependentTargetsInParallel = 1;
193 | LastSwiftUpdateCheck = 1410;
194 | LastUpgradeCheck = 1410;
195 | TargetAttributes = {
196 | 49FB7FC72967982A003A5A04 = {
197 | CreatedOnToolsVersion = 14.1;
198 | };
199 | 49FB7FD72967982B003A5A04 = {
200 | CreatedOnToolsVersion = 14.1;
201 | TestTargetID = 49FB7FC72967982A003A5A04;
202 | };
203 | 49FB7FE12967982B003A5A04 = {
204 | CreatedOnToolsVersion = 14.1;
205 | TestTargetID = 49FB7FC72967982A003A5A04;
206 | };
207 | };
208 | };
209 | buildConfigurationList = 49FB7FC32967982A003A5A04 /* Build configuration list for PBXProject "bank" */;
210 | compatibilityVersion = "Xcode 14.0";
211 | developmentRegion = en;
212 | hasScannedForEncodings = 0;
213 | knownRegions = (
214 | en,
215 | Base,
216 | );
217 | mainGroup = 49FB7FBF2967982A003A5A04;
218 | productRefGroup = 49FB7FC92967982A003A5A04 /* Products */;
219 | projectDirPath = "";
220 | projectRoot = "";
221 | targets = (
222 | 49FB7FC72967982A003A5A04 /* bank */,
223 | 49FB7FD72967982B003A5A04 /* bankTests */,
224 | 49FB7FE12967982B003A5A04 /* bankUITests */,
225 | );
226 | };
227 | /* End PBXProject section */
228 |
229 | /* Begin PBXResourcesBuildPhase section */
230 | 49FB7FC62967982A003A5A04 /* Resources */ = {
231 | isa = PBXResourcesBuildPhase;
232 | buildActionMask = 2147483647;
233 | files = (
234 | 49FB7FD32967982B003A5A04 /* Preview Assets.xcassets in Resources */,
235 | 49FB7FD02967982B003A5A04 /* Assets.xcassets in Resources */,
236 | );
237 | runOnlyForDeploymentPostprocessing = 0;
238 | };
239 | 49FB7FD62967982B003A5A04 /* Resources */ = {
240 | isa = PBXResourcesBuildPhase;
241 | buildActionMask = 2147483647;
242 | files = (
243 | );
244 | runOnlyForDeploymentPostprocessing = 0;
245 | };
246 | 49FB7FE02967982B003A5A04 /* Resources */ = {
247 | isa = PBXResourcesBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | );
251 | runOnlyForDeploymentPostprocessing = 0;
252 | };
253 | /* End PBXResourcesBuildPhase section */
254 |
255 | /* Begin PBXSourcesBuildPhase section */
256 | 49FB7FC42967982A003A5A04 /* Sources */ = {
257 | isa = PBXSourcesBuildPhase;
258 | buildActionMask = 2147483647;
259 | files = (
260 | 49FB7FCE2967982A003A5A04 /* ContentView.swift in Sources */,
261 | 49FB7FCC2967982A003A5A04 /* bankApp.swift in Sources */,
262 | );
263 | runOnlyForDeploymentPostprocessing = 0;
264 | };
265 | 49FB7FD42967982B003A5A04 /* Sources */ = {
266 | isa = PBXSourcesBuildPhase;
267 | buildActionMask = 2147483647;
268 | files = (
269 | 49FB7FDD2967982B003A5A04 /* bankTests.swift in Sources */,
270 | );
271 | runOnlyForDeploymentPostprocessing = 0;
272 | };
273 | 49FB7FDE2967982B003A5A04 /* Sources */ = {
274 | isa = PBXSourcesBuildPhase;
275 | buildActionMask = 2147483647;
276 | files = (
277 | 49FB7FE92967982B003A5A04 /* bankUITestsLaunchTests.swift in Sources */,
278 | 49FB7FE72967982B003A5A04 /* bankUITests.swift in Sources */,
279 | );
280 | runOnlyForDeploymentPostprocessing = 0;
281 | };
282 | /* End PBXSourcesBuildPhase section */
283 |
284 | /* Begin PBXTargetDependency section */
285 | 49FB7FDA2967982B003A5A04 /* PBXTargetDependency */ = {
286 | isa = PBXTargetDependency;
287 | target = 49FB7FC72967982A003A5A04 /* bank */;
288 | targetProxy = 49FB7FD92967982B003A5A04 /* PBXContainerItemProxy */;
289 | };
290 | 49FB7FE42967982B003A5A04 /* PBXTargetDependency */ = {
291 | isa = PBXTargetDependency;
292 | target = 49FB7FC72967982A003A5A04 /* bank */;
293 | targetProxy = 49FB7FE32967982B003A5A04 /* PBXContainerItemProxy */;
294 | };
295 | /* End PBXTargetDependency section */
296 |
297 | /* Begin XCBuildConfiguration section */
298 | 49FB7FEA2967982B003A5A04 /* Debug */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ALWAYS_SEARCH_USER_PATHS = NO;
302 | CLANG_ANALYZER_NONNULL = YES;
303 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
304 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
305 | CLANG_ENABLE_MODULES = YES;
306 | CLANG_ENABLE_OBJC_ARC = YES;
307 | CLANG_ENABLE_OBJC_WEAK = YES;
308 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
309 | CLANG_WARN_BOOL_CONVERSION = YES;
310 | CLANG_WARN_COMMA = YES;
311 | CLANG_WARN_CONSTANT_CONVERSION = YES;
312 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
313 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
314 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
315 | CLANG_WARN_EMPTY_BODY = YES;
316 | CLANG_WARN_ENUM_CONVERSION = YES;
317 | CLANG_WARN_INFINITE_RECURSION = YES;
318 | CLANG_WARN_INT_CONVERSION = YES;
319 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
320 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
321 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
322 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
323 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
324 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
325 | CLANG_WARN_STRICT_PROTOTYPES = YES;
326 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
327 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
328 | CLANG_WARN_UNREACHABLE_CODE = YES;
329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
330 | COPY_PHASE_STRIP = NO;
331 | DEBUG_INFORMATION_FORMAT = dwarf;
332 | ENABLE_STRICT_OBJC_MSGSEND = YES;
333 | ENABLE_TESTABILITY = YES;
334 | GCC_C_LANGUAGE_STANDARD = gnu11;
335 | GCC_DYNAMIC_NO_PIC = NO;
336 | GCC_NO_COMMON_BLOCKS = YES;
337 | GCC_OPTIMIZATION_LEVEL = 0;
338 | GCC_PREPROCESSOR_DEFINITIONS = (
339 | "DEBUG=1",
340 | "$(inherited)",
341 | );
342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
344 | GCC_WARN_UNDECLARED_SELECTOR = YES;
345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
346 | GCC_WARN_UNUSED_FUNCTION = YES;
347 | GCC_WARN_UNUSED_VARIABLE = YES;
348 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
349 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
350 | MTL_FAST_MATH = YES;
351 | ONLY_ACTIVE_ARCH = YES;
352 | SDKROOT = iphoneos;
353 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
354 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
355 | };
356 | name = Debug;
357 | };
358 | 49FB7FEB2967982B003A5A04 /* Release */ = {
359 | isa = XCBuildConfiguration;
360 | buildSettings = {
361 | ALWAYS_SEARCH_USER_PATHS = NO;
362 | CLANG_ANALYZER_NONNULL = YES;
363 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
364 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
365 | CLANG_ENABLE_MODULES = YES;
366 | CLANG_ENABLE_OBJC_ARC = YES;
367 | CLANG_ENABLE_OBJC_WEAK = YES;
368 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
369 | CLANG_WARN_BOOL_CONVERSION = YES;
370 | CLANG_WARN_COMMA = YES;
371 | CLANG_WARN_CONSTANT_CONVERSION = YES;
372 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
373 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
374 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
375 | CLANG_WARN_EMPTY_BODY = YES;
376 | CLANG_WARN_ENUM_CONVERSION = YES;
377 | CLANG_WARN_INFINITE_RECURSION = YES;
378 | CLANG_WARN_INT_CONVERSION = YES;
379 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
380 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
381 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
383 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
384 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
385 | CLANG_WARN_STRICT_PROTOTYPES = YES;
386 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
387 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
388 | CLANG_WARN_UNREACHABLE_CODE = YES;
389 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
390 | COPY_PHASE_STRIP = NO;
391 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
392 | ENABLE_NS_ASSERTIONS = NO;
393 | ENABLE_STRICT_OBJC_MSGSEND = YES;
394 | GCC_C_LANGUAGE_STANDARD = gnu11;
395 | GCC_NO_COMMON_BLOCKS = YES;
396 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
397 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
398 | GCC_WARN_UNDECLARED_SELECTOR = YES;
399 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
400 | GCC_WARN_UNUSED_FUNCTION = YES;
401 | GCC_WARN_UNUSED_VARIABLE = YES;
402 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
403 | MTL_ENABLE_DEBUG_INFO = NO;
404 | MTL_FAST_MATH = YES;
405 | SDKROOT = iphoneos;
406 | SWIFT_COMPILATION_MODE = wholemodule;
407 | SWIFT_OPTIMIZATION_LEVEL = "-O";
408 | VALIDATE_PRODUCT = YES;
409 | };
410 | name = Release;
411 | };
412 | 49FB7FED2967982B003A5A04 /* Debug */ = {
413 | isa = XCBuildConfiguration;
414 | buildSettings = {
415 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
416 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
417 | CODE_SIGN_STYLE = Automatic;
418 | CURRENT_PROJECT_VERSION = 1;
419 | DEVELOPMENT_ASSET_PATHS = "\"bank/Preview Content\"";
420 | ENABLE_PREVIEWS = YES;
421 | GENERATE_INFOPLIST_FILE = YES;
422 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
423 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
424 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
425 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
426 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
427 | LD_RUNPATH_SEARCH_PATHS = (
428 | "$(inherited)",
429 | "@executable_path/Frameworks",
430 | );
431 | MARKETING_VERSION = 1.0;
432 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bank;
433 | PRODUCT_NAME = "$(TARGET_NAME)";
434 | SWIFT_EMIT_LOC_STRINGS = YES;
435 | SWIFT_VERSION = 5.0;
436 | TARGETED_DEVICE_FAMILY = "1,2";
437 | };
438 | name = Debug;
439 | };
440 | 49FB7FEE2967982B003A5A04 /* Release */ = {
441 | isa = XCBuildConfiguration;
442 | buildSettings = {
443 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
444 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
445 | CODE_SIGN_STYLE = Automatic;
446 | CURRENT_PROJECT_VERSION = 1;
447 | DEVELOPMENT_ASSET_PATHS = "\"bank/Preview Content\"";
448 | ENABLE_PREVIEWS = YES;
449 | GENERATE_INFOPLIST_FILE = YES;
450 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
451 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
452 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
453 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
454 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
455 | LD_RUNPATH_SEARCH_PATHS = (
456 | "$(inherited)",
457 | "@executable_path/Frameworks",
458 | );
459 | MARKETING_VERSION = 1.0;
460 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bank;
461 | PRODUCT_NAME = "$(TARGET_NAME)";
462 | SWIFT_EMIT_LOC_STRINGS = YES;
463 | SWIFT_VERSION = 5.0;
464 | TARGETED_DEVICE_FAMILY = "1,2";
465 | };
466 | name = Release;
467 | };
468 | 49FB7FF02967982B003A5A04 /* Debug */ = {
469 | isa = XCBuildConfiguration;
470 | buildSettings = {
471 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
472 | BUNDLE_LOADER = "$(TEST_HOST)";
473 | CODE_SIGN_STYLE = Automatic;
474 | CURRENT_PROJECT_VERSION = 1;
475 | GENERATE_INFOPLIST_FILE = YES;
476 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
477 | MARKETING_VERSION = 1.0;
478 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bankTests;
479 | PRODUCT_NAME = "$(TARGET_NAME)";
480 | SWIFT_EMIT_LOC_STRINGS = NO;
481 | SWIFT_VERSION = 5.0;
482 | TARGETED_DEVICE_FAMILY = "1,2";
483 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bank.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bank";
484 | };
485 | name = Debug;
486 | };
487 | 49FB7FF12967982B003A5A04 /* Release */ = {
488 | isa = XCBuildConfiguration;
489 | buildSettings = {
490 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
491 | BUNDLE_LOADER = "$(TEST_HOST)";
492 | CODE_SIGN_STYLE = Automatic;
493 | CURRENT_PROJECT_VERSION = 1;
494 | GENERATE_INFOPLIST_FILE = YES;
495 | IPHONEOS_DEPLOYMENT_TARGET = 16.1;
496 | MARKETING_VERSION = 1.0;
497 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bankTests;
498 | PRODUCT_NAME = "$(TARGET_NAME)";
499 | SWIFT_EMIT_LOC_STRINGS = NO;
500 | SWIFT_VERSION = 5.0;
501 | TARGETED_DEVICE_FAMILY = "1,2";
502 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bank.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bank";
503 | };
504 | name = Release;
505 | };
506 | 49FB7FF32967982B003A5A04 /* Debug */ = {
507 | isa = XCBuildConfiguration;
508 | buildSettings = {
509 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
510 | CODE_SIGN_STYLE = Automatic;
511 | CURRENT_PROJECT_VERSION = 1;
512 | GENERATE_INFOPLIST_FILE = YES;
513 | MARKETING_VERSION = 1.0;
514 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bankUITests;
515 | PRODUCT_NAME = "$(TARGET_NAME)";
516 | SWIFT_EMIT_LOC_STRINGS = NO;
517 | SWIFT_VERSION = 5.0;
518 | TARGETED_DEVICE_FAMILY = "1,2";
519 | TEST_TARGET_NAME = bank;
520 | };
521 | name = Debug;
522 | };
523 | 49FB7FF42967982B003A5A04 /* Release */ = {
524 | isa = XCBuildConfiguration;
525 | buildSettings = {
526 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
527 | CODE_SIGN_STYLE = Automatic;
528 | CURRENT_PROJECT_VERSION = 1;
529 | GENERATE_INFOPLIST_FILE = YES;
530 | MARKETING_VERSION = 1.0;
531 | PRODUCT_BUNDLE_IDENTIFIER = org.hackclub.bankUITests;
532 | PRODUCT_NAME = "$(TARGET_NAME)";
533 | SWIFT_EMIT_LOC_STRINGS = NO;
534 | SWIFT_VERSION = 5.0;
535 | TARGETED_DEVICE_FAMILY = "1,2";
536 | TEST_TARGET_NAME = bank;
537 | };
538 | name = Release;
539 | };
540 | /* End XCBuildConfiguration section */
541 |
542 | /* Begin XCConfigurationList section */
543 | 49FB7FC32967982A003A5A04 /* Build configuration list for PBXProject "bank" */ = {
544 | isa = XCConfigurationList;
545 | buildConfigurations = (
546 | 49FB7FEA2967982B003A5A04 /* Debug */,
547 | 49FB7FEB2967982B003A5A04 /* Release */,
548 | );
549 | defaultConfigurationIsVisible = 0;
550 | defaultConfigurationName = Release;
551 | };
552 | 49FB7FEC2967982B003A5A04 /* Build configuration list for PBXNativeTarget "bank" */ = {
553 | isa = XCConfigurationList;
554 | buildConfigurations = (
555 | 49FB7FED2967982B003A5A04 /* Debug */,
556 | 49FB7FEE2967982B003A5A04 /* Release */,
557 | );
558 | defaultConfigurationIsVisible = 0;
559 | defaultConfigurationName = Release;
560 | };
561 | 49FB7FEF2967982B003A5A04 /* Build configuration list for PBXNativeTarget "bankTests" */ = {
562 | isa = XCConfigurationList;
563 | buildConfigurations = (
564 | 49FB7FF02967982B003A5A04 /* Debug */,
565 | 49FB7FF12967982B003A5A04 /* Release */,
566 | );
567 | defaultConfigurationIsVisible = 0;
568 | defaultConfigurationName = Release;
569 | };
570 | 49FB7FF22967982B003A5A04 /* Build configuration list for PBXNativeTarget "bankUITests" */ = {
571 | isa = XCConfigurationList;
572 | buildConfigurations = (
573 | 49FB7FF32967982B003A5A04 /* Debug */,
574 | 49FB7FF42967982B003A5A04 /* Release */,
575 | );
576 | defaultConfigurationIsVisible = 0;
577 | defaultConfigurationName = Release;
578 | };
579 | /* End XCConfigurationList section */
580 | };
581 | rootObject = 49FB7FC02967982A003A5A04 /* Project object */;
582 | }
583 |
--------------------------------------------------------------------------------
/bank.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/bank.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/bank.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/hcbapp/93ae4bcfe04259d011dc0417340f4301e360b04b/bank.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/bank.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | bank.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/bank/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/bank/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/bank/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/bank/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // bank
4 | //
5 | // Created by Andrew Nijmeh on 2023-01-05.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct ContentView: View {
11 | @State private var emailAddress = ""
12 | var body: some View {
13 | VStack {
14 | Image(systemName: "globe") // place holder for bank image
15 | .imageScale(.large)
16 | .foregroundColor(.accentColor)
17 | Text("LOGIN IN TO").bold()
18 | .font(.title)
19 | .frame(width: 200)
20 | Text("Hack Club Bank").bold()
21 | .font(.largeTitle)
22 | .frame(width: 300)
23 | .foregroundColor(.red)
24 | TextField("Enter Your Email", text: $emailAddress)
25 | .textFieldStyle(.roundedBorder)
26 | .padding()
27 |
28 | Button("Continue") {
29 | print("Hack Club Bank")
30 | }
31 | .buttonStyle(.bordered)
32 | .tint(.blue)
33 | }
34 | .padding()
35 | }
36 | }
37 |
38 | struct ContentView_Previews: PreviewProvider {
39 | static var previews: some View {
40 | ContentView()
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/bank/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/bank/bankApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // bankApp.swift
3 | // bank
4 | //
5 | // Created by Andrew Nijmeh on 2023-01-05.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct bankApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/bankTests/bankTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // bankTests.swift
3 | // bankTests
4 | //
5 | // Created by Andrew Nijmeh on 2023-01-05.
6 | //
7 |
8 | import XCTest
9 | @testable import bank
10 |
11 | final class bankTests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 | }
16 |
17 | override func tearDownWithError() throws {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() throws {
22 | // This is an example of a functional test case.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | // Any test you write for XCTest can be annotated as throws and async.
25 | // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
26 | // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
27 | }
28 |
29 | func testPerformanceExample() throws {
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 | }
37 |
--------------------------------------------------------------------------------
/bankUITests/bankUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // bankUITests.swift
3 | // bankUITests
4 | //
5 | // Created by Andrew Nijmeh on 2023-01-05.
6 | //
7 |
8 | import XCTest
9 |
10 | final class bankUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // 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.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | func testExample() throws {
26 | // UI tests must launch the application that they test.
27 | let app = XCUIApplication()
28 | app.launch()
29 |
30 | // Use XCTAssert and related functions to verify your tests produce the correct results.
31 | }
32 |
33 | func testLaunchPerformance() throws {
34 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
35 | // This measures how long it takes to launch your application.
36 | measure(metrics: [XCTApplicationLaunchMetric()]) {
37 | XCUIApplication().launch()
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/bankUITests/bankUITestsLaunchTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // bankUITestsLaunchTests.swift
3 | // bankUITests
4 | //
5 | // Created by Andrew Nijmeh on 2023-01-05.
6 | //
7 |
8 | import XCTest
9 |
10 | final class bankUITestsLaunchTests: XCTestCase {
11 |
12 | override class var runsForEachTargetApplicationUIConfiguration: Bool {
13 | true
14 | }
15 |
16 | override func setUpWithError() throws {
17 | continueAfterFailure = false
18 | }
19 |
20 | func testLaunch() throws {
21 | let app = XCUIApplication()
22 | app.launch()
23 |
24 | // Insert steps here to perform after app launch but before taking a screenshot,
25 | // such as logging into a test account or navigating somewhere in the app
26 |
27 | let attachment = XCTAttachment(screenshot: app.screenshot())
28 | attachment.name = "Launch Screen"
29 | attachment.lifetime = .keepAlways
30 | add(attachment)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------