From f7b3bf40d8e4ce30ff7a14c56428e56e419ed0a9 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Sat, 28 Sep 2024 08:24:52 +1000 Subject: [PATCH] =?UTF-8?q?DRY=20.gitignore=20setup=20=E2=80=94=20Push=20t?= =?UTF-8?q?o=20root?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 + 04-tdd-in-the-real-world/0-start/.gitignore | 32 - .../UserInterfaceState.xcuserstate | Bin 0 -> 20091 bytes .../xcschemes/xcschememanagement.plist | 27 + 04-tdd-in-the-real-world/1-end/.gitignore | 32 - .../1-end/Albertos.xcodeproj/project.pbxproj | 408 +++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 26414 bytes .../xcshareddata/xcschemes/Albertos.xcscheme | 105 +++ .../xcschemes/xcschememanagement.plist | 14 + 05-fixtures/.gitignore | 1 - 05-fixtures/0-start/.gitignore | 32 - 05-fixtures/1-end/.gitignore | 32 - .../UserInterfaceState.xcuserstate | Bin 0 -> 67451 bytes 06-testing-static-swiftui-views/.gitignore | 1 - .../0-start/.gitignore | 31 - .../1-end/.gitignore | 31 - .../UserInterfaceState.xcuserstate | Bin 0 -> 42455 bytes 07-testing-dynamic-swiftui-views/.gitignore | 1 - .../0-start/.gitignore | 31 - .../1-end/.gitignore | 31 - 08-stub/.gitignore | 1 - 08-stub/0-start/.gitignore | 31 - 08-stub/1-end/.gitignore | 31 - 09-json-decoding/.gitignore | 1 - 09-json-decoding/0-start/.gitignore | 31 - 09-json-decoding/1-end/.gitignore | 31 - 10-networking/.gitignore | 1 - 10-networking/0-start/.gitignore | 31 - 10-networking/1-end/.gitignore | 31 - .../.gitignore | 1 - .../0-start/.gitignore | 31 - .../1-end/.gitignore | 31 - 12-spy/.gitignore | 1 - 12-spy/0-start/.gitignore | 31 - 12-spy/1-end/.gitignore | 31 - 13-testing-view-presentation/.gitignore | 1 - .../0-start/.gitignore | 31 - 13-testing-view-presentation/1-end/.gitignore | 31 - 14-fixing-bugs-and-changing-code/.gitignore | 1 - .../0-start/.gitignore | 31 - .../1-end/.gitignore | 31 - 15-fake-and-dummy/0-start/.gitignore | 32 - .../Albertos.xcodeproj/project.pbxproj | 807 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Albertos.xcscheme | 105 +++ 15-fake-and-dummy/1-end/.gitignore | 32 - .../1-end/Albertos.xcodeproj/project.pbxproj | 803 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 55691 bytes .../xcshareddata/xcschemes/Albertos.xcscheme | 105 +++ .../xcschemes/xcschememanagement.plist | 24 + 17-appendix-b-nimble-only/.gitignore | 32 - 18-appendix-b-quick-and-nimble/.gitignore | 32 - 19-appendix-c-uikit/.gitignore | 32 - .../Albertos.xcodeproj/project.pbxproj | 863 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 42 + .../UserInterfaceState.xcuserstate | Bin 0 -> 24035 bytes .../xcshareddata/xcschemes/Albertos.xcscheme | 105 +++ .../xcschemes/xcschememanagement.plist | 14 + 61 files changed, 3460 insertions(+), 856 deletions(-) delete mode 100644 04-tdd-in-the-real-world/0-start/.gitignore create mode 100644 04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 04-tdd-in-the-real-world/1-end/.gitignore create mode 100644 04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.pbxproj create mode 100644 04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme create mode 100644 04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 05-fixtures/.gitignore delete mode 100644 05-fixtures/0-start/.gitignore delete mode 100644 05-fixtures/1-end/.gitignore create mode 100644 05-fixtures/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 06-testing-static-swiftui-views/.gitignore delete mode 100644 06-testing-static-swiftui-views/0-start/.gitignore delete mode 100644 06-testing-static-swiftui-views/1-end/.gitignore create mode 100644 06-testing-static-swiftui-views/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 07-testing-dynamic-swiftui-views/.gitignore delete mode 100644 07-testing-dynamic-swiftui-views/0-start/.gitignore delete mode 100644 07-testing-dynamic-swiftui-views/1-end/.gitignore delete mode 100644 08-stub/.gitignore delete mode 100644 08-stub/0-start/.gitignore delete mode 100644 08-stub/1-end/.gitignore delete mode 100644 09-json-decoding/.gitignore delete mode 100644 09-json-decoding/0-start/.gitignore delete mode 100644 09-json-decoding/1-end/.gitignore delete mode 100644 10-networking/.gitignore delete mode 100644 10-networking/0-start/.gitignore delete mode 100644 10-networking/1-end/.gitignore delete mode 100644 11-dependency-injection-with-environment-object/.gitignore delete mode 100644 11-dependency-injection-with-environment-object/0-start/.gitignore delete mode 100644 11-dependency-injection-with-environment-object/1-end/.gitignore delete mode 100644 12-spy/.gitignore delete mode 100644 12-spy/0-start/.gitignore delete mode 100644 12-spy/1-end/.gitignore delete mode 100644 13-testing-view-presentation/.gitignore delete mode 100644 13-testing-view-presentation/0-start/.gitignore delete mode 100644 13-testing-view-presentation/1-end/.gitignore delete mode 100644 14-fixing-bugs-and-changing-code/.gitignore delete mode 100644 14-fixing-bugs-and-changing-code/0-start/.gitignore delete mode 100644 14-fixing-bugs-and-changing-code/1-end/.gitignore delete mode 100644 15-fake-and-dummy/0-start/.gitignore create mode 100644 15-fake-and-dummy/0-start/Albertos.xcodeproj/project.pbxproj create mode 100644 15-fake-and-dummy/0-start/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 15-fake-and-dummy/0-start/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme delete mode 100644 15-fake-and-dummy/1-end/.gitignore create mode 100644 15-fake-and-dummy/1-end/Albertos.xcodeproj/project.pbxproj create mode 100644 15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 15-fake-and-dummy/1-end/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme create mode 100644 15-fake-and-dummy/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 17-appendix-b-nimble-only/.gitignore delete mode 100644 18-appendix-b-quick-and-nimble/.gitignore delete mode 100644 19-appendix-c-uikit/.gitignore create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/project.pbxproj create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme create mode 100644 19-appendix-c-uikit/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore index 4e432c2..f13fd72 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,11 @@ +.DS_Store +# If Xcode is setup to use a local derived data folder (recommended), ignore it +DerivedData + +# Ignore xcodeproj because we codegenerate them +*.xcodeproj +# Ignore Info.plist because we codegen that, too Info.plist + +# SwiftPM +.build diff --git a/04-tdd-in-the-real-world/0-start/.gitignore b/04-tdd-in-the-real-world/0-start/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/04-tdd-in-the-real-world/0-start/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate b/04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..143786596b084cfeb38a70214291e7cbe62cabba GIT binary patch literal 20091 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%0A4&`0Shm;R1_bK-)4=4{R zpHM!jd|LUe@;T)T%8x_&(2=3zL+zpKL-&Wi75bA(sftp?sA5&|s#I0B%Badw<*7`n zLe&ISwW?M%Sv6fXQ&q3BsFtZZRXbG=tM;k(s}881Qaz(Ota@H`MD<-*LReYY#IPA* z_OSV3i^EogZ4A33Y+KmQuw7xh!}f*k4?7TcFzm&!SHez&oeujT?4z*H!@dkV6ZTEm z?`l7FpgKscRIAi#b)q^=ovF@N7pTkBFT-adFmE*o7$mvsh6sm`YQD@ z^>yky)ZOY`>V4|{>I3S7>Sxr4)z7Pss9#in6`l}Y89qIHR`{ji4dK@Crtr4#j&LD- zb@;X6>%;E|?+o7={$Th+;d{d$34b*F>F}4rUy1OG2#rXJ&_);{N+QZ5#z#zusE(+O zm>e-RVtvG+h!-M`MZ6aAUc|={pGN$k@zMBc0yGLuutup-Y1EnsO{6ATlcCAd7&N0b zxte@Ufu=}PtSQxu(UfayHS;vfG~ zRzqod8yCDE5ePmQjNo)JAO+8W&y zZHt~4-4gAJUK)K(?7G+uv3JMbAG;^^K@TtB)`X1-_a{7%@Lf?nUtKAnv|VnOv*{h zOEM)DCQV72m$WSD?xaVPo=ZBC^kUL0Nk@~8C!I<9X@qh_*ocTx0i(i36^*ep{_yKrdy`FMYmDct$RSXM|Vi~58X?; zcXaRSPUueRKGA)y`%3qh=0ey+J=(pQ|s^*Xi5z zSLj#kx9jiI@7EvFKdnEke?kAM{9?dm zoc==k>*?R6|Cs)B`mgC1GH?c$;gR8;5u1^fQIatu!=AAw$(oVn$Xb|nUDk%I&aBN@_hu(%r)B46o3kskFU_`PugktI z`@e&!JZRWs*lXBtIA(a= z@Rs3S!%4$w!v}^h4c{4lH2iEhZ@6IeH3k@ij7sBhW1KO;IKr4^G#E!4^Ni)j3gblM zCB|9CcH<)B65|y{!MM!0!noRaopG)4X5$9q{l;C!-Nrq}y~h2<1IEXVhm21dpEW*b ze8KqfXnyp_(c?$kN3S1!X!M6UG$%HvAZKjO_?*g|s+?&#vvV4A=H$%Hxh$tSrz7Wz z93f{}&Z?Yib8g7FF=tQC(VUYxALV?S^F_{?oF8(|<@}oSTh8yfBXa9nZG6f@%&fwKg<6z|Lgp3^MA-cm;Z~2ntV+D zCWR@)6l#h!C74E-l1)Zajw#PnV5%@xnyO4Srb|r?ra7j$rgqaJ(-PAaCc$*I=@!!_ z(>xVm6@!K#9r3f33gTClO;&VsuOwifIzI9Tv{!TSYY z6r3qITkw6sPlc$E6mo?ggcM*9zY#e5>%CBCjH2k+o=D(Gx{qn}?gL%rniGnj6e>%r^5p^Ofe6 z=IhLB%{QCZo4d^0%=eieFz+_+H$P^6-29~ZY4eNb*Uj&nKQn)6{@VPl`DgQa^Mztu ZOpE=CRgxtwe)&uK$KNWyyI+fw{}0on!j=F4 literal 0 HcmV?d00001 diff --git a/04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist b/04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..cc1a1fa --- /dev/null +++ b/04-tdd-in-the-real-world/0-start/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + Albertos.xcscheme_^#shared#^_ + + orderHint + 0 + + + SuppressBuildableAutocreation + + 33D869CEA8CD44DF60039E52 + + primary + + + B5F9F9D2250AEB2D2EE0494B + + primary + + + + + diff --git a/04-tdd-in-the-real-world/1-end/.gitignore b/04-tdd-in-the-real-world/1-end/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/04-tdd-in-the-real-world/1-end/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.pbxproj b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d51362e --- /dev/null +++ b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.pbxproj @@ -0,0 +1,408 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51B5F284ED8D04D444E045A /* MenuItem.swift */; }; + 25E8CB41017E048190FCD053 /* Menu+Dummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8947C2D6FD62F24954413BF /* Menu+Dummy.swift */; }; + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */; }; + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */; }; + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */; }; + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */; }; + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */; }; + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E678AF65BE5E3636E405C7 /* MenuList.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E8B17C8ABC8471E4224D1C39 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5F9F9D2250AEB2D2EE0494B; + remoteInfo = Albertos; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 38E678AF65BE5E3636E405C7 /* MenuList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.swift; sourceTree = ""; }; + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Safe.swift"; sourceTree = ""; }; + 823EEDCB67B487000A05DB62 /* Albertos.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Albertos.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGroupingTests.swift; sourceTree = ""; }; + A8947C2D6FD62F24954413BF /* Menu+Dummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Menu+Dummy.swift"; sourceTree = ""; }; + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = AlbertosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbertosApp.swift; sourceTree = ""; }; + E51B5F284ED8D04D444E045A /* MenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuSection.swift; sourceTree = ""; }; + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGrouping.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 6587589555E08BBEB63089E1 /* Sources */ = { + isa = PBXGroup; + children = ( + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */, + ); + name = Sources; + path = ../../Packages/CollectionSafe/Sources; + sourceTree = ""; + }; + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */, + ); + path = AlbertosTests; + sourceTree = ""; + }; + 8D972551E420DEE0F670E89F /* Albertos */ = { + isa = PBXGroup; + children = ( + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */, + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */, + A8947C2D6FD62F24954413BF /* Menu+Dummy.swift */, + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */, + E51B5F284ED8D04D444E045A /* MenuItem.swift */, + 38E678AF65BE5E3636E405C7 /* MenuList.swift */, + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */, + ); + path = Albertos; + sourceTree = ""; + }; + 92B90574F9FA63884D9D7BBF = { + isa = PBXGroup; + children = ( + 8D972551E420DEE0F670E89F /* Albertos */, + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */, + 6587589555E08BBEB63089E1 /* Sources */, + A0D81A2A2581F3DF42D52538 /* Products */, + ); + sourceTree = ""; + }; + A0D81A2A2581F3DF42D52538 /* Products */ = { + isa = PBXGroup; + children = ( + 823EEDCB67B487000A05DB62 /* Albertos.app */, + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33D869CEA8CD44DF60039E52 /* AlbertosTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */; + buildPhases = ( + C099BFE9ACD985A8EDF284EA /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */, + ); + name = AlbertosTests; + productName = AlbertosTests; + productReference = BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B5F9F9D2250AEB2D2EE0494B /* Albertos */ = { + isa = PBXNativeTarget; + buildConfigurationList = 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */; + buildPhases = ( + 2B3D01A98BE73618C91FF57C /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Albertos; + productName = Albertos; + productReference = 823EEDCB67B487000A05DB62 /* Albertos.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E8B17C8ABC8471E4224D1C39 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 92B90574F9FA63884D9D7BBF; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B5F9F9D2250AEB2D2EE0494B /* Albertos */, + 33D869CEA8CD44DF60039E52 /* AlbertosTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 2B3D01A98BE73618C91FF57C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */, + 25E8CB41017E048190FCD053 /* Menu+Dummy.swift in Sources */, + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */, + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */, + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */, + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C099BFE9ACD985A8EDF284EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */, + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B5F9F9D2250AEB2D2EE0494B /* Albertos */; + targetProxy = 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 068E7B265A85A0D164E026DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Release; + }; + 1D797AB11DACDB9E4B218C54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Debug; + }; + 60C5F61655CE71EFE9017DDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 924F1451F334BAAEFDFDAD7C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = Albertos/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + D6F337C2184F1D0A465FC2BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EC39A2F770A854AABF6204BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = Albertos/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6F337C2184F1D0A465FC2BA /* Debug */, + 60C5F61655CE71EFE9017DDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC39A2F770A854AABF6204BC /* Debug */, + 924F1451F334BAAEFDFDAD7C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D797AB11DACDB9E4B218C54 /* Debug */, + 068E7B265A85A0D164E026DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = E8B17C8ABC8471E4224D1C39 /* Project object */; +} diff --git a/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..34e74e42457bbdfbd1de55f38113312791f83486 GIT binary patch literal 26414 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 literal 0 HcmV?d00001 diff --git a/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme new file mode 100644 index 0000000..625bb4c --- /dev/null +++ b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4ed026f --- /dev/null +++ b/04-tdd-in-the-real-world/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Albertos.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/05-fixtures/.gitignore b/05-fixtures/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/05-fixtures/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/05-fixtures/0-start/.gitignore b/05-fixtures/0-start/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/05-fixtures/0-start/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/05-fixtures/1-end/.gitignore b/05-fixtures/1-end/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/05-fixtures/1-end/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/05-fixtures/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate b/05-fixtures/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..fa57a87b1bd1542bed1125d8754056a304219dd3 GIT binary patch literal 67451 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

E#v~6+Of=To&OS?HMjt*Nv#fc{tS74LCJzZM|Gk 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 h;fU~|Ff~jIM}-;T)BkM$x$OV| literal 0 HcmV?d00001 diff --git a/07-testing-dynamic-swiftui-views/.gitignore b/07-testing-dynamic-swiftui-views/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/07-testing-dynamic-swiftui-views/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/07-testing-dynamic-swiftui-views/0-start/.gitignore b/07-testing-dynamic-swiftui-views/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/07-testing-dynamic-swiftui-views/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/07-testing-dynamic-swiftui-views/1-end/.gitignore b/07-testing-dynamic-swiftui-views/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/07-testing-dynamic-swiftui-views/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/08-stub/.gitignore b/08-stub/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/08-stub/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/08-stub/0-start/.gitignore b/08-stub/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/08-stub/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/08-stub/1-end/.gitignore b/08-stub/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/08-stub/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/09-json-decoding/.gitignore b/09-json-decoding/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/09-json-decoding/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/09-json-decoding/0-start/.gitignore b/09-json-decoding/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/09-json-decoding/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/09-json-decoding/1-end/.gitignore b/09-json-decoding/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/09-json-decoding/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/10-networking/.gitignore b/10-networking/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/10-networking/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/10-networking/0-start/.gitignore b/10-networking/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/10-networking/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/10-networking/1-end/.gitignore b/10-networking/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/10-networking/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/11-dependency-injection-with-environment-object/.gitignore b/11-dependency-injection-with-environment-object/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/11-dependency-injection-with-environment-object/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/11-dependency-injection-with-environment-object/0-start/.gitignore b/11-dependency-injection-with-environment-object/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/11-dependency-injection-with-environment-object/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/11-dependency-injection-with-environment-object/1-end/.gitignore b/11-dependency-injection-with-environment-object/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/11-dependency-injection-with-environment-object/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/12-spy/.gitignore b/12-spy/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/12-spy/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/12-spy/0-start/.gitignore b/12-spy/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/12-spy/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/12-spy/1-end/.gitignore b/12-spy/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/12-spy/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/13-testing-view-presentation/.gitignore b/13-testing-view-presentation/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/13-testing-view-presentation/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/13-testing-view-presentation/0-start/.gitignore b/13-testing-view-presentation/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/13-testing-view-presentation/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/13-testing-view-presentation/1-end/.gitignore b/13-testing-view-presentation/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/13-testing-view-presentation/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/14-fixing-bugs-and-changing-code/.gitignore b/14-fixing-bugs-and-changing-code/.gitignore deleted file mode 100644 index 4640ebb..0000000 --- a/14-fixing-bugs-and-changing-code/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.xcodeproj diff --git a/14-fixing-bugs-and-changing-code/0-start/.gitignore b/14-fixing-bugs-and-changing-code/0-start/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/14-fixing-bugs-and-changing-code/0-start/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/14-fixing-bugs-and-changing-code/1-end/.gitignore b/14-fixing-bugs-and-changing-code/1-end/.gitignore deleted file mode 100644 index f5ee019..0000000 --- a/14-fixing-bugs-and-changing-code/1-end/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - diff --git a/15-fake-and-dummy/0-start/.gitignore b/15-fake-and-dummy/0-start/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/15-fake-and-dummy/0-start/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.pbxproj b/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.pbxproj new file mode 100644 index 0000000..67a907e --- /dev/null +++ b/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.pbxproj @@ -0,0 +1,807 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7415549C09C4274D8CCFCC77 /* TestError.swift */; }; + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51B5F284ED8D04D444E045A /* MenuItem.swift */; }; + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8381D5EC52AEE8AD62901C /* Order.swift */; }; + 142E55512BCC01F76E6619BE /* OrderDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */; }; + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = A1C7645975C081584B83D893 /* HippoAnalytics */; }; + 226EEC8949476F310DD280D6 /* MenuItemDetail.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */; }; + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */; }; + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4292931534001B9214FC05 /* MenuFetcher.swift */; }; + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */; }; + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */; }; + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */ = {isa = PBXBuildFile; productRef = E4DA341A663094C9B76ED975 /* HippoPayments */; }; + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */ = {isa = PBXBuildFile; fileRef = D2424D0270A102DE67834630 /* menu_item.json */; }; + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */; }; + 418E360A5081788F4DCCEFB3 /* MenuRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */; }; + 4EA49FA5AF515BE2921D520C /* MenuList.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */; }; + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */; }; + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */; }; + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */; }; + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */; }; + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */; }; + 780C4AC5BA073670CDF0C802 /* Color+Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */; }; + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */; }; + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */; }; + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */; }; + 8CCEF233827037043C3CE766 /* Alert.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */; }; + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */; }; + 933814BD4D1718D1ED9F669E /* MenuItemDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */; }; + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */; }; + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */; }; + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */; }; + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */; }; + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */; }; + A7D49EF97B36875A6B0215F8 /* MenuRow.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */; }; + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */; }; + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */; }; + B3F8BD304D4C17EFD37A3F45 /* OrderDetail.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */; }; + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */; }; + BAB9DEE0C2BC90EA6E785B1F /* PaymentProcessingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */; }; + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */; }; + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */; }; + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */; }; + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */; }; + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */; }; + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */; }; + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */; }; + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */; }; + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E678AF65BE5E3636E405C7 /* MenuList.swift */; }; + F7EC63727BB23F3A58EEF9B4 /* OrderButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */; }; + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */; }; + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */; }; + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C29236D8792EE571561C6C1 /* MenuFetching.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E8B17C8ABC8471E4224D1C39 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5F9F9D2250AEB2D2EE0494B; + remoteInfo = Albertos; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemTests.swift; sourceTree = ""; }; + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderTests.swift; sourceTree = ""; }; + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetchingStub.swift; sourceTree = ""; }; + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessing.swift; sourceTree = ""; }; + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuSection+Fixture.swift"; sourceTree = ""; }; + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcherTests.swift; sourceTree = ""; }; + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.ViewModelTests.swift; sourceTree = ""; }; + 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingProxy.swift; sourceTree = ""; }; + 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Custom.swift"; sourceTree = ""; }; + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.ViewModelTests.swift; sourceTree = ""; }; + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetching.swift; sourceTree = ""; }; + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Order+HippoPayments.swift"; sourceTree = ""; }; + 38E678AF65BE5E3636E405C7 /* MenuList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.swift; sourceTree = ""; }; + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+JSONFixture.swift"; sourceTree = ""; }; + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+Fixture.swift"; sourceTree = ""; }; + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.ViewModelTests.swift; sourceTree = ""; }; + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Safe.swift"; sourceTree = ""; }; + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderControllerTests.swift; sourceTree = ""; }; + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoAnalytics; path = ../../Packages/HippoAnalytics; sourceTree = SOURCE_ROOT; }; + 7415549C09C4274D8CCFCC77 /* TestError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+JSON.swift"; sourceTree = ""; }; + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemAlternateJSONTests.swift; sourceTree = ""; }; + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoPayments; path = ../../Packages/HippoPayments; sourceTree = SOURCE_ROOT; }; + 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.ViewModel.swift; sourceTree = ""; }; + 823EEDCB67B487000A05DB62 /* Albertos.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Albertos.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButton.ViewModel.swift; sourceTree = ""; }; + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingStub.swift; sourceTree = ""; }; + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetching.swift; sourceTree = ""; }; + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGroupingTests.swift; sourceTree = ""; }; + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+NetworkFetching.swift"; sourceTree = ""; }; + AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.swift; sourceTree = ""; }; + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.ViewModelTests.swift; sourceTree = ""; }; + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetchingStub.swift; sourceTree = ""; }; + BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.swift; sourceTree = ""; }; + BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.ViewModel.swift; sourceTree = ""; }; + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = AlbertosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+Timeouts.swift"; sourceTree = ""; }; + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButtonViewModelTests.swift; sourceTree = ""; }; + D2424D0270A102DE67834630 /* menu_item.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = menu_item.json; sourceTree = ""; }; + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderController.swift; sourceTree = ""; }; + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingSpy.swift; sourceTree = ""; }; + D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.ViewModel.swift; sourceTree = ""; }; + DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.ViewModel.swift; sourceTree = ""; }; + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbertosApp.swift; sourceTree = ""; }; + E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.swift; sourceTree = ""; }; + E51B5F284ED8D04D444E045A /* MenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButton.swift; sourceTree = ""; }; + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuSection.swift; sourceTree = ""; }; + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGrouping.swift; sourceTree = ""; }; + FA4292931534001B9214FC05 /* MenuFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcher.swift; sourceTree = ""; }; + FA8381D5EC52AEE8AD62901C /* Order.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Order.swift; sourceTree = ""; }; + FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.ViewModel.swift; sourceTree = ""; }; + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HippoPaymentsProcessor+PaymentProcessing.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 976EEC1F85DA654336D7815E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */, + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0560AD3424758048A3A433C9 /* Albertos */ = { + isa = PBXGroup; + children = ( + BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */, + ); + name = Albertos; + path = "../../08-stub/1-end/Albertos"; + sourceTree = ""; + }; + 0BB75D973EA16C8867DCD068 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */, + ); + name = AlbertosTests; + path = "../../11-dependency-injection-with-environment-object/1-end/AlbertosTests"; + sourceTree = ""; + }; + 1089370477C43CD0924C27EA /* Albertos */ = { + isa = PBXGroup; + children = ( + E51B5F284ED8D04D444E045A /* MenuItem.swift */, + ); + name = Albertos; + path = "../../09-json-decoding/1-end/Albertos"; + sourceTree = ""; + }; + 115342909CD1A0EAF4A3125B /* Albertos */ = { + isa = PBXGroup; + children = ( + 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */, + ); + name = Albertos; + path = "../../11-dependency-injection-with-environment-object/0-start/Albertos"; + sourceTree = ""; + }; + 18550B0B0155037E0CA4A33D /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */, + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */, + ); + name = AlbertosTests; + path = "../../13-testing-view-presentation/1-end/AlbertosTests"; + sourceTree = ""; + }; + 23ACB16B0E88DB238D562E90 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */, + ); + name = AlbertosTests; + path = "../../11-dependency-injection-with-environment-object/0-start/AlbertosTests"; + sourceTree = ""; + }; + 5A34B853AF420876FC374AE1 /* Albertos */ = { + isa = PBXGroup; + children = ( + AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */, + DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */, + 38E678AF65BE5E3636E405C7 /* MenuList.swift */, + ); + name = Albertos; + path = "../../11-dependency-injection-with-environment-object/1-end/Albertos"; + sourceTree = ""; + }; + 5AA9638FB37A04075FDB6BBF /* Albertos */ = { + isa = PBXGroup; + children = ( + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */, + ); + name = Albertos; + path = "../../12-spy/0-start/Albertos"; + sourceTree = ""; + }; + 610DFD9158304B0567C4C959 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */, + 7415549C09C4274D8CCFCC77 /* TestError.swift */, + ); + name = AlbertosTests; + path = "../../08-stub/1-end/AlbertosTests"; + sourceTree = ""; + }; + 623D63D3705EE89055A94C12 /* Albertos */ = { + isa = PBXGroup; + children = ( + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */, + ); + name = Albertos; + path = "../../07-testing-dynamic-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + 6587589555E08BBEB63089E1 /* Sources */ = { + isa = PBXGroup; + children = ( + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */, + ); + name = Sources; + path = ../../Packages/CollectionSafe/Sources; + sourceTree = ""; + }; + 802824DAE2FE5EA864A24B56 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */, + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */, + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */, + ); + name = AlbertosTests; + path = "../../10-networking/1-end/AlbertosTests"; + sourceTree = ""; + }; + 814F0849D627BA240B0F8D84 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */, + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */, + ); + name = AlbertosTests; + path = "../../12-spy/1-end/AlbertosTests"; + sourceTree = ""; + }; + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */, + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */, + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */, + ); + name = AlbertosTests; + path = "../../06-testing-static-swiftui-views/1-end/AlbertosTests"; + sourceTree = ""; + }; + 8D972551E420DEE0F670E89F /* Albertos */ = { + isa = PBXGroup; + children = ( + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */, + ); + name = Albertos; + path = "../../04-tdd-in-the-real-world/1-end/Albertos"; + sourceTree = ""; + }; + 92B90574F9FA63884D9D7BBF = { + isa = PBXGroup; + children = ( + 8D972551E420DEE0F670E89F /* Albertos */, + D9B63447692F960F19829F9B /* Albertos */, + 623D63D3705EE89055A94C12 /* Albertos */, + 0560AD3424758048A3A433C9 /* Albertos */, + 1089370477C43CD0924C27EA /* Albertos */, + DD3B74CA50EB6E5F084850EF /* Albertos */, + 115342909CD1A0EAF4A3125B /* Albertos */, + 5A34B853AF420876FC374AE1 /* Albertos */, + 5AA9638FB37A04075FDB6BBF /* Albertos */, + C8FA1DB4707A86998BDD3F99 /* Albertos */, + B95C2AEA9DF45D24D635ACED /* Albertos */, + E8AB92E07081D049054B3882 /* Albertos */, + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */, + 610DFD9158304B0567C4C959 /* AlbertosTests */, + DB59F414D6282A4AE9C2F693 /* AlbertosTests */, + 802824DAE2FE5EA864A24B56 /* AlbertosTests */, + 23ACB16B0E88DB238D562E90 /* AlbertosTests */, + 0BB75D973EA16C8867DCD068 /* AlbertosTests */, + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */, + 814F0849D627BA240B0F8D84 /* AlbertosTests */, + 18550B0B0155037E0CA4A33D /* AlbertosTests */, + F7E9F479AC9C201D2C8ABE24 /* AlbertosTests */, + D298843BDFC7FEE66A144DE6 /* Packages */, + 6587589555E08BBEB63089E1 /* Sources */, + A0D81A2A2581F3DF42D52538 /* Products */, + ); + sourceTree = ""; + }; + A0D81A2A2581F3DF42D52538 /* Products */ = { + isa = PBXGroup; + children = ( + 823EEDCB67B487000A05DB62 /* Albertos.app */, + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + B95C2AEA9DF45D24D635ACED /* Albertos */ = { + isa = PBXGroup; + children = ( + D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */, + E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */, + E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */, + ); + name = Albertos; + path = "../../13-testing-view-presentation/1-end/Albertos"; + sourceTree = ""; + }; + C8FA1DB4707A86998BDD3F99 /* Albertos */ = { + isa = PBXGroup; + children = ( + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */, + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */, + FA8381D5EC52AEE8AD62901C /* Order.swift */, + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */, + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */, + 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */, + ); + name = Albertos; + path = "../../12-spy/1-end/Albertos"; + sourceTree = ""; + }; + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */, + ); + name = AlbertosTests; + path = "../../12-spy/0-start/AlbertosTests"; + sourceTree = ""; + }; + D298843BDFC7FEE66A144DE6 /* Packages */ = { + isa = PBXGroup; + children = ( + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */, + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */, + ); + name = Packages; + sourceTree = ""; + }; + D9B63447692F960F19829F9B /* Albertos */ = { + isa = PBXGroup; + children = ( + BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */, + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */, + ); + name = Albertos; + path = "../../06-testing-static-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + DB59F414D6282A4AE9C2F693 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + D2424D0270A102DE67834630 /* menu_item.json */, + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */, + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */, + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */, + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */, + ); + name = AlbertosTests; + path = "../../09-json-decoding/1-end/AlbertosTests"; + sourceTree = ""; + }; + DD3B74CA50EB6E5F084850EF /* Albertos */ = { + isa = PBXGroup; + children = ( + FA4292931534001B9214FC05 /* MenuFetcher.swift */, + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */, + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */, + ); + name = Albertos; + path = "../../10-networking/1-end/Albertos"; + sourceTree = ""; + }; + E8AB92E07081D049054B3882 /* Albertos */ = { + isa = PBXGroup; + children = ( + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */, + FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */, + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */, + 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */, + ); + name = Albertos; + path = "../../14-fixing-bugs-and-changing-code/1-end/Albertos"; + sourceTree = ""; + }; + F7E9F479AC9C201D2C8ABE24 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */, + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */, + ); + name = AlbertosTests; + path = "../../14-fixing-bugs-and-changing-code/1-end/AlbertosTests"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33D869CEA8CD44DF60039E52 /* AlbertosTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */; + buildPhases = ( + C099BFE9ACD985A8EDF284EA /* Sources */, + 4D9ABFE10A474D5655D092BE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */, + ); + name = AlbertosTests; + productName = AlbertosTests; + productReference = BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B5F9F9D2250AEB2D2EE0494B /* Albertos */ = { + isa = PBXNativeTarget; + buildConfigurationList = 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */; + buildPhases = ( + 2B3D01A98BE73618C91FF57C /* Sources */, + 976EEC1F85DA654336D7815E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Albertos; + packageProductDependencies = ( + E4DA341A663094C9B76ED975 /* HippoPayments */, + A1C7645975C081584B83D893 /* HippoAnalytics */, + ); + productName = Albertos; + productReference = 823EEDCB67B487000A05DB62 /* Albertos.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E8B17C8ABC8471E4224D1C39 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 92B90574F9FA63884D9D7BBF; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B5F9F9D2250AEB2D2EE0494B /* Albertos */, + 33D869CEA8CD44DF60039E52 /* AlbertosTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4D9ABFE10A474D5655D092BE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2B3D01A98BE73618C91FF57C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */, + 8CCEF233827037043C3CE766 /* Alert.ViewModel.swift in Sources */, + 780C4AC5BA073670CDF0C802 /* Color+Custom.swift in Sources */, + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */, + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */, + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */, + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */, + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */, + 226EEC8949476F310DD280D6 /* MenuItemDetail.ViewModel.swift in Sources */, + 933814BD4D1718D1ED9F669E /* MenuItemDetail.swift in Sources */, + 4EA49FA5AF515BE2921D520C /* MenuList.ViewModel.swift in Sources */, + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */, + A7D49EF97B36875A6B0215F8 /* MenuRow.ViewModel.swift in Sources */, + 418E360A5081788F4DCCEFB3 /* MenuRow.swift in Sources */, + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */, + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */, + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */, + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */, + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */, + F7EC63727BB23F3A58EEF9B4 /* OrderButton.swift in Sources */, + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */, + B3F8BD304D4C17EFD37A3F45 /* OrderDetail.ViewModel.swift in Sources */, + 142E55512BCC01F76E6619BE /* OrderDetail.swift in Sources */, + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */, + BAB9DEE0C2BC90EA6E785B1F /* PaymentProcessingProxy.swift in Sources */, + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C099BFE9ACD985A8EDF284EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */, + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */, + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */, + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */, + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */, + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */, + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */, + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */, + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */, + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */, + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */, + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */, + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */, + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */, + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */, + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */, + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */, + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */, + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */, + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */, + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */, + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B5F9F9D2250AEB2D2EE0494B /* Albertos */; + targetProxy = 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 068E7B265A85A0D164E026DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Release; + }; + 1D797AB11DACDB9E4B218C54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Debug; + }; + 60C5F61655CE71EFE9017DDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 924F1451F334BAAEFDFDAD7C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "../../14-fixing-bugs-and-changing-code/1-end/Albertos/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + D6F337C2184F1D0A465FC2BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EC39A2F770A854AABF6204BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "../../14-fixing-bugs-and-changing-code/1-end/Albertos/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6F337C2184F1D0A465FC2BA /* Debug */, + 60C5F61655CE71EFE9017DDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC39A2F770A854AABF6204BC /* Debug */, + 924F1451F334BAAEFDFDAD7C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D797AB11DACDB9E4B218C54 /* Debug */, + 068E7B265A85A0D164E026DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A1C7645975C081584B83D893 /* HippoAnalytics */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoAnalytics; + }; + E4DA341A663094C9B76ED975 /* HippoPayments */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoPayments; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = E8B17C8ABC8471E4224D1C39 /* Project object */; +} diff --git a/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/15-fake-and-dummy/0-start/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/15-fake-and-dummy/0-start/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme b/15-fake-and-dummy/0-start/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme new file mode 100644 index 0000000..625bb4c --- /dev/null +++ b/15-fake-and-dummy/0-start/Albertos.xcodeproj/xcshareddata/xcschemes/Albertos.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/15-fake-and-dummy/1-end/.gitignore b/15-fake-and-dummy/1-end/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/15-fake-and-dummy/1-end/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.pbxproj b/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ba4a663 --- /dev/null +++ b/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.pbxproj @@ -0,0 +1,803 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7415549C09C4274D8CCFCC77 /* TestError.swift */; }; + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51B5F284ED8D04D444E045A /* MenuItem.swift */; }; + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8381D5EC52AEE8AD62901C /* Order.swift */; }; + 142E55512BCC01F76E6619BE /* OrderDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */; }; + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = A1C7645975C081584B83D893 /* HippoAnalytics */; }; + 226EEC8949476F310DD280D6 /* MenuItemDetail.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */; }; + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */; }; + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4292931534001B9214FC05 /* MenuFetcher.swift */; }; + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */; }; + 2CE5477919484069C04F4DB8 /* UserDefaults+OrderStoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */; }; + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */; }; + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */ = {isa = PBXBuildFile; productRef = E4DA341A663094C9B76ED975 /* HippoPayments */; }; + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */ = {isa = PBXBuildFile; fileRef = D2424D0270A102DE67834630 /* menu_item.json */; }; + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */; }; + 418E360A5081788F4DCCEFB3 /* MenuRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */; }; + 4723B6368E44839B144C6763 /* OrderStoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9869FEAEED2E853728663B /* OrderStoring.swift */; }; + 4EA49FA5AF515BE2921D520C /* MenuList.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */; }; + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */; }; + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */; }; + 5ED86F4FF8C7DE0E71C461B1 /* OrderStoringFake.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */; }; + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */; }; + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */; }; + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */; }; + 780C4AC5BA073670CDF0C802 /* Color+Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */; }; + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */; }; + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */; }; + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */; }; + 82F3DCE56B57C47611121CA6 /* PaymentProcessingDummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */; }; + 8CCEF233827037043C3CE766 /* Alert.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */; }; + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */; }; + 933814BD4D1718D1ED9F669E /* MenuItemDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */; }; + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */; }; + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */; }; + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */; }; + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */; }; + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */; }; + A7D49EF97B36875A6B0215F8 /* MenuRow.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */; }; + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */; }; + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */; }; + B3F8BD304D4C17EFD37A3F45 /* OrderDetail.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */; }; + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */; }; + BAB9DEE0C2BC90EA6E785B1F /* PaymentProcessingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */; }; + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */; }; + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */; }; + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */; }; + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */; }; + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */; }; + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */; }; + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */; }; + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */; }; + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E678AF65BE5E3636E405C7 /* MenuList.swift */; }; + F7EC63727BB23F3A58EEF9B4 /* OrderButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */; }; + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */; }; + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */; }; + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C29236D8792EE571561C6C1 /* MenuFetching.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E8B17C8ABC8471E4224D1C39 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5F9F9D2250AEB2D2EE0494B; + remoteInfo = Albertos; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemTests.swift; sourceTree = ""; }; + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderTests.swift; sourceTree = ""; }; + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetchingStub.swift; sourceTree = ""; }; + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessing.swift; sourceTree = ""; }; + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuSection+Fixture.swift"; sourceTree = ""; }; + 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStoringFake.swift; sourceTree = ""; }; + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcherTests.swift; sourceTree = ""; }; + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.ViewModelTests.swift; sourceTree = ""; }; + 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingProxy.swift; sourceTree = ""; }; + 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Custom.swift"; sourceTree = ""; }; + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.ViewModelTests.swift; sourceTree = ""; }; + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetching.swift; sourceTree = ""; }; + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Order+HippoPayments.swift"; sourceTree = ""; }; + 38E678AF65BE5E3636E405C7 /* MenuList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.swift; sourceTree = ""; }; + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+JSONFixture.swift"; sourceTree = ""; }; + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+Fixture.swift"; sourceTree = ""; }; + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.ViewModelTests.swift; sourceTree = ""; }; + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Safe.swift"; sourceTree = ""; }; + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderControllerTests.swift; sourceTree = ""; }; + 6D9869FEAEED2E853728663B /* OrderStoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStoring.swift; sourceTree = ""; }; + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoAnalytics; path = ../../Packages/HippoAnalytics; sourceTree = SOURCE_ROOT; }; + 7415549C09C4274D8CCFCC77 /* TestError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+JSON.swift"; sourceTree = ""; }; + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemAlternateJSONTests.swift; sourceTree = ""; }; + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoPayments; path = ../../Packages/HippoPayments; sourceTree = SOURCE_ROOT; }; + 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.ViewModel.swift; sourceTree = ""; }; + 823EEDCB67B487000A05DB62 /* Albertos.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Albertos.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+OrderStoring.swift"; sourceTree = ""; }; + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButton.ViewModel.swift; sourceTree = ""; }; + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingStub.swift; sourceTree = ""; }; + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetching.swift; sourceTree = ""; }; + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGroupingTests.swift; sourceTree = ""; }; + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+NetworkFetching.swift"; sourceTree = ""; }; + AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.swift; sourceTree = ""; }; + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.ViewModelTests.swift; sourceTree = ""; }; + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetchingStub.swift; sourceTree = ""; }; + BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.swift; sourceTree = ""; }; + BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.ViewModel.swift; sourceTree = ""; }; + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = AlbertosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+Timeouts.swift"; sourceTree = ""; }; + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButtonViewModelTests.swift; sourceTree = ""; }; + D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingDummy.swift; sourceTree = ""; }; + D2424D0270A102DE67834630 /* menu_item.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = menu_item.json; sourceTree = ""; }; + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderController.swift; sourceTree = ""; }; + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingSpy.swift; sourceTree = ""; }; + D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.ViewModel.swift; sourceTree = ""; }; + DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.ViewModel.swift; sourceTree = ""; }; + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbertosApp.swift; sourceTree = ""; }; + E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.swift; sourceTree = ""; }; + E51B5F284ED8D04D444E045A /* MenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButton.swift; sourceTree = ""; }; + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuSection.swift; sourceTree = ""; }; + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGrouping.swift; sourceTree = ""; }; + FA4292931534001B9214FC05 /* MenuFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcher.swift; sourceTree = ""; }; + FA8381D5EC52AEE8AD62901C /* Order.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Order.swift; sourceTree = ""; }; + FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.ViewModel.swift; sourceTree = ""; }; + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HippoPaymentsProcessor+PaymentProcessing.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 976EEC1F85DA654336D7815E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */, + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0560AD3424758048A3A433C9 /* Albertos */ = { + isa = PBXGroup; + children = ( + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */, + ); + name = Albertos; + path = "../../07-testing-dynamic-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + 0BB75D973EA16C8867DCD068 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */, + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */, + ); + name = AlbertosTests; + path = "../../12-spy/1-end/AlbertosTests"; + sourceTree = ""; + }; + 1089370477C43CD0924C27EA /* Albertos */ = { + isa = PBXGroup; + children = ( + BD4253D513637E0AAE27D6CF /* MenuList.ViewModel.swift */, + ); + name = Albertos; + path = "../../08-stub/1-end/Albertos"; + sourceTree = ""; + }; + 115342909CD1A0EAF4A3125B /* Albertos */ = { + isa = PBXGroup; + children = ( + 23FAD24A78C9DA66DB9AF326 /* Color+Custom.swift */, + ); + name = Albertos; + path = "../../11-dependency-injection-with-environment-object/0-start/Albertos"; + sourceTree = ""; + }; + 23ACB16B0E88DB238D562E90 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */, + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */, + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */, + ); + name = AlbertosTests; + path = "../../10-networking/1-end/AlbertosTests"; + sourceTree = ""; + }; + 5A34B853AF420876FC374AE1 /* Albertos */ = { + isa = PBXGroup; + children = ( + AB25E45EE54DF3CD4374444F /* MenuItemDetail.swift */, + DACB11387FDF655295A1EF5D /* MenuItemDetail.ViewModel.swift */, + ); + name = Albertos; + path = "../../11-dependency-injection-with-environment-object/1-end/Albertos"; + sourceTree = ""; + }; + 5AA9638FB37A04075FDB6BBF /* Albertos */ = { + isa = PBXGroup; + children = ( + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */, + ); + name = Albertos; + path = "../../12-spy/0-start/Albertos"; + sourceTree = ""; + }; + 610DFD9158304B0567C4C959 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */, + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */, + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */, + ); + name = AlbertosTests; + path = "../../06-testing-static-swiftui-views/1-end/AlbertosTests"; + sourceTree = ""; + }; + 623D63D3705EE89055A94C12 /* Albertos */ = { + isa = PBXGroup; + children = ( + BCF95E9CB8962AFFF16D3FB9 /* MenuRow.swift */, + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */, + ); + name = Albertos; + path = "../../06-testing-static-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + 6587589555E08BBEB63089E1 /* Sources */ = { + isa = PBXGroup; + children = ( + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */, + ); + name = Sources; + path = ../../Packages/CollectionSafe/Sources; + sourceTree = ""; + }; + 802824DAE2FE5EA864A24B56 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + D2424D0270A102DE67834630 /* menu_item.json */, + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */, + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */, + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */, + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */, + ); + name = AlbertosTests; + path = "../../09-json-decoding/1-end/AlbertosTests"; + sourceTree = ""; + }; + 814F0849D627BA240B0F8D84 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */, + ); + name = AlbertosTests; + path = "../../14-fixing-bugs-and-changing-code/1-end/AlbertosTests"; + sourceTree = ""; + }; + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */, + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */, + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */, + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */, + 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */, + D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */, + ); + path = AlbertosTests; + sourceTree = ""; + }; + 8D972551E420DEE0F670E89F /* Albertos */ = { + isa = PBXGroup; + children = ( + E5C5903BDB22A99A4B3DC3C8 /* Info.plist */, + E51B5F284ED8D04D444E045A /* MenuItem.swift */, + 38E678AF65BE5E3636E405C7 /* MenuList.swift */, + FA8381D5EC52AEE8AD62901C /* Order.swift */, + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */, + 6D9869FEAEED2E853728663B /* OrderStoring.swift */, + 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */, + ); + path = Albertos; + sourceTree = ""; + }; + 92B90574F9FA63884D9D7BBF = { + isa = PBXGroup; + children = ( + 8D972551E420DEE0F670E89F /* Albertos */, + D9B63447692F960F19829F9B /* Albertos */, + 623D63D3705EE89055A94C12 /* Albertos */, + 0560AD3424758048A3A433C9 /* Albertos */, + 1089370477C43CD0924C27EA /* Albertos */, + DD3B74CA50EB6E5F084850EF /* Albertos */, + 115342909CD1A0EAF4A3125B /* Albertos */, + 5A34B853AF420876FC374AE1 /* Albertos */, + 5AA9638FB37A04075FDB6BBF /* Albertos */, + C8FA1DB4707A86998BDD3F99 /* Albertos */, + B95C2AEA9DF45D24D635ACED /* Albertos */, + E8AB92E07081D049054B3882 /* Albertos */, + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */, + 610DFD9158304B0567C4C959 /* AlbertosTests */, + DB59F414D6282A4AE9C2F693 /* AlbertosTests */, + 802824DAE2FE5EA864A24B56 /* AlbertosTests */, + 23ACB16B0E88DB238D562E90 /* AlbertosTests */, + 0BB75D973EA16C8867DCD068 /* AlbertosTests */, + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */, + 814F0849D627BA240B0F8D84 /* AlbertosTests */, + D298843BDFC7FEE66A144DE6 /* Packages */, + 6587589555E08BBEB63089E1 /* Sources */, + A0D81A2A2581F3DF42D52538 /* Products */, + ); + sourceTree = ""; + }; + A0D81A2A2581F3DF42D52538 /* Products */ = { + isa = PBXGroup; + children = ( + 823EEDCB67B487000A05DB62 /* Albertos.app */, + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + B95C2AEA9DF45D24D635ACED /* Albertos */ = { + isa = PBXGroup; + children = ( + D7F33AFCF39D65227624637B /* Alert.ViewModel.swift */, + E8D8E9C4F9C83E8473793F47 /* OrderButton.swift */, + E2F6ABED8B7DE5C3B2201BFE /* OrderDetail.swift */, + ); + name = Albertos; + path = "../../13-testing-view-presentation/1-end/Albertos"; + sourceTree = ""; + }; + C8FA1DB4707A86998BDD3F99 /* Albertos */ = { + isa = PBXGroup; + children = ( + E231812A9BEA82FE13B6DDE3 /* AlbertosApp.swift */, + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */, + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */, + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */, + 2131B9C900C82687F26D7897 /* PaymentProcessingProxy.swift */, + ); + name = Albertos; + path = "../../12-spy/1-end/Albertos"; + sourceTree = ""; + }; + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */, + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */, + ); + name = AlbertosTests; + path = "../../13-testing-view-presentation/1-end/AlbertosTests"; + sourceTree = ""; + }; + D298843BDFC7FEE66A144DE6 /* Packages */ = { + isa = PBXGroup; + children = ( + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */, + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */, + ); + name = Packages; + sourceTree = ""; + }; + D9B63447692F960F19829F9B /* Albertos */ = { + isa = PBXGroup; + children = ( + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */, + ); + name = Albertos; + path = "../../04-tdd-in-the-real-world/1-end/Albertos"; + sourceTree = ""; + }; + DB59F414D6282A4AE9C2F693 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */, + 7415549C09C4274D8CCFCC77 /* TestError.swift */, + ); + name = AlbertosTests; + path = "../../08-stub/1-end/AlbertosTests"; + sourceTree = ""; + }; + DD3B74CA50EB6E5F084850EF /* Albertos */ = { + isa = PBXGroup; + children = ( + FA4292931534001B9214FC05 /* MenuFetcher.swift */, + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */, + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */, + ); + name = Albertos; + path = "../../10-networking/1-end/Albertos"; + sourceTree = ""; + }; + E8AB92E07081D049054B3882 /* Albertos */ = { + isa = PBXGroup; + children = ( + FADB2F629C4815BE8ACA7FA7 /* MenuRow.ViewModel.swift */, + 7EF87C1C7736BAD96EF36D48 /* OrderDetail.ViewModel.swift */, + ); + name = Albertos; + path = "../../14-fixing-bugs-and-changing-code/1-end/Albertos"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33D869CEA8CD44DF60039E52 /* AlbertosTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */; + buildPhases = ( + C099BFE9ACD985A8EDF284EA /* Sources */, + 4D9ABFE10A474D5655D092BE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */, + ); + name = AlbertosTests; + productName = AlbertosTests; + productReference = BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B5F9F9D2250AEB2D2EE0494B /* Albertos */ = { + isa = PBXNativeTarget; + buildConfigurationList = 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */; + buildPhases = ( + 2B3D01A98BE73618C91FF57C /* Sources */, + 976EEC1F85DA654336D7815E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Albertos; + packageProductDependencies = ( + E4DA341A663094C9B76ED975 /* HippoPayments */, + A1C7645975C081584B83D893 /* HippoAnalytics */, + ); + productName = Albertos; + productReference = 823EEDCB67B487000A05DB62 /* Albertos.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E8B17C8ABC8471E4224D1C39 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 92B90574F9FA63884D9D7BBF; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B5F9F9D2250AEB2D2EE0494B /* Albertos */, + 33D869CEA8CD44DF60039E52 /* AlbertosTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4D9ABFE10A474D5655D092BE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2B3D01A98BE73618C91FF57C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAD605E22BB4D10BF3F39DA8 /* AlbertosApp.swift in Sources */, + 8CCEF233827037043C3CE766 /* Alert.ViewModel.swift in Sources */, + 780C4AC5BA073670CDF0C802 /* Color+Custom.swift in Sources */, + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */, + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */, + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */, + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */, + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */, + 226EEC8949476F310DD280D6 /* MenuItemDetail.ViewModel.swift in Sources */, + 933814BD4D1718D1ED9F669E /* MenuItemDetail.swift in Sources */, + 4EA49FA5AF515BE2921D520C /* MenuList.ViewModel.swift in Sources */, + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */, + A7D49EF97B36875A6B0215F8 /* MenuRow.ViewModel.swift in Sources */, + 418E360A5081788F4DCCEFB3 /* MenuRow.swift in Sources */, + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */, + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */, + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */, + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */, + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */, + F7EC63727BB23F3A58EEF9B4 /* OrderButton.swift in Sources */, + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */, + B3F8BD304D4C17EFD37A3F45 /* OrderDetail.ViewModel.swift in Sources */, + 142E55512BCC01F76E6619BE /* OrderDetail.swift in Sources */, + 4723B6368E44839B144C6763 /* OrderStoring.swift in Sources */, + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */, + BAB9DEE0C2BC90EA6E785B1F /* PaymentProcessingProxy.swift in Sources */, + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */, + 2CE5477919484069C04F4DB8 /* UserDefaults+OrderStoring.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C099BFE9ACD985A8EDF284EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */, + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */, + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */, + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */, + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */, + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */, + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */, + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */, + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */, + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */, + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */, + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */, + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */, + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */, + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */, + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */, + 5ED86F4FF8C7DE0E71C461B1 /* OrderStoringFake.swift in Sources */, + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */, + 82F3DCE56B57C47611121CA6 /* PaymentProcessingDummy.swift in Sources */, + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */, + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */, + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */, + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */, + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B5F9F9D2250AEB2D2EE0494B /* Albertos */; + targetProxy = 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 068E7B265A85A0D164E026DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Release; + }; + 1D797AB11DACDB9E4B218C54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Debug; + }; + 60C5F61655CE71EFE9017DDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 924F1451F334BAAEFDFDAD7C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = Albertos/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + D6F337C2184F1D0A465FC2BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EC39A2F770A854AABF6204BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = Albertos/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6F337C2184F1D0A465FC2BA /* Debug */, + 60C5F61655CE71EFE9017DDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC39A2F770A854AABF6204BC /* Debug */, + 924F1451F334BAAEFDFDAD7C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D797AB11DACDB9E4B218C54 /* Debug */, + 068E7B265A85A0D164E026DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A1C7645975C081584B83D893 /* HippoAnalytics */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoAnalytics; + }; + E4DA341A663094C9B76ED975 /* HippoPayments */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoPayments; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = E8B17C8ABC8471E4224D1C39 /* Project object */; +} diff --git a/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate b/15-fake-and-dummy/1-end/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..3e434434c4ffc9d306248bb443fbbf8fd61b8172 GIT binary patch literal 55691 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/15-fake-and-dummy/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist b/15-fake-and-dummy/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..86089fb --- /dev/null +++ b/15-fake-and-dummy/1-end/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,24 @@ + + + + + SchemeUserState + + Albertos.xcscheme_^#shared#^_ + + orderHint + 0 + + HippoAnalytics.xcscheme_^#shared#^_ + + orderHint + 1 + + HippoPayments.xcscheme_^#shared#^_ + + orderHint + 2 + + + + diff --git a/17-appendix-b-nimble-only/.gitignore b/17-appendix-b-nimble-only/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/17-appendix-b-nimble-only/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/18-appendix-b-quick-and-nimble/.gitignore b/18-appendix-b-quick-and-nimble/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/18-appendix-b-quick-and-nimble/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/19-appendix-c-uikit/.gitignore b/19-appendix-c-uikit/.gitignore deleted file mode 100644 index 0f22386..0000000 --- a/19-appendix-c-uikit/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -#### joe made this: https://goel.io/joe - -#####=== Swift ===##### - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Pods/ - -*.xcodeproj diff --git a/19-appendix-c-uikit/Albertos.xcodeproj/project.pbxproj b/19-appendix-c-uikit/Albertos.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0ebf74c --- /dev/null +++ b/19-appendix-c-uikit/Albertos.xcodeproj/project.pbxproj @@ -0,0 +1,863 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 04C378BF8E1E01A319707838 /* Collection+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */; }; + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7415549C09C4274D8CCFCC77 /* TestError.swift */; }; + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51B5F284ED8D04D444E045A /* MenuItem.swift */; }; + 0A6E7E283A595F21FBEB04DE /* AppCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98DD8EC578114A25574829BF /* AppCoordinatorTests.swift */; }; + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8381D5EC52AEE8AD62901C /* Order.swift */; }; + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = A1C7645975C081584B83D893 /* HippoAnalytics */; }; + 21CAEB263BFD3D7B6F0D4F08 /* OrderDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF5FFF3921ABEBD8A67232A /* OrderDetailViewModel.swift */; }; + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */; }; + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4292931534001B9214FC05 /* MenuFetcher.swift */; }; + 29101E13108C884C459526CD /* MenuItemDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FDCBD1DF45F7EE65A66691 /* MenuItemDetailViewController.swift */; }; + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */; }; + 2ADAE45912459DFF5FFF1304 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 34F8A6BCB50934E2E744EBE9 /* Nimble */; }; + 2CE5477919484069C04F4DB8 /* UserDefaults+OrderStoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */; }; + 2ED641F33327266A500061F7 /* MeunListTableViewDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CCD1ACEEEA7F71C336D8C2D /* MeunListTableViewDelegateTests.swift */; }; + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */; }; + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */ = {isa = PBXBuildFile; productRef = E4DA341A663094C9B76ED975 /* HippoPayments */; }; + 363CBC894DBF689F25A4ED16 /* UIFont+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858EE294EEF02D5B6DCF1BF3 /* UIFont+Utils.swift */; }; + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */ = {isa = PBXBuildFile; fileRef = D2424D0270A102DE67834630 /* menu_item.json */; }; + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */; }; + 420337AB5BAB9429B22E27CE /* AlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BB2C4BE59959A3DEAE67B3 /* AlertViewModel.swift */; }; + 43E91F57C7F85EE9A82599DC /* MenuItemDetailViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C12289A0D103BC85248ADD /* MenuItemDetailViewTests.swift */; }; + 451A7E0A42CFBCBF25629AB3 /* MenuItemDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E9A053961EA4012DC82365E /* MenuItemDetailView.swift */; }; + 4723B6368E44839B144C6763 /* OrderStoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9869FEAEED2E853728663B /* OrderStoring.swift */; }; + 4B2E7EC070E04ABFCE2C8D26 /* MenuItemDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C73A5583A97A45A668E83D /* MenuItemDetailViewModel.swift */; }; + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */; }; + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */; }; + 5ED86F4FF8C7DE0E71C461B1 /* OrderStoringFake.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */; }; + 5FE042375496A008C5ADC64D /* MenuListTableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B722D06B4B39F344FD4A81D8 /* MenuListTableViewDelegate.swift */; }; + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */; }; + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */; }; + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */; }; + 70323886C0C07B8479B4DB19 /* OrderDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75037602ABE320D3619E5B75 /* OrderDetailViewController.swift */; }; + 727185695D29ECAFF9D5ABD0 /* MenuRowViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA6323757FC15B622B0B86D /* MenuRowViewModel.swift */; }; + 72DDE0D9D1F25D443BB10C1A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C507EDE6836AB38573A45D /* AppDelegate.swift */; }; + 7B32439B4ACE34E580BBF496 /* MenuListTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C4B92FD364569E573412DA /* MenuListTableViewDataSource.swift */; }; + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */; }; + 7E6263654C074E5D5C21FD8B /* MenuItemDetailViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C761A4EBCBCD18DAD5C8D69 /* MenuItemDetailViewControllerTests.swift */; }; + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */; }; + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */; }; + 82F3DCE56B57C47611121CA6 /* PaymentProcessingDummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */; }; + 882BFA2C9C53B919DBFEE08D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD50FC921D1FB3B658D8847C /* SceneDelegate.swift */; }; + 8DCED4000A587EA928537850 /* MenuListTableViewDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD74F497CC0C6AE7F2938A20 /* MenuListTableViewDataSourceTests.swift */; }; + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */; }; + 93EBC3F7932F03B8C184DAB0 /* MenuListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8011D4D40A9961373BF7E42 /* MenuListViewController.swift */; }; + 9BEE4D8C5A515780B2DA5FE6 /* UIView+AutoLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB649B4BFE20C170B935EA8D /* UIView+AutoLayout.swift */; }; + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */; }; + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */; }; + 9FF9DD6FA84C81164D4B71D0 /* UIButton+BigButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83C07B61990FC0EDF9A52E8 /* UIButton+BigButtonStyle.swift */; }; + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */; }; + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */; }; + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */; }; + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */; }; + AF9FF4A099156E882C5358A9 /* UIColor+Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAB46D6E7F1ABF93B8F33E9 /* UIColor+Custom.swift */; }; + B36547A03718CCC9ED9A8FE2 /* AppCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10EB1E9E60AE99753C358562 /* AppCoordinator.swift */; }; + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */; }; + B8E9D4EB24784E24EEE1DCB9 /* MenuListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63C615DC155947C2ADA0D58A /* MenuListViewModel.swift */; }; + C34F443201A8C842CDD10D3D /* SceneDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43D70605F6CEC33D2238D93E /* SceneDelegateTests.swift */; }; + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */; }; + CDCA5B8F5EB3FED804BF6A04 /* UITableViewFooterLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8159A5688255D31E3CDB372 /* UITableViewFooterLabel.swift */; }; + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */; }; + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */; }; + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */; }; + DB5612B7B536AF211EF7ABA3 /* MenuListViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2239C164CC6A4E6C640F555B /* MenuListViewControllerTests.swift */; }; + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */; }; + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */; }; + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */; }; + EABF936007EFF66CCC51D4DA /* UIViewControllerPresenting.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE19930A67D49607DD71C381 /* UIViewControllerPresenting.swift */; }; + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */; }; + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E678AF65BE5E3636E405C7 /* MenuList.swift */; }; + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */; }; + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */; }; + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C29236D8792EE571561C6C1 /* MenuFetching.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E8B17C8ABC8471E4224D1C39 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5F9F9D2250AEB2D2EE0494B; + remoteInfo = Albertos; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemTests.swift; sourceTree = ""; }; + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderTests.swift; sourceTree = ""; }; + 04BB2C4BE59959A3DEAE67B3 /* AlertViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertViewModel.swift; sourceTree = ""; }; + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetchingStub.swift; sourceTree = ""; }; + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessing.swift; sourceTree = ""; }; + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuSection+Fixture.swift"; sourceTree = ""; }; + 0EA6323757FC15B622B0B86D /* MenuRowViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRowViewModel.swift; sourceTree = ""; }; + 0EAB46D6E7F1ABF93B8F33E9 /* UIColor+Custom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Custom.swift"; sourceTree = ""; }; + 10EB1E9E60AE99753C358562 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = ""; }; + 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStoringFake.swift; sourceTree = ""; }; + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcherTests.swift; sourceTree = ""; }; + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuRow.ViewModelTests.swift; sourceTree = ""; }; + 1C761A4EBCBCD18DAD5C8D69 /* MenuItemDetailViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetailViewControllerTests.swift; sourceTree = ""; }; + 2239C164CC6A4E6C640F555B /* MenuListViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListViewControllerTests.swift; sourceTree = ""; }; + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetail.ViewModelTests.swift; sourceTree = ""; }; + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetching.swift; sourceTree = ""; }; + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Order+HippoPayments.swift"; sourceTree = ""; }; + 37C4B92FD364569E573412DA /* MenuListTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListTableViewDataSource.swift; sourceTree = ""; }; + 38E678AF65BE5E3636E405C7 /* MenuList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.swift; sourceTree = ""; }; + 3E9A053961EA4012DC82365E /* MenuItemDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetailView.swift; sourceTree = ""; }; + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+JSONFixture.swift"; sourceTree = ""; }; + 43D70605F6CEC33D2238D93E /* SceneDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegateTests.swift; sourceTree = ""; }; + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MenuItem+Fixture.swift"; sourceTree = ""; }; + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuList.ViewModelTests.swift; sourceTree = ""; }; + 60FDCBD1DF45F7EE65A66691 /* MenuItemDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetailViewController.swift; sourceTree = ""; }; + 63C615DC155947C2ADA0D58A /* MenuListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListViewModel.swift; sourceTree = ""; }; + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Safe.swift"; sourceTree = ""; }; + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderControllerTests.swift; sourceTree = ""; }; + 6D9869FEAEED2E853728663B /* OrderStoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStoring.swift; sourceTree = ""; }; + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoAnalytics; path = ../Packages/HippoAnalytics; sourceTree = SOURCE_ROOT; }; + 7415549C09C4274D8CCFCC77 /* TestError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestError.swift; sourceTree = ""; }; + 75037602ABE320D3619E5B75 /* OrderDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetailViewController.swift; sourceTree = ""; }; + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+JSON.swift"; sourceTree = ""; }; + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemAlternateJSONTests.swift; sourceTree = ""; }; + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */ = {isa = PBXFileReference; lastKnownFileType = folder; name = HippoPayments; path = ../Packages/HippoPayments; sourceTree = SOURCE_ROOT; }; + 823EEDCB67B487000A05DB62 /* Albertos.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Albertos.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+OrderStoring.swift"; sourceTree = ""; }; + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButton.ViewModel.swift; sourceTree = ""; }; + 858EE294EEF02D5B6DCF1BF3 /* UIFont+Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Utils.swift"; sourceTree = ""; }; + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingStub.swift; sourceTree = ""; }; + 94C12289A0D103BC85248ADD /* MenuItemDetailViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetailViewTests.swift; sourceTree = ""; }; + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFetching.swift; sourceTree = ""; }; + 98DD8EC578114A25574829BF /* AppCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinatorTests.swift; sourceTree = ""; }; + 9CCD1ACEEEA7F71C336D8C2D /* MeunListTableViewDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeunListTableViewDelegateTests.swift; sourceTree = ""; }; + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGroupingTests.swift; sourceTree = ""; }; + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+NetworkFetching.swift"; sourceTree = ""; }; + A8011D4D40A9961373BF7E42 /* MenuListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListViewController.swift; sourceTree = ""; }; + A9C73A5583A97A45A668E83D /* MenuItemDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemDetailViewModel.swift; sourceTree = ""; }; + AD74F497CC0C6AE7F2938A20 /* MenuListTableViewDataSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListTableViewDataSourceTests.swift; sourceTree = ""; }; + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetail.ViewModelTests.swift; sourceTree = ""; }; + B2C507EDE6836AB38573A45D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + B722D06B4B39F344FD4A81D8 /* MenuListTableViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListTableViewDelegate.swift; sourceTree = ""; }; + B8159A5688255D31E3CDB372 /* UITableViewFooterLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewFooterLabel.swift; sourceTree = ""; }; + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetchingStub.swift; sourceTree = ""; }; + BD50FC921D1FB3B658D8847C /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = AlbertosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + BE19930A67D49607DD71C381 /* UIViewControllerPresenting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewControllerPresenting.swift; sourceTree = ""; }; + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+Timeouts.swift"; sourceTree = ""; }; + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderButtonViewModelTests.swift; sourceTree = ""; }; + D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingDummy.swift; sourceTree = ""; }; + D2424D0270A102DE67834630 /* menu_item.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = menu_item.json; sourceTree = ""; }; + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderController.swift; sourceTree = ""; }; + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentProcessingSpy.swift; sourceTree = ""; }; + E51B5F284ED8D04D444E045A /* MenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + E83C07B61990FC0EDF9A52E8 /* UIButton+BigButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+BigButtonStyle.swift"; sourceTree = ""; }; + EBF5FFF3921ABEBD8A67232A /* OrderDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderDetailViewModel.swift; sourceTree = ""; }; + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuSection.swift; sourceTree = ""; }; + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuGrouping.swift; sourceTree = ""; }; + FA4292931534001B9214FC05 /* MenuFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuFetcher.swift; sourceTree = ""; }; + FA8381D5EC52AEE8AD62901C /* Order.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Order.swift; sourceTree = ""; }; + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HippoPaymentsProcessor+PaymentProcessing.swift"; sourceTree = ""; }; + FB649B4BFE20C170B935EA8D /* UIView+AutoLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+AutoLayout.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 825B7E4C853101B0641DDE14 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2ADAE45912459DFF5FFF1304 /* Nimble in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 976EEC1F85DA654336D7815E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 306A3E4B181122000CE510B5 /* HippoPayments in Frameworks */, + 191B255739C03540FAC7AED9 /* HippoAnalytics in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0560AD3424758048A3A433C9 /* Albertos */ = { + isa = PBXGroup; + children = ( + 2C29236D8792EE571561C6C1 /* MenuFetching.swift */, + ); + name = Albertos; + path = "../07-testing-dynamic-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + 0BB75D973EA16C8867DCD068 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + D738530778704B5210E4A047 /* PaymentProcessingSpy.swift */, + ); + name = AlbertosTests; + path = "../12-spy/1-end/AlbertosTests"; + sourceTree = ""; + }; + 1089370477C43CD0924C27EA /* Albertos */ = { + isa = PBXGroup; + children = ( + FA4292931534001B9214FC05 /* MenuFetcher.swift */, + 9607928D2AE1C03FAC536A7A /* NetworkFetching.swift */, + A5CAC3002AC30D0DF4E5423A /* URLSession+NetworkFetching.swift */, + ); + name = Albertos; + path = "../10-networking/1-end/Albertos"; + sourceTree = ""; + }; + 115342909CD1A0EAF4A3125B /* Albertos */ = { + isa = PBXGroup; + children = ( + E51B5F284ED8D04D444E045A /* MenuItem.swift */, + 38E678AF65BE5E3636E405C7 /* MenuList.swift */, + FA8381D5EC52AEE8AD62901C /* Order.swift */, + D3B4BF35CD95A0E4AB3A54A3 /* OrderController.swift */, + 6D9869FEAEED2E853728663B /* OrderStoring.swift */, + 8374C25DD012A1F6AAFC0FC3 /* UserDefaults+OrderStoring.swift */, + ); + name = Albertos; + path = "../15-fake-and-dummy/1-end/Albertos"; + sourceTree = ""; + }; + 23ACB16B0E88DB238D562E90 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 0904894B8407027E56A5C8C7 /* NetworkFetchingStub.swift */, + ); + name = AlbertosTests; + path = "../10-networking/1-end/AlbertosTests"; + sourceTree = ""; + }; + 610DFD9158304B0567C4C959 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 44F03178E9C863DACBC1814D /* MenuItem+Fixture.swift */, + 0E930A2AB025AD0FBFFD28F6 /* MenuSection+Fixture.swift */, + ); + name = AlbertosTests; + path = "../06-testing-static-swiftui-views/1-end/AlbertosTests"; + sourceTree = ""; + }; + 623D63D3705EE89055A94C12 /* Albertos */ = { + isa = PBXGroup; + children = ( + ED56EEE9C2A95C8D940BE49B /* MenuSection.swift */, + ); + name = Albertos; + path = "../06-testing-static-swiftui-views/1-end/Albertos"; + sourceTree = ""; + }; + 6587589555E08BBEB63089E1 /* Sources */ = { + isa = PBXGroup; + children = ( + 6AB92569F1F7C921D2EEAF36 /* Collection+Safe.swift */, + ); + name = Sources; + path = ../Packages/CollectionSafe/Sources; + sourceTree = ""; + }; + 802824DAE2FE5EA864A24B56 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + D2424D0270A102DE67834630 /* menu_item.json */, + 3EA77FDE9A4729980574BE69 /* MenuItem+JSONFixture.swift */, + 7A1553886918E52BC11CC3DC /* XCTestCase+JSON.swift */, + ); + name = AlbertosTests; + path = "../09-json-decoding/1-end/AlbertosTests"; + sourceTree = ""; + }; + 814F0849D627BA240B0F8D84 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 14553FF9D06453DF0E5EF514 /* OrderStoringFake.swift */, + D155D69389A6A4AA5FCF55BA /* PaymentProcessingDummy.swift */, + ); + name = AlbertosTests; + path = "../15-fake-and-dummy/1-end/AlbertosTests"; + sourceTree = ""; + }; + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 98DD8EC578114A25574829BF /* AppCoordinatorTests.swift */, + 15393DB4B0DD911EA59F80B4 /* MenuFetcherTests.swift */, + 9E8BD1E021C1238B66D6697D /* MenuGroupingTests.swift */, + 7D067494480000423A7D3541 /* MenuItemAlternateJSONTests.swift */, + 249B815756D66665262AEC0B /* MenuItemDetail.ViewModelTests.swift */, + 1C761A4EBCBCD18DAD5C8D69 /* MenuItemDetailViewControllerTests.swift */, + 94C12289A0D103BC85248ADD /* MenuItemDetailViewTests.swift */, + 0468A7C221FFC8B3BF0FA860 /* MenuItemTests.swift */, + 59517D51C93F603F806005F5 /* MenuList.ViewModelTests.swift */, + AD74F497CC0C6AE7F2938A20 /* MenuListTableViewDataSourceTests.swift */, + 2239C164CC6A4E6C640F555B /* MenuListViewControllerTests.swift */, + 183E499D41745D441197920F /* MenuRow.ViewModelTests.swift */, + 9CCD1ACEEEA7F71C336D8C2D /* MeunListTableViewDelegateTests.swift */, + CEC5570E9468FD135453788B /* OrderButtonViewModelTests.swift */, + 6B03E53B8DB9C8D11A3D01AA /* OrderControllerTests.swift */, + B0AAF8C46351787636819C4A /* OrderDetail.ViewModelTests.swift */, + 0475EBBA92E1E7795EB38A94 /* OrderTests.swift */, + 43D70605F6CEC33D2238D93E /* SceneDelegateTests.swift */, + ); + path = AlbertosTests; + sourceTree = ""; + }; + 8D972551E420DEE0F670E89F /* Albertos */ = { + isa = PBXGroup; + children = ( + 04BB2C4BE59959A3DEAE67B3 /* AlertViewModel.swift */, + 10EB1E9E60AE99753C358562 /* AppCoordinator.swift */, + B2C507EDE6836AB38573A45D /* AppDelegate.swift */, + 3E9A053961EA4012DC82365E /* MenuItemDetailView.swift */, + 60FDCBD1DF45F7EE65A66691 /* MenuItemDetailViewController.swift */, + A9C73A5583A97A45A668E83D /* MenuItemDetailViewModel.swift */, + 37C4B92FD364569E573412DA /* MenuListTableViewDataSource.swift */, + B722D06B4B39F344FD4A81D8 /* MenuListTableViewDelegate.swift */, + A8011D4D40A9961373BF7E42 /* MenuListViewController.swift */, + 63C615DC155947C2ADA0D58A /* MenuListViewModel.swift */, + 0EA6323757FC15B622B0B86D /* MenuRowViewModel.swift */, + 2EEB98A8D526FF61E06E97BE /* Order+HippoPayments.swift */, + 83FA55EAF42B38DA7CE36726 /* OrderButton.ViewModel.swift */, + 75037602ABE320D3619E5B75 /* OrderDetailViewController.swift */, + EBF5FFF3921ABEBD8A67232A /* OrderDetailViewModel.swift */, + BD50FC921D1FB3B658D8847C /* SceneDelegate.swift */, + E83C07B61990FC0EDF9A52E8 /* UIButton+BigButtonStyle.swift */, + 0EAB46D6E7F1ABF93B8F33E9 /* UIColor+Custom.swift */, + 858EE294EEF02D5B6DCF1BF3 /* UIFont+Utils.swift */, + B8159A5688255D31E3CDB372 /* UITableViewFooterLabel.swift */, + FB649B4BFE20C170B935EA8D /* UIView+AutoLayout.swift */, + BE19930A67D49607DD71C381 /* UIViewControllerPresenting.swift */, + ); + path = Albertos; + sourceTree = ""; + }; + 92B90574F9FA63884D9D7BBF = { + isa = PBXGroup; + children = ( + 8D972551E420DEE0F670E89F /* Albertos */, + D9B63447692F960F19829F9B /* Albertos */, + 623D63D3705EE89055A94C12 /* Albertos */, + 0560AD3424758048A3A433C9 /* Albertos */, + 1089370477C43CD0924C27EA /* Albertos */, + DD3B74CA50EB6E5F084850EF /* Albertos */, + 115342909CD1A0EAF4A3125B /* Albertos */, + 8B609BB40A5421BBA31F3D3B /* AlbertosTests */, + 610DFD9158304B0567C4C959 /* AlbertosTests */, + DB59F414D6282A4AE9C2F693 /* AlbertosTests */, + 802824DAE2FE5EA864A24B56 /* AlbertosTests */, + 23ACB16B0E88DB238D562E90 /* AlbertosTests */, + 0BB75D973EA16C8867DCD068 /* AlbertosTests */, + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */, + 814F0849D627BA240B0F8D84 /* AlbertosTests */, + D298843BDFC7FEE66A144DE6 /* Packages */, + 6587589555E08BBEB63089E1 /* Sources */, + A0D81A2A2581F3DF42D52538 /* Products */, + ); + sourceTree = ""; + }; + A0D81A2A2581F3DF42D52538 /* Products */ = { + isa = PBXGroup; + children = ( + 823EEDCB67B487000A05DB62 /* Albertos.app */, + BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + CDFD277F86A3D3C05F8490C5 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + 896FE3F619AFADE5CA8AE7AD /* PaymentProcessingStub.swift */, + CC4A09108CE16DBEA1BDC308 /* XCTestCase+Timeouts.swift */, + ); + name = AlbertosTests; + path = "../13-testing-view-presentation/1-end/AlbertosTests"; + sourceTree = ""; + }; + D298843BDFC7FEE66A144DE6 /* Packages */ = { + isa = PBXGroup; + children = ( + 72CC3E84F3456ED561DBFCAB /* HippoAnalytics */, + 7D5D23DD07D469C771E0CCD7 /* HippoPayments */, + ); + name = Packages; + sourceTree = ""; + }; + D9B63447692F960F19829F9B /* Albertos */ = { + isa = PBXGroup; + children = ( + F89281C54BD39EEAB6CD33A7 /* MenuGrouping.swift */, + ); + name = Albertos; + path = "../04-tdd-in-the-real-world/1-end/Albertos"; + sourceTree = ""; + }; + DB59F414D6282A4AE9C2F693 /* AlbertosTests */ = { + isa = PBXGroup; + children = ( + BBDF4DFEF1B2F09792BA6D00 /* MenuFetchingStub.swift */, + 7415549C09C4274D8CCFCC77 /* TestError.swift */, + ); + name = AlbertosTests; + path = "../08-stub/1-end/AlbertosTests"; + sourceTree = ""; + }; + DD3B74CA50EB6E5F084850EF /* Albertos */ = { + isa = PBXGroup; + children = ( + FB1DE85828E344BA72C97E96 /* HippoPaymentsProcessor+PaymentProcessing.swift */, + 09723CD3E04C59D8931C539A /* PaymentProcessing.swift */, + ); + name = Albertos; + path = "../12-spy/1-end/Albertos"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33D869CEA8CD44DF60039E52 /* AlbertosTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */; + buildPhases = ( + C099BFE9ACD985A8EDF284EA /* Sources */, + 4D9ABFE10A474D5655D092BE /* Resources */, + 825B7E4C853101B0641DDE14 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */, + ); + name = AlbertosTests; + packageProductDependencies = ( + 34F8A6BCB50934E2E744EBE9 /* Nimble */, + ); + productName = AlbertosTests; + productReference = BDF4B76EC90E0DB5458F8146 /* AlbertosTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B5F9F9D2250AEB2D2EE0494B /* Albertos */ = { + isa = PBXNativeTarget; + buildConfigurationList = 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */; + buildPhases = ( + 2B3D01A98BE73618C91FF57C /* Sources */, + 976EEC1F85DA654336D7815E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Albertos; + packageProductDependencies = ( + E4DA341A663094C9B76ED975 /* HippoPayments */, + A1C7645975C081584B83D893 /* HippoAnalytics */, + ); + productName = Albertos; + productReference = 823EEDCB67B487000A05DB62 /* Albertos.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E8B17C8ABC8471E4224D1C39 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 92B90574F9FA63884D9D7BBF; + packageReferences = ( + 3BEEF38A7AB946BE44FC2663 /* XCRemoteSwiftPackageReference "Nimble" */, + 3C8DF608AD2FCBD25F3459A9 /* XCRemoteSwiftPackageReference "Quick" */, + ); + projectDirPath = ""; + projectRoot = ""; + targets = ( + B5F9F9D2250AEB2D2EE0494B /* Albertos */, + 33D869CEA8CD44DF60039E52 /* AlbertosTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4D9ABFE10A474D5655D092BE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3E7AAFE5A8859BD805675B9A /* menu_item.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2B3D01A98BE73618C91FF57C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 420337AB5BAB9429B22E27CE /* AlertViewModel.swift in Sources */, + B36547A03718CCC9ED9A8FE2 /* AppCoordinator.swift in Sources */, + 72DDE0D9D1F25D443BB10C1A /* AppDelegate.swift in Sources */, + 04C378BF8E1E01A319707838 /* Collection+Safe.swift in Sources */, + EB1718A2B7AEA1093BB6A61F /* HippoPaymentsProcessor+PaymentProcessing.swift in Sources */, + 25094AC33CCA4B5C9C22191F /* MenuFetcher.swift in Sources */, + FF7E3946FA9D5B74CBF5D8C2 /* MenuFetching.swift in Sources */, + C5EE5943ADB1EA4D1CE728EE /* MenuGrouping.swift in Sources */, + 09ACA86E7D21F75667DFE0DD /* MenuItem.swift in Sources */, + 451A7E0A42CFBCBF25629AB3 /* MenuItemDetailView.swift in Sources */, + 29101E13108C884C459526CD /* MenuItemDetailViewController.swift in Sources */, + 4B2E7EC070E04ABFCE2C8D26 /* MenuItemDetailViewModel.swift in Sources */, + F28A0F3222BF3EAF2CDA01FE /* MenuList.swift in Sources */, + 7B32439B4ACE34E580BBF496 /* MenuListTableViewDataSource.swift in Sources */, + 5FE042375496A008C5ADC64D /* MenuListTableViewDelegate.swift in Sources */, + 93EBC3F7932F03B8C184DAB0 /* MenuListViewController.swift in Sources */, + B8E9D4EB24784E24EEE1DCB9 /* MenuListViewModel.swift in Sources */, + 727185695D29ECAFF9D5ABD0 /* MenuRowViewModel.swift in Sources */, + 9D334FC1DB465C7F0B3BB3F7 /* MenuSection.swift in Sources */, + 7C8488112F6CE8FD02FAD6E2 /* NetworkFetching.swift in Sources */, + 2AA2150DDE3809E58743BD24 /* Order+HippoPayments.swift in Sources */, + 13387CFB26245EF8240C7A98 /* Order.swift in Sources */, + FD786266CA046DB84D08178E /* OrderButton.ViewModel.swift in Sources */, + 9236A4B1D0CC219B8F23CBB1 /* OrderController.swift in Sources */, + 70323886C0C07B8479B4DB19 /* OrderDetailViewController.swift in Sources */, + 21CAEB263BFD3D7B6F0D4F08 /* OrderDetailViewModel.swift in Sources */, + 4723B6368E44839B144C6763 /* OrderStoring.swift in Sources */, + 6DA8821E769C21FD671732D3 /* PaymentProcessing.swift in Sources */, + 882BFA2C9C53B919DBFEE08D /* SceneDelegate.swift in Sources */, + 9FF9DD6FA84C81164D4B71D0 /* UIButton+BigButtonStyle.swift in Sources */, + AF9FF4A099156E882C5358A9 /* UIColor+Custom.swift in Sources */, + 363CBC894DBF689F25A4ED16 /* UIFont+Utils.swift in Sources */, + CDCA5B8F5EB3FED804BF6A04 /* UITableViewFooterLabel.swift in Sources */, + 9BEE4D8C5A515780B2DA5FE6 /* UIView+AutoLayout.swift in Sources */, + EABF936007EFF66CCC51D4DA /* UIViewControllerPresenting.swift in Sources */, + 2F918E0E8AD9FA1C52728236 /* URLSession+NetworkFetching.swift in Sources */, + 2CE5477919484069C04F4DB8 /* UserDefaults+OrderStoring.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C099BFE9ACD985A8EDF284EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A6E7E283A595F21FBEB04DE /* AppCoordinatorTests.swift in Sources */, + 9CC30446EF46FE0263FC1016 /* Collection+Safe.swift in Sources */, + E5CB4631359F984486744922 /* MenuFetcherTests.swift in Sources */, + E55D459EF4C1A10CA14B2EDA /* MenuFetchingStub.swift in Sources */, + A432A71EDCF4DC54058A564E /* MenuGroupingTests.swift in Sources */, + 24D42A189DD7783620BA9E71 /* MenuItem+Fixture.swift in Sources */, + D33843A1F41E697E457450B0 /* MenuItem+JSONFixture.swift in Sources */, + DAB59D18F337A03FFD259E0D /* MenuItemAlternateJSONTests.swift in Sources */, + 5FF1F997B94105D2F8EE0162 /* MenuItemDetail.ViewModelTests.swift in Sources */, + 7E6263654C074E5D5C21FD8B /* MenuItemDetailViewControllerTests.swift in Sources */, + 43E91F57C7F85EE9A82599DC /* MenuItemDetailViewTests.swift in Sources */, + 5725BB9CC15E6A1FB9049F96 /* MenuItemTests.swift in Sources */, + 649034BA985AB6A4C370FC4D /* MenuList.ViewModelTests.swift in Sources */, + 8DCED4000A587EA928537850 /* MenuListTableViewDataSourceTests.swift in Sources */, + DB5612B7B536AF211EF7ABA3 /* MenuListViewControllerTests.swift in Sources */, + B4E3F2714E137147C9853A22 /* MenuRow.ViewModelTests.swift in Sources */, + 7F479ECCACF640E0803676C3 /* MenuSection+Fixture.swift in Sources */, + 2ED641F33327266A500061F7 /* MeunListTableViewDelegateTests.swift in Sources */, + 82A227C7A37E3AD03FB346CD /* NetworkFetchingStub.swift in Sources */, + A17BE57B0365DC289250E618 /* OrderButtonViewModelTests.swift in Sources */, + A804D47930989A18364D1947 /* OrderControllerTests.swift in Sources */, + 417B645EA8ABA9FD43A555DB /* OrderDetail.ViewModelTests.swift in Sources */, + 5ED86F4FF8C7DE0E71C461B1 /* OrderStoringFake.swift in Sources */, + DDD52EC5E0B3BD1387E23A84 /* OrderTests.swift in Sources */, + 82F3DCE56B57C47611121CA6 /* PaymentProcessingDummy.swift in Sources */, + 5354C38AA669CF9AF2973EA1 /* PaymentProcessingSpy.swift in Sources */, + D8B61B7ADE287BC0654C8FBA /* PaymentProcessingStub.swift in Sources */, + C34F443201A8C842CDD10D3D /* SceneDelegateTests.swift in Sources */, + 05F9CCF5DBBF99661E2674CD /* TestError.swift in Sources */, + FB761F5059AB45B17E2DF213 /* XCTestCase+JSON.swift in Sources */, + A140E52779DF1652541302F3 /* XCTestCase+Timeouts.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C21F4B58454F5DE5FB4E056C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B5F9F9D2250AEB2D2EE0494B /* Albertos */; + targetProxy = 059BD3039F2CCB1DD9C2B900 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 068E7B265A85A0D164E026DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Release; + }; + 1D797AB11DACDB9E4B218C54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGNING_ALLOWED = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.AlbertosTests; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Albertos.app/Albertos"; + }; + name = Debug; + }; + 60C5F61655CE71EFE9017DDE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 924F1451F334BAAEFDFDAD7C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + D6F337C2184F1D0A465FC2BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EC39A2F770A854AABF6204BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mokacoding.Albertos.Albertos; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 04A0F0432ABD7A4B9292FF90 /* Build configuration list for PBXProject "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6F337C2184F1D0A465FC2BA /* Debug */, + 60C5F61655CE71EFE9017DDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 15021ED4CD768AB692CDEF6F /* Build configuration list for PBXNativeTarget "Albertos" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC39A2F770A854AABF6204BC /* Debug */, + 924F1451F334BAAEFDFDAD7C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F6A1BAA7BD8B12026072190E /* Build configuration list for PBXNativeTarget "AlbertosTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D797AB11DACDB9E4B218C54 /* Debug */, + 068E7B265A85A0D164E026DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 3BEEF38A7AB946BE44FC2663 /* XCRemoteSwiftPackageReference "Nimble" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Quick/Nimble"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 9.2.0; + }; + }; + 3C8DF608AD2FCBD25F3459A9 /* XCRemoteSwiftPackageReference "Quick" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Quick/Quick"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 34F8A6BCB50934E2E744EBE9 /* Nimble */ = { + isa = XCSwiftPackageProductDependency; + package = 3BEEF38A7AB946BE44FC2663 /* XCRemoteSwiftPackageReference "Nimble" */; + productName = Nimble; + }; + A1C7645975C081584B83D893 /* HippoAnalytics */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoAnalytics; + }; + E4DA341A663094C9B76ED975 /* HippoPayments */ = { + isa = XCSwiftPackageProductDependency; + productName = HippoPayments; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = E8B17C8ABC8471E4224D1C39 /* Project object */; +} diff --git a/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..ae57729 --- /dev/null +++ b/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,42 @@ +{ + "originHash" : "2d74b3c0ca058d4fa4ce8395947469eab7935fdd0348ff80697a7e67c01d931b", + "pins" : [ + { + "identity" : "cwlcatchexception", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mattgallagher/CwlCatchException.git", + "state" : { + "revision" : "07b2ba21d361c223e25e3c1e924288742923f08c", + "version" : "2.2.1" + } + }, + { + "identity" : "cwlpreconditiontesting", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git", + "state" : { + "revision" : "0139c665ebb45e6a9fbdb68aabfd7c39f3fe0071", + "version" : "2.2.2" + } + }, + { + "identity" : "nimble", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Nimble", + "state" : { + "revision" : "c93f16c25af5770f0d3e6af27c9634640946b068", + "version" : "9.2.1" + } + }, + { + "identity" : "quick", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Quick", + "state" : { + "revision" : "8cce6acd38f965f5baa3167b939f86500314022b", + "version" : "3.1.2" + } + } + ], + "version" : 3 +} diff --git a/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate b/19-appendix-c-uikit/Albertos.xcodeproj/project.xcworkspace/xcuserdata/gio.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..573d77dab01a315e80b400a79a20c503ecd7ac80 GIT binary patch literal 24035 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 Pvb=I9EU&iz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/19-appendix-c-uikit/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist b/19-appendix-c-uikit/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4ed026f --- /dev/null +++ b/19-appendix-c-uikit/Albertos.xcodeproj/xcuserdata/gio.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Albertos.xcscheme_^#shared#^_ + + orderHint + 0 + + + +