├── .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 | HCB Logo 2 | 3 | # 💸 HCB App 4 | [![iOS](https://github.com/anddddrew/hcbapp/actions/workflows/ios.yml/badge.svg)](https://github.com/anddddrew/hcbapp/actions/workflows/ios.yml) 5 | [![format](https://github.com/hackclub/hcbapp/actions/workflows/format.yml/badge.svg)](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 | --------------------------------------------------------------------------------