From 1a5c7a89c58fa7e2ff8ed3e569b5947b888846a8 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 4 Oct 2019 19:59:45 -0500 Subject: [PATCH 01/18] Se agrego Credentials y Cliente --- .../Fakestagram-Xcode10/Credentials.swift | 9 +++++++++ .../Fakestagram-Xcode10/DataSource/Cliente.swift | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift new file mode 100644 index 0000000..8b69a8f --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift @@ -0,0 +1,9 @@ +// +// Credentials.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/4/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift new file mode 100644 index 0000000..873525f --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift @@ -0,0 +1,9 @@ +// +// Cliente.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/4/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation From 8e4d6f20f01135ac9ba37c01154395cd5f7bf956 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 4 Oct 2019 20:10:52 -0500 Subject: [PATCH 02/18] Modificacion de Credentials y Cliente --- .DS_Store | Bin 0 -> 6148 bytes Fakestagram-Xcode10/.DS_Store | Bin 0 -> 6148 bytes .../project.pbxproj | 16 +++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 19644 bytes .../xcschemes/xcschememanagement.plist | 14 +++++ .../Fakestagram-Xcode10/Credentials.swift | 15 +++++ .../DataSource/Cliente.swift | 55 ++++++++++++++++++ 7 files changed, 100 insertions(+) create mode 100644 .DS_Store create mode 100644 Fakestagram-Xcode10/.DS_Store create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1e1240fbe3aa87ad9616694f30b385cfdd642a31 GIT binary patch literal 6148 zcmeHK!Ab)$5Phi?DjqC|Ab2o8px8fH%jysG;!)exitdtPRXpw=_!EAJ9{nc|zR858 zrS(t*p)vzAFFVOg$V*8&09^m6=mA{-9lBs^i(!dLzxaZ+Qf8Cr;v7>v;tFFtFq*A{ z0&;e{IOloY;~KN)SK$a37$KlwPY)->bW{#QD0$S_!_894Fwcj6yY0 zHJ%SvV^<;1hh-R&)%koq{Mvc@I9+vy;+Hc_ZfAG!&gIQa0aL&fSZ@X7BByn>6)lQaf}l+L_Q$QluFm;=91fQ$S~LYrfq4Zs^s_7P|Jl#=|2)aQOaW8iUn$_)`5^Ce zOX+Q0*qpqzo_VlY0)MK&H__uy AZ~y=R literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/.DS_Store b/Fakestagram-Xcode10/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7e723e971eee801b6b8ce9637c2f3ff560381bfe GIT binary patch literal 6148 zcmeHK%}N6?5dKDcD0u17i;x#kx^ECl^#ywIsI*d1%Pv;IW1iOM@SB-fy0|w%Seb$3 zn`C~He6Yz509m|m8ej%s%BCo)42Vt-nog>-qF9bS-f)jCUfGXBbnh3q;eMa-faCq| zaEV*2(PBeOgE_A7aTs?zV~eMkZL?apyUq{$x&K|Z?(ry_%*VlC>@pY#27-ZLU~CNV z%~qM7IYu801OvgqfdRcA5}RVKSRC!@U}q%&al&a6>RL-^OsbeG7Drkr;-N$jm0Dtm zhjTtvzg)36dN{;ZW}dq8ckv>&I_HzQL$YJ^!9Xz3XW-O_GkyQB`N<3x`TdX>1p~pr zKVv{9%hhthL)EwS$MN*7O>B2;D(Y8Mp-}Jr1aP4D$hjHao>Zq_u2>v3i_Tj(F@6M$ Lkm!PeKVaYs=?p4y literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 01d56d3..473131d 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; + 6C5F57982348207400488E96 /* Cliente.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57972348207400488E96 /* Cliente.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB4233F1B1B0004C30D /* Main.storyboard */; }; 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB7233F1B1C0004C30D /* Assets.xcassets */; }; @@ -26,6 +28,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; + 6C5F57972348207400488E96 /* Cliente.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cliente.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7701BEB5233F1B1B0004C30D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -56,6 +60,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 6C5F57962348206000488E96 /* DataSource */ = { + isa = PBXGroup; + children = ( + 6C5F57972348207400488E96 /* Cliente.swift */, + ); + path = DataSource; + sourceTree = ""; + }; 7701BEA4233F1B1B0004C30D = { isa = PBXGroup; children = ( @@ -77,12 +89,14 @@ 7701BEAF233F1B1B0004C30D /* Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( + 6C5F57962348206000488E96 /* DataSource */, 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */, 7701BED0233F1B540004C30D /* PostsTableViewController.swift */, 7701BEB4233F1B1B0004C30D /* Main.storyboard */, 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, + 6C5F57942348203100488E96 /* Credentials.swift */, ); path = "Fakestagram-Xcode10"; sourceTree = ""; @@ -197,6 +211,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6C5F57982348207400488E96 /* Cliente.swift in Sources */, + 6C5F57952348203100488E96 /* Credentials.swift in Sources */, 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, ); diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..48b15784907d31e2ef6ca74e8e217abecae6e205 GIT binary patch literal 19644 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 awi(_t95Ni^;5bEbf0=7t;W + + + + SchemeUserState + + Fakestagram-Xcode10.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift index 8b69a8f..2c03ae5 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift @@ -7,3 +7,18 @@ // import Foundation + +enum Credentials{ + case apiToken + + func get()-> String?{ + switch self { + case .apiToken: + return "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e" + } + } + + func set(value: String) ->Bool{ + return true; + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift index 873525f..4b90acd 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift @@ -7,3 +7,58 @@ // import Foundation + +class Cliente{ + let session: URLSession + let baseUrl : URL + let contentType: String + + init(session: URLSession, baseUrl: URL, contentType: String) { + self.session = session + self.baseUrl = baseUrl + self.contentType = contentType + } + + typealias successfulResponse = (Data) -> Void + + func get(path: String, success: successfulResponse){} + + func post(path: String,body: Data?, success: successfulResponse){} + + func put (path: String,body: Data?, success: successfulResponse){} + + func delete(path: String, success: successfulResponse){} + + func request(method: String, path: String,body: Data?,success: successfulResponse) { + + let req = buildRequest(method: method, path: path,body: body) + + session.dataTask(with: req){ (data, response,error) in + if let error = error { + debugPrint(error) + return + } + let res = ClientResponse(response) + if res.successful? { + + } + }.resume() + + } + + private func buildRequest(method: String, path: String,body : Data?) -> URLRequest{ + var urlComponents = URLComponents(url: self.baseUrl, resolvingAgainstBaseURL: true)! + urlComponents.path = path + var request = URLRequest(url: urlComponents.url!) + request.setValue(contentType, forHTTPHeaderField: "Accept") + request.setValue(contentType, forHTTPHeaderField: "Content-Type") + request.httpMethod = method + + if let token = Credentials.apiToken.get() { + request.addValue("Bearer \(token)", forHTTPHeaderField:"Authorization") + } + request.httpBody = body + + return request + } +} From a06285d1fd43077f86afa030606f25c20fd6d839 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 5 Oct 2019 12:13:03 -0500 Subject: [PATCH 03/18] pasamos las pruebas del request --- .../project.pbxproj | 16 ++++++--- .../UserInterfaceState.xcuserstate | Bin 19644 -> 28753 bytes .../Base.lproj/Main.storyboard | 25 +++++++++++++ .../DataSource/Cliente.swift | 8 ++--- .../DataSource/RequestBuilder.swift | 33 ++++++++++++++++++ .../DataSource/RequestResponse.swift | 9 +++++ .../PostViewController.swift | 30 ++++++++++++++++ .../PostsTableViewController.swift | 26 ++++++++------ ...10Tests.swift => RequestBuilderTest.swift} | 33 +++++++++++++++--- 9 files changed, 156 insertions(+), 24 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestResponse.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift rename Fakestagram-Xcode10/Fakestagram-Xcode10Tests/{Fakestagram_Xcode10Tests.swift => RequestBuilderTest.swift} (51%) diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 473131d..694939e 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -7,13 +7,15 @@ objects = { /* Begin PBXBuildFile section */ + 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50012348F45900CDE263 /* RequestBuilder.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F57982348207400488E96 /* Cliente.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57972348207400488E96 /* Cliente.swift */; }; + 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB4233F1B1B0004C30D /* Main.storyboard */; }; 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB7233F1B1C0004C30D /* Assets.xcassets */; }; 7701BEBB233F1B1C0004C30D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */; }; - 7701BEC6233F1B1C0004C30D /* Fakestagram_Xcode10Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEC5233F1B1C0004C30D /* Fakestagram_Xcode10Tests.swift */; }; + 7701BEC6233F1B1C0004C30D /* RequestBuilderTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */; }; 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BED0233F1B540004C30D /* PostsTableViewController.swift */; }; /* End PBXBuildFile section */ @@ -28,8 +30,10 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 6C2C50012348F45900CDE263 /* RequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilder.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F57972348207400488E96 /* Cliente.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cliente.swift; sourceTree = ""; }; + 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7701BEB5233F1B1B0004C30D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -37,7 +41,7 @@ 7701BEBA233F1B1C0004C30D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 7701BEBC233F1B1C0004C30D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7701BEC1233F1B1C0004C30D /* Fakestagram-Xcode10Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Fakestagram-Xcode10Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7701BEC5233F1B1C0004C30D /* Fakestagram_Xcode10Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fakestagram_Xcode10Tests.swift; sourceTree = ""; }; + 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilderTest.swift; sourceTree = ""; }; 7701BEC7233F1B1C0004C30D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7701BED0233F1B540004C30D /* PostsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsTableViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -64,6 +68,7 @@ isa = PBXGroup; children = ( 6C5F57972348207400488E96 /* Cliente.swift */, + 6C2C50012348F45900CDE263 /* RequestBuilder.swift */, ); path = DataSource; sourceTree = ""; @@ -96,6 +101,7 @@ 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, + 6C5F5799234827B200488E96 /* PostViewController.swift */, 6C5F57942348203100488E96 /* Credentials.swift */, ); path = "Fakestagram-Xcode10"; @@ -104,7 +110,7 @@ 7701BEC4233F1B1C0004C30D /* Fakestagram-Xcode10Tests */ = { isa = PBXGroup; children = ( - 7701BEC5233F1B1C0004C30D /* Fakestagram_Xcode10Tests.swift */, + 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */, 7701BEC7233F1B1C0004C30D /* Info.plist */, ); path = "Fakestagram-Xcode10Tests"; @@ -214,7 +220,9 @@ 6C5F57982348207400488E96 /* Cliente.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, + 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, + 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -222,7 +230,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7701BEC6233F1B1C0004C30D /* Fakestagram_Xcode10Tests.swift in Sources */, + 7701BEC6233F1B1C0004C30D /* RequestBuilderTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 48b15784907d31e2ef6ca74e8e217abecae6e205..5d8636227e3ce4aded78298db9d4a2c7f878fc5f 100644 GIT binary patch literal 28753 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 S5Jo8aBo{gY + @@ -53,5 +54,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift index 4b90acd..2966a90 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift @@ -38,10 +38,10 @@ class Cliente{ debugPrint(error) return } - let res = ClientResponse(response) - if res.successful? { - - } + /*let res = ClientResponse(response) + if res.successful? { + + }*/ }.resume() } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift new file mode 100644 index 0000000..5a1c705 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift @@ -0,0 +1,33 @@ +// +// RequestBuilder.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +struct RequestBuilder{ + var baseUrl: String = "" + var path: String = "" + var method: String = "get" + var scheme: String = "https" + var urlComp : URLComponents + + init(baseUrl: String){ + self.urlComp = URLComponents(string: baseUrl)! + self.baseUrl = baseUrl + } + + mutating func url() -> URL? { + var u = urlComp + u.path = self.path + u.scheme = self.scheme + + return u.url + // return URL(string: "\(baseUrl)\(path)") + + } + +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestResponse.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestResponse.swift new file mode 100644 index 0000000..de89fd8 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestResponse.swift @@ -0,0 +1,9 @@ +// +// RequestResponse.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift new file mode 100644 index 0000000..ef31ac4 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift @@ -0,0 +1,30 @@ +// +// PostViewController.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/4/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class PostViewController: UIViewController { + + @IBOutlet weak var imagen: UIImageView! + + override func viewDidLoad() { + super.viewDidLoad() + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift index 0cbe744..510cddc 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift @@ -17,6 +17,8 @@ struct Post: Codable { let createdAt: String var liked: Bool let location: String + //let imagen: UIImage? + func likesCountText() -> String { return "\(likesCount) likes" @@ -42,7 +44,7 @@ class PostsTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() - loadPosts() { data in + loadPosts { data in DispatchQueue.main.async { self.posts = data self.tableView.reloadData() @@ -113,15 +115,17 @@ class PostsTableViewController: UITableViewController { } */ - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ + // MARK: - Navigation + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == "detalle"{ + let det = segue.destination as! PostViewController + let indx = self.tableView.indexPathForSelectedRow?.row ?? 0 + posts[indx].load { img in + det.imagen.image = img + } + } + } func loadPosts(successful: @escaping ([Post]) -> Void) { var request = URLRequest(url: URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts")!) @@ -130,7 +134,7 @@ class PostsTableViewController: UITableViewController { request.httpMethod = "get" request.addValue("Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", forHTTPHeaderField: "Authorization") - let task = URLSession.shared.dataTask(with: request) { (data, response, error) in + let task = URLSession.shared.dataTask(with: request) { (data, _, error) in if error != nil || data == nil { return } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Fakestagram_Xcode10Tests.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift similarity index 51% rename from Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Fakestagram_Xcode10Tests.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift index 021e737..598d775 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Fakestagram_Xcode10Tests.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift @@ -9,26 +9,49 @@ import XCTest @testable import Fakestagram_Xcode10 -class Fakestagram_Xcode10Tests: XCTestCase { +class RequestBuilderTest: XCTestCase { + + + func testBuildURL(){ + var builder = RequestBuilder(baseUrl: "http://fakestagram-api.herokuapp.com") + builder.path = "/api/v1/accounts" + XCTAssertEqual(builder.scheme, "https") + XCTAssertEqual(builder.method, "get") + XCTAssertEqual(builder.url(), URL(string: "https://fakestagram-api.herokuapp.com/api/v1/accounts")!) + + } + func testBuildInvalidurl(){ + var builder = RequestBuilder(baseUrl : "example.com") + builder.path = "//@3èrw456-123432432" + XCTAssertNil(builder.url()) + } + + + func testBuildForceSchemeURL(){ + var builder = RequestBuilder(baseUrl : "http://fakestagram-api.herokuapp.com/") + XCTAssertEqual(builder.url(), URL(string: "https://fakestagram-api.herokuapp.com")!) + } + + override func setUp() { // Put setup code here. This method is called before the invocation of each test method in the class. } - + override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. } - + func testExample() { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. } - + func testPerformanceExample() { // This is an example of a performance test case. self.measure { // Put the code you want to measure the time of here. } } - + } From 42c03a4a0e35176d3fb5591cca000cadcd10d010 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 5 Oct 2019 13:42:06 -0500 Subject: [PATCH 04/18] RequestBuilder & StatusCode (numeros de codigos de error) --- Fakestagram-Xcode10/.DS_Store | Bin 6148 -> 6148 bytes .../project.pbxproj | 8 +++ .../UserInterfaceState.xcuserstate | Bin 28753 -> 29339 bytes .../DataSource/HttpResponse.swift | 25 +++++++ .../DataSource/RequestBuilder.swift | 63 ++++++++++++----- .../DataSource/StatusCode.swift | 36 ++++++++++ .../RequestBuilderTest.swift | 65 ++++++++++-------- 7 files changed, 152 insertions(+), 45 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/HttpResponse.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift diff --git a/Fakestagram-Xcode10/.DS_Store b/Fakestagram-Xcode10/.DS_Store index 7e723e971eee801b6b8ce9637c2f3ff560381bfe..24d6551a632046409b6cc82655ab34fa915e2634 100644 GIT binary patch delta 34 qcmZoMXffCj&dAKjac(jXqut~gjC_m%n>R9su}y5?+RV=JmmdJKX9`{b delta 34 qcmZoMXffCj&dAL0tavgHqut~gjC_m+n>R9su}y5?+RV=JmmdJVvkJff diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 694939e..8e88dfd 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -8,6 +8,8 @@ /* Begin PBXBuildFile section */ 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50012348F45900CDE263 /* RequestBuilder.swift */; }; + 6C2C50042349177F00CDE263 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50032349177F00CDE263 /* HttpResponse.swift */; }; + 6C2C50062349185400CDE263 /* StatusCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50052349185400CDE263 /* StatusCode.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F57982348207400488E96 /* Cliente.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57972348207400488E96 /* Cliente.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; @@ -31,6 +33,8 @@ /* Begin PBXFileReference section */ 6C2C50012348F45900CDE263 /* RequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilder.swift; sourceTree = ""; }; + 6C2C50032349177F00CDE263 /* HttpResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpResponse.swift; sourceTree = ""; }; + 6C2C50052349185400CDE263 /* StatusCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusCode.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F57972348207400488E96 /* Cliente.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cliente.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; @@ -69,6 +73,8 @@ children = ( 6C5F57972348207400488E96 /* Cliente.swift */, 6C2C50012348F45900CDE263 /* RequestBuilder.swift */, + 6C2C50032349177F00CDE263 /* HttpResponse.swift */, + 6C2C50052349185400CDE263 /* StatusCode.swift */, ); path = DataSource; sourceTree = ""; @@ -219,9 +225,11 @@ files = ( 6C5F57982348207400488E96 /* Cliente.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, + 6C2C50062349185400CDE263 /* StatusCode.swift in Sources */, 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, + 6C2C50042349177F00CDE263 /* HttpResponse.swift in Sources */, 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 5d8636227e3ce4aded78298db9d4a2c7f878fc5f..cf5f76658c82da48203b1dfb370817f494df0aed 100644 GIT binary patch delta 10826 zcmai)2V7Iv`~P#!UDf~@kdOgnkU>HMVMBlfNC=Rsbz3JUf{F_T+}7M!p-JlQp;XpVH*1%D492^f3oCM#1GvG`( z555H#!zHjDHo%o|J=_3y!d-AT+yg&=U&0gcBs>LA!!z(KJO{7C8}M6r6W)S%;eGfs z{0%;Z&)}Z~MT8MTLPUrODG^Pm2sNPz5LzOEFcD@ViAW}FL^_d8H6Ao>#n zh=D{EF^CvOR1+hKQN(CsDlv_iPRt-?60?Ze#2n&H;w@qUv5wZ=!~xv8L6giq4LyjfK zk(0?O0@PG$8a16-KrN&eQH!Z1 z)H14(T1CA_t)|vcTd1wnHtIv_BkE&nKXrimEI@rh9jCsePEZ%9i_|6R7ImBY4|RvS zOZ`Yar2e3u(XDAd9Y%-K5ww_=(+XNi$J07mPp8nSbQ+ybXV5ux0bNL!(O&vxx*Po} z-JR}1_oU0|{`3HPAU&KOLD$d|=>W~rh@M2hLC>Za&ZzqgT`G>1}iq zy`A1ce?Wgoe?%XmKc|n;C+L&(SM=BPW%?WXI(?J=4}FJzKtHB`qn|Q>fegV!Gcrcb zC>SLZ!^ARijEYe+8b-^+Gdd=TNoH(J3X{XQ7&lYQc$gBVlqq96F`bz%OgYn+@iBwr zm?2Cx6JS^dF_W0rnW@YSW+pR>naeC>-e#5sSCCHNX}Ur-0nj-Zq(>H43pKosyh`2( z-bj3|<<;?u@V}~fLwFVV?;2j`=U0>Pz0vr3f80W?j^e3##kfTk{;QH#(G<^o2LpR~ zU-BM-2p|EmAOR$U6p#ioKo-aW1)wJw4r)Lh7zLJrwO|w20}g?uxBLV~>UMHqthnY^y3@&S}0&|)^Xk8H2`XB;21oQ~xG%?YU5F7|98dye8henJRv{9Y-APeCN?uzZ=V@}xlm9K^VoIlhEu%OJU(7$-uO3oS+oz(s-^ihr!|K{p4jWK6Fl4GT6v*FYH;7&;KMP-l-Ldf= zuqU3T-mniW4<1u?X5MFauphG9gT@%Usvi`rgcYz7_GfppyV*VLhSPXL2l4oLq$O}@ zkd2YH-qlPAtKsnAyD=JK1ka9ts|+m--v$|QD4W9i*j>*r!O>h_b}t^|uHXo5bRwL9 zF2{04c5o%VqS-n%Y~8duASX2 zgRJi7tE;LW)&Qpjuf@g@Q{l8AjI)C2L0eohu+C484PJ^D^JigGvmp!LgcF0CyLzA_DTc?HWC+vpc4{@r%+i)4r&;XZ$2kfV8umLWIE7;H2 zLu^LxPQ!;()wQp#t>Or@PP|GjYt#r=bA48U-`KHa9o_VZUzC z@OPYszsHM>5B4%%ZtmD1jBUYu03U_K`VfotN&|chpRiZiYi#Df%Jg?A;8Y6Fyr5Eo zM*yr+7W>G(EcON#DUVe&FBCyz;{-#rB3>d|v){6}**okHe`ysSB_goiZnC$q-U_uU zQL}=H$YvG(=eY{wqGf~v&=Uj;<3Cpb(%DU=V19z)J|Ueve>r$eo0P?qnWj<0BA;KsW+I1Vllt;Xq(66f_X? zi1`RaARxfj-NQy%v$|TlXSVC%X*Lm&zPDFSi?6w<%+M6BhMgMg%2I%AE>b|FD+ zA~tiEqY;p?yUK-vw!W%iNwsy=HDmqNzM2Xl@jU*$sJxa-yF-suK38M3G!zqw4>)-t z5F66hh-Q6lNmc~egkJG~>kG$5c0X*xfw9L&Z;ylmL zNSr3l5NC;V2pAABB9MT9sgbxqTm%`!R|uF9NM?Nqqy&4L3QX6D+gz6$#J9vv;uZpl z2v`uXB9PRGH}Depn5SdIG5powXQtQrKNG)jDtLf^E!f!{-{Du{DgGPOu*2$!-w{Y< zGeV?)0&fG!BeAy95Xk&1q>&`q3VQ_z02Uy21Y5(_t|VXL=}0V!bXJK#M)0sXrbI|a z{iBrxx55jM#kI<2GrM=J8ZfY~YgOgw_<{-Tn{{x8j3HymI3Ax=L6+2z+F)X08+8%O zL%@ze@i|gQ>hVnjX(SVH0~MJFULh^PMTs2(MF_YN$bCUbWD=R&BBVkD@?H=UnU42P zGK0({vk=Hfz=44CFA0UVPn;g$E%5)nQIbU=RTOZ|%7wvNt)%0Ndu3=>{4ZkiWz3w& z>w%+W4+LD?sN5{CdA7;+SQn%Q50eYoII$o*lU>S%#-Pm_A5>e(Rt;oVp8f9&t%+C3 z?m??Hf#`v^bgR`6oM>&;w-?!;XIM-2Ci{@(WM9%p`pJG|1zCvz_N7t;$`J4(@G=5z z5NL})I|N=?i`QfzSw#*a2a`j{q2w^Knp>Xs2r>w^Mo@-eCW2WA<{)Sf-m>1;jVE!u zSV?q+$4DG0)a=g)bXZBUBqApv&=G-d2s{ctO-eVvK~BTMBBvtIsh*sUKo>USH2lji z$T=au=v*#r@f>Yn9=VWH^8ZFVa#1MSA<(rY+&xz*x$N(V_uPZXdU6xbuz_rVYO;}B zMZQO_CfAT_$#vvyM%n&E}Jr$cvr<-!_#*Kh1p=c^l8>#DA({3peQP}_dx!j`R4@xqfXhwfIk zFs5g`$ap<;cR;AGKPXQXi2okJ?a|gan@N%ZynokvR_8pXyDxh$v!;bhm0+SJ#(nz_Q&3h1dBV>MhXja;C z=5YX++G4%~HcxfLr1(H!8aILXgp)*B3qp6QR|ugehcE*pP<_~~2+aJ)%!t5_mQMYs zfgD-|RY~=y1|TpSfjM{^eiMPYjZ{@L+Ykiih1eEwY#pdtj;#)X`7LatIkqv>Snfa| zh`?K+Gp36Yk}alK>h%!cB#v(($2W!JTNDJ@G08KiH#v}*)GTT?g%Oq@@HPTV5qPJO znoG^2=2Q5&%MhqXpaFrEp;>yHBf)K!w~#F7NLEnqat8t{5O{vZBvK(2?|fba3SkS> zT53ZGYCQ+l$U$x5pjQ2J(rBWkQxmnDV@=pj?Vxs2yAW87z#0VBBCxKJ+C%N7-luTL zS&zUb1n^V0gkV46U=Jd&p#}C32YVPVDLxQr_6e>^*dTlpr<*| ztsLk%4is0c|5F5rh$AhXzM`&jpkGs$DeX5Dj(*z_*nz-K1a>u2*P2)NTLgB8R(CIl zSxVtrq@Ma70bH*(Z++BH81tXSNsEa`)UP3~Cmh%NmgwgTZjeynp~3r*YPL;JI-+5*z<#Fo-WOKc64* za}GL&RyA|baU92In1j}E^KfMc3ABmE&aOIwz)=J~N8nf^ZK18y z7&;k&FA(^$StQN-?2>%YP_ z(Ie?m^k@|VIQm{g;5q^~8tJi|sOSj@d>azgEsnADb&e6oyPGYHQ~z~YTP)0>=Y_E5 za#*)HtRRQ=pJ4kUW%6Pgze#AMm(Xw1OX+tIxQoDd2w=tj&`2+*SJ3a$^$7fkz+4UUp1?uP0N^HT|N$&~a?B;NO;c(vP za3211mgosBoj#^N!4)yRpFV)VVuQ#P!B zbrOCjQu|^KLVp=*^;@~He{&u&)FsoMqR-(}k3LPGp|MPUN8k?xo~?wB=?nBlZcqFZ zK^R=?8k%v1zE)3PMUaOeXm)D)2JpVi_H9mO>09*eUhO)y9a-n|52@@_S+|nD1v=xj zb(34=yi5Q1?W@H}xr20t2IGOqiK5Fh(W;K{>mey$NgGlJH?N-Dlsf^i6{5LB;ZoJ;{z zh@b{RErRjE9wkjaFVpT{T2gzN_SiJu4xk>JW-~gdyA+MA8dC9GEKFCX$G>!=J2AZ& z?Ac!-h{s`KGdkMU_?=&DCgW#tA@L6&Y92F?sp7Usn24Z-&FIHd>mg5likHIUGeetB zmoAbP4QEE<*9mwmHB2p&&x~Y7HIFC>!DKur1Z@bWyvH~}1~ZNsk6#?)xzgYe0#gx8 z$5F(`W&}@`Yl2^t2LhAvQ>QR*bZgfsiF?@?U%0<S6dSEo)%v!`VW?>0-3nT_A+@WNU6_k7P|g19o_uGKSdA(;JKV9cVw zT5>&$`OMPiD#q`D8NBtc!zIN=Tu!XQr36<{G~(i74OdOz6sB);L4ga1isn+HM{{xE z$5p=27ZupRZ0y3N-jyuiwc^QnT3#Y9^6We(E-F4EkCA7{E95QmJMsteC!FFwB7Y^H zQd%m9@=#symnPk*o>XtD9Di}r4}W1&hrcozLye;*;IB z7`7m6QP`5OrD4m$R)if0dl()WZVWF8?;PGQyfS=1cvbk|@S)+=;UmHWZ1|+`$>DE= zPYa(BJ}Z1q_}uUn;U9*d4gWPl7m*oJ88IPZdc>@VIT7- z1i|Zqxq>Bv<%0EsO@b|gCc%z?V3**a;E>>m;F#dJ;Dq3^;Hu!d;HKcV;Ev#t;8(#@ z!80LG2!*jiv(PF`7N!c*g_%N^&@C($mIylwapV;C6IKcb2&;s3!coF8!g0b0!ihpw zxKwylcwTr(__gqg@S5<3@SzBb2oWiwMUf(@NG4K>Vnr%Zz#_7Wl0-I9ipU`<6uCqm zQK`r)>Lz+s)Lqn5R3i$Ario^VW{KvA=8BexmWq~%R*33FD@8j*=R`NfKpY_!i6g~Q zu}rKG8^sA?lQ>aaB(4qqI@UQK?bsQCU$rQMpm&Q3Io@qeev4MvaUb9knUynnWQnN-UBj ziA|Cr$&%zqawVN4BPEk0QzTO*GbFPlb0mQV$$H5)$#%(3$!^JB$sx&c$qC6R$r;I4 zlFO1Sl53J1lKYZpQjt_AwMy;MLa9qyEG?0?leU+3ly;VOl~zcHO20If2>08o;(zViU(vPGEqz9#kq(`KmOYcY@Mf0P>qXp5T=*VbEbab>lS{WT1h*m|X zM`uQ7N86+Gq8-r%(M8e4(WTKZN4JgkMURV~9lbPqTl5FfXQCg=!eugPCO;zoT>gdplKhVRJNXatpXB%D59AN!j}^3{m7=vGOc9|FD#VH? zg;Wu*NLF|ieH7yqixrKEy^2GM6N*!cGm3MH3yN!s8;YBX+lo5@#dpe9$|Pk+70NZrjmn+MPn3t1N0rBvCzYp_XO-ubmzCcuA1WUy zpD3Tk2xH=7Qe%o^d@=oEDq{x3RK*OASr+qN%*L3_F8k-&)$c)X7EsiaTEsK3Q))zZ0c3kY_*f(OQ#mZt0g zs#MjeMytlE#;aJ>B-Lcq8>+dgWvWKid#W|6b*inZCe@CBYL{w{>Za-swL~4K)~Msv zdUdM0Q0-C|t4q{n>X+4R)vu`gsQaq@>I!v#^+5F?^$_(i^?3DEb%T1R`jq;f`ghGs z8nGryBh|<>3QfF5uQ6&&nnaCNu9qbg`=epy%le#my^SX@(l$Bm%(EwGqf?ZGqgAKGz>5x!y3Z@!&$>O##Tm=QEHSM zV~lY|lQG>`Xe=_ijK#)w#(u{B#wz1r<4|L@af}feCmW|4XBcN2-!#5sTw$y?t~Bm5 z9x)y>erY^uyb&oPo8B?4Hhp9| zW;$!SVEW4Rjp>@{uIYQzkEVO3pH07*#pYylNAqBFV2pXZd7>GaUpG%NFEPJoUTa=& z-elftZZhvP?>8SbA2J^?pEF-JUol@Z-!R`b|6u;f{ImHN^B;+HVq~HsF(xrCQJrW^ zG$&dTlM_=Ca}(W(T@nW+PEK5r*pS$mxH@rN;wOp65>F>yu|P|NMQDk%NG)mNzY{EZZ#GEjul{ zEhjB!Eaxm2Eniu_wcNJcwR~@RXjNHt)^^rz*4M0)tZS@0tcR_iTaQ~$TF+R|TQ6BJ zTd!JgSRYxRSf5&-C4nR|iAidm6rLnZ3W$?TNuH!mNrRG>C2dYRmh?^1ugP?Bc(O2A zoGeL>NmeCmll95Q;@GwPZH=7aOp(wuRXuY(ksZrnJS` z)V6q=!Iof4v8CIxY&kZMt=#6fRoDjD2HA$%hTCdwqikbs6Knz7B->Kk@_?=0)@WO8 zTW8y7+hS|7?X>N&?X!Jk+iyE=J7GIzJDZZ7Qk+tfQkK#tWmn3-rVUTKp7vAP{j>*ZkJ5eV!_tSR*QAe3zn%U| z`lIwG=}$9iGuVtt8Iv=nW`fL!%z!XcoGHnilesjrF>`h1y3CE4TQc`#?#uiz^W)4< zGC$3{p4BSLlJ#;{=d5m7J+gXbRb~y#8lF{?RhKm?YfRRZtQlFevfj*kD{EoalB}g! z>#{av?a4Zj^=a1Otk1KKXPwWwl=XGiH(A%RZe;Va4cXr8s_dHVk=bLi$7R2sJu7=o zAbW21{Oq@~7iO=_UX#5pdt>&t?Cse*vv+47%082QIs0n%jqF?5cd~!Zewh6@``7H> zv!CTCa|&}Rb0+7^&Y7DN%vq4LJZE*zx||I;n{&42H0A8bIgoQG=Sa@6oRc}HbI#>l z$hn-Tw|^|*P3g~P0P*8b>6$_Hp)gRyk{& zbzsR>`6rAdka4) zJXZK+;mN`?h35({6kaO4QFyQLVd3M#-wFeN7J(wNh%S;8$%^zvNku6|=|x#Z_99o2 zr>L~ZThzAbm7*a<^NV&Coh|yN=vvXYMYoE6Dtc1%ThZ@D&s;ngbO~HhE~!iIigT%5 z@h-h9-IeKbx!Sm1admWcalPvDxhh-(T!UOgUDd8xu5GS!u7|E?Zr~=}v|A8x%iIcg zj9cZ_xZ~Y=caq!Y&UY8N-R=^18+SW*2X`m8-(BghagTP7bHC=ERw(9iv`7^;>coYaiDlsaj&~W_#v(=6jZUmV4?wjh>C3O`a{DL!L99^PWqd z%bu&A>z;chbV+21uEbbkF0q!_O43R)OL9u`O4^pRFX>p)xujc3kCNUceM|f$6(z$; z#+J-4SzGd9$?1~sO36}1Y0pxBX;o=mDJq>-IAcd#rAq^)%S-D^SC*bDy|H_EH@ z#(6bfoj1{&uDT zcb#{mcZ;{l8`$C9=l#^z-q+Dr?i=F6U%2~5`o{Ri`zHEk`sVoN`hvcNzQw+`eed}8 z`)>J#e!Ji0f7##J-_76GKfpi4Ki>bE{|*0i|4jdE|J(j${uTZP|0@4#{}z9fe}{jU z|6~7t|0n)q{%igl{#*V#{_p)i`G595^gr=G^*`&!GxQVpi|!X2dhZ5d=r^+|^ttOfG` delta 10372 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 Bool { + return status == StatusCode.success + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift index 5a1c705..37016a2 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift @@ -8,26 +8,55 @@ import Foundation -struct RequestBuilder{ - var baseUrl: String = "" - var path: String = "" - var method: String = "get" - var scheme: String = "https" - var urlComp : URLComponents +struct RequestBuilder { + enum ContentMode { + case jsonApp + + func accept() -> String { + switch self { + case .jsonApp: + return "application/json" + } + } + + func contentType() -> String { + switch self { + case .jsonApp: + return "application/json" + } + } + } + private let urlComponents: URLComponents + public var scheme: String = "https" + public var method: String = "get" + public var path: String = "/" + public var body: Data? + public var headers: [String: String]? + public var contentMode: ContentMode = .jsonApp - init(baseUrl: String){ - self.urlComp = URLComponents(string: baseUrl)! - self.baseUrl = baseUrl + init(baseUrl: String) { + self.urlComponents = URLComponents(string: baseUrl)! } - mutating func url() -> URL? { - var u = urlComp - u.path = self.path - u.scheme = self.scheme - - return u.url - // return URL(string: "\(baseUrl)\(path)") - + func url() -> URL? { + var comps = self.urlComponents + comps.scheme = scheme + comps.path = path + return comps.url } + func request() -> URLRequest? { + guard let url = url() else { return nil } + var req = URLRequest(url: url) + req.httpMethod = method + req.httpBody = body + req.addValue(contentMode.accept(), forHTTPHeaderField: "Accept") + req.addValue(contentMode.contentType(), forHTTPHeaderField: "Content-Type") + if let headers = self.headers { + for (key, value) in headers { + req.addValue(value, forHTTPHeaderField: key) + } + } + return req + } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift new file mode 100644 index 0000000..3bc4a7d --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift @@ -0,0 +1,36 @@ +// +// StatusCode.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +enum StatusCode: Int { + case unkown = 0 + case info + case success + case redirection + case clientError + case serverError + + public init(rawValue: Int) { + switch rawValue { + case 100, 101, 102: + self = .info + case 200, 201, 202, 203, 204, 205, 206, 207, 208, 226: + self = .success + case 300, 301, 302, 303, 304, 305, 306, 307, 308: + self = .redirection + case 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 426, 428, 429, 431, 451: + self = .clientError + case 500, 501, 502, 503, 504, 505, 506, 507, 510, 511: + self = .serverError + default: + self = .unkown + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift index 598d775..ac01fd1 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RequestBuilderTest.swift @@ -9,49 +9,58 @@ import XCTest @testable import Fakestagram_Xcode10 - -class RequestBuilderTest: XCTestCase { - +class RequestBuilderTests: XCTestCase { - func testBuildURL(){ - var builder = RequestBuilder(baseUrl: "http://fakestagram-api.herokuapp.com") + func testBuildValidURL() { + var builder = RequestBuilder(baseUrl: "https://example.com/") builder.path = "/api/v1/accounts" XCTAssertEqual(builder.scheme, "https") XCTAssertEqual(builder.method, "get") - XCTAssertEqual(builder.url(), URL(string: "https://fakestagram-api.herokuapp.com/api/v1/accounts")!) - + XCTAssertEqual(builder.url(), URL(string: "https://example.com/api/v1/accounts")!) } - func testBuildInvalidurl(){ - var builder = RequestBuilder(baseUrl : "example.com") - builder.path = "//@3èrw456-123432432" + + func testBuildInvalidURL() { + var builder = RequestBuilder(baseUrl: "example.com") + builder.path = "//@3`-" XCTAssertNil(builder.url()) } - - func testBuildForceSchemeURL(){ - var builder = RequestBuilder(baseUrl : "http://fakestagram-api.herokuapp.com/") - XCTAssertEqual(builder.url(), URL(string: "https://fakestagram-api.herokuapp.com")!) + func testBuildForceSchemeURL() { + let builder = RequestBuilder(baseUrl: "http://example.com/") + XCTAssertEqual(builder.url(), URL(string: "https://example.com/")!) } - - override func setUp() { - // Put setup code here. This method is called before the invocation of each test method in the class. + func testBuildOverrideSchemeURL() { + var builder = RequestBuilder(baseUrl: "http://example.com/") + builder.scheme = "ftp" + XCTAssertEqual(builder.url(), URL(string: "ftp://example.com/")!) } - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. + func testBuildInvalidRequest() { + var builder = RequestBuilder(baseUrl: "example.com") + builder.path = "//@3`-" + XCTAssertNil(builder.request()) } - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. + func testBuildValidRequest() { + var builder = RequestBuilder(baseUrl: "https://example.com/") + builder.path = "/api/v1/accounts" + builder.method = "post" + builder.body = "{\"a\": 1}".data(using: .utf8) + builder.headers = ["test": "example"] + + let result = builder.request() + XCTAssertNotNil(result) + XCTAssertEqual(result!.httpMethod!, "POST") + XCTAssertEqual(result!.httpBody!, "{\"a\": 1}".data(using: .utf8)) + XCTAssertEqual(result!.allHTTPHeaderFields!, ["Accept": "application/json", "Content-Type": "application/json", "test": "example"]) } - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } + func testBuildValidRequestWithDefaults() { + let result = RequestBuilder(baseUrl: "https://example.com/").request() + XCTAssertNotNil(result) + XCTAssertEqual(result!.httpMethod!, "GET") + XCTAssertNil(result!.httpBody) + XCTAssertEqual(result!.allHTTPHeaderFields!, ["Accept": "application/json", "Content-Type": "application/json"]) } - } From 0398c9bd7481af82d584c90b4ce02a9c60ec7cce Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 11 Oct 2019 19:55:29 -0500 Subject: [PATCH 05/18] Add DVR with cocoapods --- .DS_Store | Bin 6148 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 6148 -> 8196 bytes .../project.pbxproj | 104 +++ .../xcschemes/xcschememanagement.plist | 2 +- .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 9328 bytes Fakestagram-Xcode10/Podfile | 15 + Fakestagram-Xcode10/Podfile.lock | 16 + Fakestagram-Xcode10/Pods/DVR/LICENSE | 20 + Fakestagram-Xcode10/Pods/DVR/Readme.markdown | 56 ++ .../Pods/DVR/Sources/DVR/Cassette.swift | 68 ++ .../DVR/Sources/DVR/HTTPURLResponse.swift | 57 ++ .../Pods/DVR/Sources/DVR/Interaction.swift | 110 +++ .../Pods/DVR/Sources/DVR/Session.swift | 241 ++++++ .../DVR/Sources/DVR/SessionDataTask.swift | 85 ++ .../DVR/Sources/DVR/SessionDownloadTask.swift | 46 + .../DVR/Sources/DVR/SessionUploadTask.swift | 34 + .../Pods/DVR/Sources/DVR/URLRequest.swift | 86 ++ .../Pods/DVR/Sources/DVR/URLResponse.swift | 37 + Fakestagram-Xcode10/Pods/Manifest.lock | 16 + .../Pods/Pods.xcodeproj/project.pbxproj | 815 ++++++++++++++++++ .../xcschemes/DVR.xcscheme | 60 ++ .../Pods-Fakestagram-Xcode10.xcscheme | 71 ++ .../Pods-Fakestagram-Xcode10Tests.xcscheme | 71 ++ .../xcschemes/xcschememanagement.plist | 32 + .../Target Support Files/DVR/DVR-Info.plist | 26 + .../Pods/Target Support Files/DVR/DVR-dummy.m | 5 + .../Target Support Files/DVR/DVR-prefix.pch | 12 + .../Target Support Files/DVR/DVR-umbrella.h | 16 + .../Target Support Files/DVR/DVR.modulemap | 6 + .../Target Support Files/DVR/DVR.xcconfig | 10 + .../Pods-Fakestagram-Xcode10-Info.plist | 26 + ...estagram-Xcode10-acknowledgements.markdown | 3 + ...Fakestagram-Xcode10-acknowledgements.plist | 29 + .../Pods-Fakestagram-Xcode10-dummy.m | 5 + .../Pods-Fakestagram-Xcode10-umbrella.h | 16 + .../Pods-Fakestagram-Xcode10.debug.xcconfig | 6 + .../Pods-Fakestagram-Xcode10.modulemap | 6 + .../Pods-Fakestagram-Xcode10.release.xcconfig | 6 + .../Pods-Fakestagram-Xcode10Tests-Info.plist | 26 + ...ram-Xcode10Tests-acknowledgements.markdown | 27 + ...tagram-Xcode10Tests-acknowledgements.plist | 59 ++ .../Pods-Fakestagram-Xcode10Tests-dummy.m | 5 + ...ts-frameworks-Debug-input-files.xcfilelist | 2 + ...s-frameworks-Debug-output-files.xcfilelist | 1 + ...-frameworks-Release-input-files.xcfilelist | 2 + ...frameworks-Release-output-files.xcfilelist | 1 + ...ods-Fakestagram-Xcode10Tests-frameworks.sh | 171 ++++ .../Pods-Fakestagram-Xcode10Tests-umbrella.h | 16 + ...ds-Fakestagram-Xcode10Tests.debug.xcconfig | 12 + .../Pods-Fakestagram-Xcode10Tests.modulemap | 6 + ...-Fakestagram-Xcode10Tests.release.xcconfig | 12 + .../xcschemes/xcschememanagement.plist | 14 + 54 files changed, 2585 insertions(+), 1 deletion(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/contents.xcworkspacedata create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Fakestagram-Xcode10/Podfile create mode 100644 Fakestagram-Xcode10/Podfile.lock create mode 100644 Fakestagram-Xcode10/Pods/DVR/LICENSE create mode 100644 Fakestagram-Xcode10/Pods/DVR/Readme.markdown create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Cassette.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/HTTPURLResponse.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Interaction.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Session.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDataTask.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDownloadTask.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionUploadTask.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLRequest.swift create mode 100644 Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLResponse.swift create mode 100644 Fakestagram-Xcode10/Pods/Manifest.lock create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/DVR.xcscheme create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10.xcscheme create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10Tests.xcscheme create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-Info.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-dummy.m create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-prefix.pch create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-umbrella.h create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.modulemap create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.xcconfig create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-dummy.m create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-umbrella.h create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-dummy.m create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-input-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-output-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-input-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-output-files.xcfilelist create mode 100755 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-umbrella.h create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig create mode 100644 fakestagram.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store index 1e1240fbe3aa87ad9616694f30b385cfdd642a31..5f18241473cebe1e810b54da4a94d29d0f2d63a5 100644 GIT binary patch delta 640 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMA$h$FMH{<32=ItyS8(bL|vvY7v zY+zyK1uEg5+{h#*$kNr^?_nJFb1 zA*p$;IjLo-dHzK{i6yB;(ICYk`T03O1rT;(QdnkcdAxv#bADb)VrE`y5!gJC8TE-p zG2xkcDf#72`K5U&#b6Ck)4}Y3#F7l4K^)2s89=uK0VfA%ynsY?wXw0Oj)JkVL9LEL zwYj;0j)IA?S#2#R2ZyA(TTonSQ{SxFOO`HMe&{en8zUoxW)OtZ5Q>?B;RrCG%qH_Q zsq>Tt7v<&T=cNOs7$-9_>!F1nqc~6k5xhVJlXID_G711=LcBhNA(f$+p@g9rHA)y; zk@W!C>*Njrt;u%Ti_=GB|ROHOXL;=(rQaB*>0&)0vqS=^eMRU5UXKmH)Q{RVpaP)GCiwXyyMKs` zOB<3gf94a>&>raF5F6OW0ecl?Kp9X5lmTTx8F-5faL*PgKeF$;QSFrhW#C;hAkT+@ zO)&JBI<$`tcD4i{mU!9C;sY#+w>nVi;%6@j%pxp~uvrGly~J zFn(s^D->gAr(IyxVM2%6D+9{FFauJ%PhyGn`aU*u^?L_ZtRX^zHb-ih`w=HmD^6Op zkR+RD`+8@EN5It6yx==d`d+*IQjlP8!1M3Xd5*Vh%_!+~?FvoxTd{R^l19TbP`BE7$N}$$9=g0MB5dZPW4_R1Htq$z=OToep!j;T zQ3`+FEdTjsqf~I6o#Y`>qw|`J7FKxi{1o@3Y{aV1*WN&U&gdf>pAU2^IlP5k#6!`% z9nhZ0YcpG8T1VK=&tkLxB9r|kZ#S?SNG@mfjD4GseO>o|Qlp{_ycz@JZsv;A|BH`* z|9`dh>BP!_GVuHim{OzJsB<1)TMx}BTXn#;&L$#ysY7eR&hF+!TaFX^KMZ*sP*rR~ UkEuhRq3DZ%r9nGo;6)j@2haBkrvLx| delta 133 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGjdEU6q~50$jCG?VE1GL8J5Wl1+6E)65wOv zI5&Bopbulf#=-=)#q1m$g3LhWKp?;kBwRr{Hx_ /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + F25810F70127620E6FEE7713 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Fakestagram-Xcode10-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 7701BEA9233F1B1B0004C30D /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -390,6 +490,7 @@ }; 7701BECB233F1B1C0004C30D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 46A679CEAFBC334DF6FC73B9 /* Pods-Fakestagram-Xcode10.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; @@ -408,6 +509,7 @@ }; 7701BECC233F1B1C0004C30D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D65BF6830E7358A7FE742F2E /* Pods-Fakestagram-Xcode10.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; @@ -426,6 +528,7 @@ }; 7701BECE233F1B1C0004C30D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DDB3C91F541254DDBC4C4837 /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -447,6 +550,7 @@ }; 7701BECF233F1B1C0004C30D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 82459500856F6D726FFB5B8E /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist index 117850a..08505b2 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Fakestagram-Xcode10.xcscheme_^#shared#^_ orderHint - 0 + 3 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/contents.xcworkspacedata b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..962f334 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e2430144ecbf57da3df4bc9fd131f9732d579b43 GIT binary patch literal 9328 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 Interaction? { + for interaction in interactions { + let interactionRequest = interaction.request + + // Note: We don't check headers right now + if interactionRequest.httpMethod == request.httpMethod && interactionRequest.url == request.url && interactionRequest.hasHTTPBodyEqualToThatOfRequest(request) { + return interaction + } + } + return nil + } +} + + +extension Cassette { + var dictionary: [String: Any] { + return [ + "name": name as Any, + "interactions": interactions.map { $0.dictionary } + ] + } + + init?(dictionary: [String: Any]) { + guard let name = dictionary["name"] as? String else { return nil } + + self.name = name + + if let array = dictionary["interactions"] as? [[String: Any]] { + interactions = array.compactMap { Interaction(dictionary: $0) } + } else { + interactions = [] + } + } +} + +private extension URLRequest { + func hasHTTPBodyEqualToThatOfRequest(_ request: URLRequest) -> Bool { + guard let body1 = self.httpBody, + let body2 = request.httpBody, + let encoded1 = Interaction.encodeBody(body1, headers: self.allHTTPHeaderFields), + let encoded2 = Interaction.encodeBody(body2, headers: request.allHTTPHeaderFields) + else { + return self.httpBody == request.httpBody + } + + return encoded1.isEqual(encoded2) + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/HTTPURLResponse.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/HTTPURLResponse.swift new file mode 100644 index 0000000..7078b3d --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/HTTPURLResponse.swift @@ -0,0 +1,57 @@ +import Foundation + +// There isn't a mutable HTTPURLResponse, so we have to make our own. +class HTTPURLResponse: Foundation.HTTPURLResponse { + + // MARK: - Properties + + private var _url: URL? + override var url: URL? { + get { + return _url ?? super.url + } + + set { + _url = newValue + } + } + + private var _statusCode: Int? + override var statusCode: Int { + get { + return _statusCode ?? super.statusCode + } + + set { + _statusCode = newValue + } + } + + private var _allHeaderFields: [AnyHashable: Any]? + override var allHeaderFields: [AnyHashable: Any] { + get { + return _allHeaderFields ?? super.allHeaderFields + } + + set { + _allHeaderFields = newValue + } + } +} + + +extension HTTPURLResponse { + convenience init(dictionary: [String: Any]) { + let url = URL(string: dictionary["url"] as! String)! + + self.init(url: url, mimeType: nil, expectedContentLength: 0, textEncodingName: nil) + + if let headers = dictionary["headers"] as? [String: String] { + allHeaderFields = headers + } + + if let status = dictionary["status"] as? Int { + statusCode = status + } + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Interaction.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Interaction.swift new file mode 100644 index 0000000..b37af0b --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Interaction.swift @@ -0,0 +1,110 @@ +import Foundation + +struct Interaction { + + // MARK: - Properties + + let request: URLRequest + let response: Foundation.URLResponse + let responseData: Data? + let recordedAt: Date + + + // MARK: - Initializers + + init(request: URLRequest, response: Foundation.URLResponse, responseData: Data? = nil, recordedAt: Date = Date()) { + self.request = request + self.response = response + self.responseData = responseData + self.recordedAt = recordedAt + } + + + // MARK: - Encoding + + static func encodeBody(_ body: Data, headers: [String: String]? = nil) -> AnyObject? { + if let contentType = headers?["Content-Type"] { + // Text + if contentType.hasPrefix("text/") { + // TODO: Use text encoding if specified in headers + return NSString(data: body, encoding: String.Encoding.utf8.rawValue) + } + + // JSON + if contentType.hasPrefix("application/json") { + do { + return try JSONSerialization.jsonObject(with: body, options: []) as AnyObject + } catch { + return nil + } + } + } + + // Base64 + return body.base64EncodedString(options: []) as AnyObject? + } + + static func dencodeBody(_ body: Any?, headers: [String: String]? = nil) -> Data? { + guard let body = body else { return nil } + + if let contentType = headers?["Content-Type"] { + // Text + if let string = body as? String , contentType.hasPrefix("text/") { + // TODO: Use encoding if specified in headers + return string.data(using: String.Encoding.utf8) + } + + // JSON + if contentType.hasPrefix("application/json") { + do { + return try JSONSerialization.data(withJSONObject: body, options: []) + } catch { + return nil + } + } + } + + // Base64 + if let base64 = body as? String { + return Data(base64Encoded: base64, options: []) + } + + return nil + } +} + + +extension Interaction { + var dictionary: [String: Any] { + var dictionary: [String: Any] = [ + "request": request.dictionary, + "recorded_at": recordedAt.timeIntervalSince1970 + ] + + var responseDictionary = self.response.dictionary + + if let httpResponse = response as? Foundation.HTTPURLResponse { + responseDictionary["headers"] = httpResponse.allHeaderFields + responseDictionary["status"] = httpResponse.statusCode + } + + if let data = responseData, let body = Interaction.encodeBody(data, headers: responseDictionary["headers"] as? [String: String]) { + responseDictionary["body"] = body + } + + dictionary["response"] = responseDictionary + + return dictionary + } + + init?(dictionary: [String: Any]) { + guard let request = dictionary["request"] as? [String: Any], + let response = dictionary["response"] as? [String: Any], + let recordedAt = dictionary["recorded_at"] as? TimeInterval else { return nil } + + self.request = NSMutableURLRequest(dictionary: request) as URLRequest + self.response = HTTPURLResponse(dictionary: response) + self.recordedAt = Date(timeIntervalSince1970: recordedAt) + self.responseData = Interaction.dencodeBody(response["body"], headers: response["headers"] as? [String: String]) + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Session.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Session.swift new file mode 100644 index 0000000..3cf1aab --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/Session.swift @@ -0,0 +1,241 @@ +import Foundation + +open class Session: URLSession { + + // MARK: - Properties + + public static var defaultTestBundle: Bundle? { + return Bundle.allBundles.first { $0.bundlePath.hasSuffix(".xctest") } + } + + open var outputDirectory: String + public let cassetteName: String + public let backingSession: URLSession + open var recordingEnabled = true + + private let testBundle: Bundle + + private var recording = false + private var needsPersistence = false + private var outstandingTasks = [URLSessionTask]() + private var completedInteractions = [Interaction]() + private var completionBlock: (() -> Void)? + + override open var delegate: URLSessionDelegate? { + return backingSession.delegate + } + + // MARK: - Initializers + + public init(outputDirectory: String = "~/Desktop/DVR/", cassetteName: String, testBundle: Bundle = Session.defaultTestBundle!, backingSession: URLSession = URLSession.shared) { + self.outputDirectory = outputDirectory + self.cassetteName = cassetteName + self.testBundle = testBundle + self.backingSession = backingSession + super.init() + } + + + // MARK: - URLSession + + open override func dataTask(with request: URLRequest) -> URLSessionDataTask { + return addDataTask(request) + } + + open override func dataTask(with request: URLRequest, completionHandler: @escaping ((Data?, Foundation.URLResponse?, Error?) -> Void)) -> URLSessionDataTask { + return addDataTask(request, completionHandler: completionHandler) + } + + open override func downloadTask(with request: URLRequest) -> URLSessionDownloadTask { + return addDownloadTask(request) + } + + open override func downloadTask(with request: URLRequest, completionHandler: @escaping (URL?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { + return addDownloadTask(request, completionHandler: completionHandler) + } + + open override func uploadTask(with request: URLRequest, from bodyData: Data) -> URLSessionUploadTask { + return addUploadTask(request, fromData: bodyData) + } + + open override func uploadTask(with request: URLRequest, from bodyData: Data?, completionHandler: @escaping (Data?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + return addUploadTask(request, fromData: bodyData, completionHandler: completionHandler) + } + + open override func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask { + let data = try! Data(contentsOf: fileURL) + return addUploadTask(request, fromData: data) + } + + open override func uploadTask(with request: URLRequest, fromFile fileURL: URL, completionHandler: @escaping (Data?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + let data = try! Data(contentsOf: fileURL) + return addUploadTask(request, fromData: data, completionHandler: completionHandler) + } + + open override func invalidateAndCancel() { + recording = false + outstandingTasks.removeAll() + backingSession.invalidateAndCancel() + } + + + // MARK: - Recording + + /// You don’t need to call this method if you're only recoding one request. + open func beginRecording() { + if recording { + return + } + + recording = true + needsPersistence = false + outstandingTasks = [] + completedInteractions = [] + completionBlock = nil + } + + /// This only needs to be called if you call `beginRecording`. `completion` will be called on the main queue after + /// the completion block of the last task is called. `completion` is useful for fulfilling an expectation you setup + /// before calling `beginRecording`. + open func endRecording(_ completion: (() -> Void)? = nil) { + if !recording { + return + } + + recording = false + completionBlock = completion + + if outstandingTasks.count == 0 { + finishRecording() + } + } + + + // MARK: - Internal + + var cassette: Cassette? { + guard let path = testBundle.path(forResource: cassetteName, ofType: "json"), + let data = try? Data(contentsOf: URL(fileURLWithPath: path)), + let raw = try? JSONSerialization.jsonObject(with: data, options: []), + let json = raw as? [String: Any] + else { return nil } + + return Cassette(dictionary: json) + } + + func finishTask(_ task: URLSessionTask, interaction: Interaction, playback: Bool) { + needsPersistence = needsPersistence || !playback + + if let index = outstandingTasks.firstIndex(of: task) { + outstandingTasks.remove(at: index) + } + + completedInteractions.append(interaction) + + if !recording && outstandingTasks.count == 0 { + finishRecording() + } + + if let delegate = delegate as? URLSessionDataDelegate, let task = task as? URLSessionDataTask, let data = interaction.responseData { + delegate.urlSession?(self, dataTask: task, didReceive: data as Data) + } + + if let delegate = delegate as? URLSessionTaskDelegate { + delegate.urlSession?(self, task: task, didCompleteWithError: nil) + } + } + + + // MARK: - Private + + private func addDataTask(_ request: URLRequest, completionHandler: ((Data?, Foundation.URLResponse?, NSError?) -> Void)? = nil) -> URLSessionDataTask { + let modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + let task = SessionDataTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task) + return task + } + + private func addDownloadTask(_ request: URLRequest, completionHandler: SessionDownloadTask.Completion? = nil) -> URLSessionDownloadTask { + let modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + let task = SessionDownloadTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task) + return task + } + + private func addUploadTask(_ request: URLRequest, fromData data: Data?, completionHandler: SessionUploadTask.Completion? = nil) -> URLSessionUploadTask { + var modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + modifiedRequest = data.map(modifiedRequest.appending) ?? modifiedRequest + let task = SessionUploadTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task.dataTask) + return task + } + + private func addTask(_ task: URLSessionTask) { + let shouldRecord = !recording + if shouldRecord { + beginRecording() + } + + outstandingTasks.append(task) + + if shouldRecord { + endRecording() + } + } + + private func persist(_ interactions: [Interaction]) { + defer { + abort() + } + + // Create directory + let outputDirectory = (self.outputDirectory as NSString).expandingTildeInPath + let fileManager = FileManager.default + if !fileManager.fileExists(atPath: outputDirectory) { + do { + try fileManager.createDirectory(atPath: outputDirectory, withIntermediateDirectories: true, attributes: nil) + } catch { + print("[DVR] Failed to create cassettes directory.") + } + } + + let cassette = Cassette(name: cassetteName, interactions: interactions) + + // Persist + + + do { + let outputPath = ((outputDirectory as NSString).appendingPathComponent(cassetteName) as NSString).appendingPathExtension("json")! + let data = try JSONSerialization.data(withJSONObject: cassette.dictionary, options: [.prettyPrinted]) + + // Add trailing new line + guard var string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) else { + print("[DVR] Failed to persist cassette.") + return + } + string = string.appending("\n") as NSString + + if let data = string.data(using: String.Encoding.utf8.rawValue) { + try? data.write(to: URL(fileURLWithPath: outputPath), options: [.atomic]) + print("[DVR] Persisted cassette at \(outputPath). Please add this file to your test target") + return + } + + print("[DVR] Failed to persist cassette.") + } catch { + print("[DVR] Failed to persist cassette.") + } + } + + private func finishRecording() { + if needsPersistence { + persist(completedInteractions) + } + + // Clean up + completedInteractions = [] + + // Call session’s completion block + completionBlock?() + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDataTask.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDataTask.swift new file mode 100644 index 0000000..8ac1a3a --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDataTask.swift @@ -0,0 +1,85 @@ +import Foundation + +final class SessionDataTask: URLSessionDataTask { + + // MARK: - Types + + typealias Completion = (Data?, Foundation.URLResponse?, NSError?) -> Void + + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + private let queue = DispatchQueue(label: "com.venmo.DVR.sessionDataTaskQueue", attributes: []) + private var interaction: Interaction? + + override var response: Foundation.URLResponse? { + return interaction?.response + } + + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: (Completion)? = nil) { + self.session = session + self.request = request + self.completion = completion + } + + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + let cassette = session.cassette + + // Find interaction + if let interaction = session.cassette?.interactionForRequest(request) { + self.interaction = interaction + // Forward completion + if let completion = completion { + queue.async { + completion(interaction.responseData, interaction.response, nil) + } + } + session.finishTask(self, interaction: interaction, playback: true) + return + } + + if cassette != nil { + fatalError("[DVR] Invalid request. The request was not found in the cassette.") + } + + // Cassette is missing. Record. + if session.recordingEnabled == false { + fatalError("[DVR] Recording is disabled.") + } + + let task = session.backingSession.dataTask(with: request, completionHandler: { [weak self] data, response, error in + + //Ensure we have a response + guard let response = response else { + fatalError("[DVR] Failed to record because the task returned a nil response.") + } + + guard let this = self else { + fatalError("[DVR] Something has gone horribly wrong.") + } + + // Still call the completion block so the user can chain requests while recording. + this.queue.async { + this.completion?(data, response, nil) + } + + // Create interaction + this.interaction = Interaction(request: this.request, response: response, responseData: data) + this.session.finishTask(this, interaction: this.interaction!, playback: false) + }) + task.resume() + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDownloadTask.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDownloadTask.swift new file mode 100644 index 0000000..0cd70df --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionDownloadTask.swift @@ -0,0 +1,46 @@ +import Foundation + +final class SessionDownloadTask: URLSessionDownloadTask { + + // MARK: - Types + + typealias Completion = (URL?, Foundation.URLResponse?, NSError?) -> Void + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: Completion? = nil) { + self.session = session + self.request = request + self.completion = completion + } + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + let task = SessionDataTask(session: session, request: request) { data, response, error in + let location: URL? + if let data = data { + // Write data to temporary file + let tempURL = URL(fileURLWithPath: (NSTemporaryDirectory() as NSString).appendingPathComponent(UUID().uuidString)) + try? data.write(to: tempURL, options: [.atomic]) + location = tempURL + } else { + location = nil + } + + self.completion?(location, response, error) + } + task.resume() + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionUploadTask.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionUploadTask.swift new file mode 100644 index 0000000..fb66596 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/SessionUploadTask.swift @@ -0,0 +1,34 @@ +import Foundation + +final class SessionUploadTask: URLSessionUploadTask { + + // MARK: - Types + + typealias Completion = (Data?, Foundation.URLResponse?, NSError?) -> Void + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + let dataTask: SessionDataTask + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: Completion? = nil) { + self.session = session + self.request = request + self.completion = completion + dataTask = SessionDataTask(session: session, request: request, completion: completion) + } + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + dataTask.resume() + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLRequest.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLRequest.swift new file mode 100644 index 0000000..8299383 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLRequest.swift @@ -0,0 +1,86 @@ +import Foundation + +extension URLRequest { + var dictionary: [String: Any] { + var dictionary = [String: Any]() + + if let method = httpMethod { + dictionary["method"] = method as Any? + } + + if let url = url?.absoluteString { + dictionary["url"] = url as Any? + } + + if let headers = allHTTPHeaderFields { + dictionary["headers"] = headers as Any? + } + + if let data = httpBody, let body = Interaction.encodeBody(data, headers: allHTTPHeaderFields) { + dictionary["body"] = body + } + + return dictionary + } +} + + +extension URLRequest { + func appending(headers: [AnyHashable: Any]) -> URLRequest { + guard let headers = headers as? [String: String] else { return self } + + var request = self + + for (key, value) in headers { + request.addValue(value, forHTTPHeaderField: key) + } + + return request + } + + func appending(body: Data?) -> URLRequest { + var request = self + request.httpBody = body + return request + } +} + + +extension NSMutableURLRequest { + convenience init(dictionary: [String: Any]) { + self.init() + + if let method = dictionary["method"] as? String { + httpMethod = method + } + + if let string = dictionary["url"] as? String, let url = URL(string: string) { + self.url = url + } + + if let headers = dictionary["headers"] as? [String: String] { + allHTTPHeaderFields = headers + } + + if let body = dictionary["body"] { + httpBody = Interaction.dencodeBody(body, headers: allHTTPHeaderFields) + } + } +} + + +extension NSMutableURLRequest { + func appendHeaders(_ headers: [AnyHashable: Any]) { + var existingHeaders = allHTTPHeaderFields ?? [:] + + headers.forEach { header in + guard let key = header.0 as? String, let value = header.1 as? String , existingHeaders[key] == nil else { + return + } + + existingHeaders[key] = value + } + + allHTTPHeaderFields = existingHeaders + } +} diff --git a/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLResponse.swift b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLResponse.swift new file mode 100644 index 0000000..b5b4ba2 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/DVR/Sources/DVR/URLResponse.swift @@ -0,0 +1,37 @@ +import Foundation + +// There isn't a mutable URLResponse, so we have to make our own. +class URLResponse: Foundation.URLResponse { + private var _URL: Foundation.URL? + override var url: Foundation.URL? { + get { + return _URL ?? super.url + } + + set { + _URL = newValue + } + } +} + + +extension Foundation.URLResponse { + var dictionary: [String: Any] { + if let url = url?.absoluteString { + return ["url": url as Any] + } + + return [:] + } +} + + +extension URLResponse { + convenience init(dictionary: [String: Any]) { + self.init() + + if let string = dictionary["url"] as? String, let url = Foundation.URL(string: string) { + self.url = url + } + } +} diff --git a/Fakestagram-Xcode10/Pods/Manifest.lock b/Fakestagram-Xcode10/Pods/Manifest.lock new file mode 100644 index 0000000..0efd60f --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Manifest.lock @@ -0,0 +1,16 @@ +PODS: + - DVR (2.0.0) + +DEPENDENCIES: + - DVR + +SPEC REPOS: + trunk: + - DVR + +SPEC CHECKSUMS: + DVR: 062c287b9dc613a84120e44640176e4ef3ecf943 + +PODFILE CHECKSUM: 5075cefd4e51f711421154e70927ac376184d3a8 + +COCOAPODS: 1.8.3 diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..80d08f1 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,815 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 02A29FF79F344740883667E0806F5A66 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; + 0B1310A516B2ED5CAE7A4C3793D6DA1C /* Pods-Fakestagram-Xcode10Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */; }; + 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */; }; + 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */; }; + 308338788F9B3B77D4E38C12C47E10AC /* Pods-Fakestagram-Xcode10Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */; }; + 4F1DADB02773B24E58D1777329F68A7E /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */; }; + 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */; }; + 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */; }; + A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; + A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */; }; + ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */; }; + C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */; }; + D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; + F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */; }; + FBCAF059EFD6C703D776FBB362E17481 /* Pods-Fakestagram-Xcode10-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1439F3DECD7846CEA3E69B3E88985440 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 66AF31B015059ACCE3B6BCF38BA4BBDC; + remoteInfo = "Pods-Fakestagram-Xcode10"; + }; + 9974D5EA1D1ED243B6563957C4CEC20B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 26F44590B017B9CF61B71B978A6C48A9; + remoteInfo = DVR; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponse.swift; path = Sources/DVR/URLResponse.swift; sourceTree = ""; }; + 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10-dummy.m"; sourceTree = ""; }; + 0FE82AE6B1697F13FF38C3D02C494D58 /* Pods-Fakestagram-Xcode10Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10Tests.modulemap"; sourceTree = ""; }; + 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10Tests-umbrella.h"; sourceTree = ""; }; + 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DVR.framework; path = DVR.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cassette.swift; path = Sources/DVR/Cassette.swift; sourceTree = ""; }; + 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionUploadTask.swift; path = Sources/DVR/SessionUploadTask.swift; sourceTree = ""; }; + 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 3E73890292273903A2176A9E1993FA2E /* Pods-Fakestagram-Xcode10.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10.modulemap"; sourceTree = ""; }; + 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.debug.xcconfig"; sourceTree = ""; }; + 61E01DA29E9020DE311127CA7A730B93 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10-acknowledgements.markdown"; sourceTree = ""; }; + 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-umbrella.h"; sourceTree = ""; }; + 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DVR-dummy.m"; sourceTree = ""; }; + 72A73F46FAE3A8FDFFD2828F8B064232 /* Pods-Fakestagram-Xcode10-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-Info.plist"; sourceTree = ""; }; + 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.release.xcconfig"; sourceTree = ""; }; + 78E93B5D323ACF8A3EDDA867EF458AC1 /* DVR-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-prefix.pch"; sourceTree = ""; }; + 7A2E79AE26D80027B271646CE62614F0 /* DVR.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DVR.modulemap; sourceTree = ""; }; + 843E8C88B16D9093ABFC408353516BF6 /* Pods-Fakestagram-Xcode10Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-Info.plist"; sourceTree = ""; }; + 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDownloadTask.swift; path = Sources/DVR/SessionDownloadTask.swift; sourceTree = ""; }; + 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/DVR/URLRequest.swift; sourceTree = ""; }; + 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/DVR/SessionDataTask.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interaction.swift; path = Sources/DVR/Interaction.swift; sourceTree = ""; }; + A4F826DEC7FCAE4942E2ADCF65CD658C /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.plist"; sourceTree = ""; }; + A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10-umbrella.h"; sourceTree = ""; }; + B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DVR.xcconfig; sourceTree = ""; }; + B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Fakestagram_Xcode10.framework; path = "Pods-Fakestagram-Xcode10.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; + BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPURLResponse.swift; path = Sources/DVR/HTTPURLResponse.swift; sourceTree = ""; }; + D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Sources/DVR/Session.swift; sourceTree = ""; }; + D9A1861BF91A580DF65644ABCAFAFFEA /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown"; sourceTree = ""; }; + DA889D455206483CFD98C8295C76C2B3 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Fakestagram-Xcode10Tests-frameworks.sh"; sourceTree = ""; }; + E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.release.xcconfig"; sourceTree = ""; }; + EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10Tests-dummy.m"; sourceTree = ""; }; + F027AE4687C335032B7ED5CCEB007836 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-acknowledgements.plist"; sourceTree = ""; }; + FB417FE726419C01C14DAE6C94F18C73 /* DVR-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DVR-Info.plist"; sourceTree = ""; }; + FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Fakestagram_Xcode10Tests.framework; path = "Pods-Fakestagram-Xcode10Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B3D5D6B487B493B2D48298B3DED84BD9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA9F33D189901C166C02A7C18FAC7466 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA9E0D5BACAFD58B67D414EA701EAA82 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 02A29FF79F344740883667E0806F5A66 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 153D7E5401CB82D6E057DE5F5C753FBD /* Support Files */ = { + isa = PBXGroup; + children = ( + 7A2E79AE26D80027B271646CE62614F0 /* DVR.modulemap */, + B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */, + 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */, + FB417FE726419C01C14DAE6C94F18C73 /* DVR-Info.plist */, + 78E93B5D323ACF8A3EDDA867EF458AC1 /* DVR-prefix.pch */, + 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/DVR"; + sourceTree = ""; + }; + 36CBA0BB6D8786CAE4A2A3F7AC8AF6B1 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + BBAD649145958055D0FAC8C8AD1EC327 /* Pods-Fakestagram-Xcode10 */, + F87451C24581D6C2794E73A4015226BF /* Pods-Fakestagram-Xcode10Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 394E61C0DEC893C865B8E14A3A5E1E80 /* DVR */ = { + isa = PBXGroup; + children = ( + 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */, + BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */, + A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */, + D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */, + 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */, + 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */, + 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */, + 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */, + 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */, + 153D7E5401CB82D6E057DE5F5C753FBD /* Support Files */, + ); + name = DVR; + path = DVR; + sourceTree = ""; + }; + A55FDBB22AC8C6AC62EC0C7D4CB7EDFB /* Pods */ = { + isa = PBXGroup; + children = ( + 394E61C0DEC893C865B8E14A3A5E1E80 /* DVR */, + ); + name = Pods; + sourceTree = ""; + }; + A9BA6E45284AE5B3734522F7A83C6715 /* Products */ = { + isa = PBXGroup; + children = ( + 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */, + B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */, + FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */, + ); + name = Products; + sourceTree = ""; + }; + BBAD649145958055D0FAC8C8AD1EC327 /* Pods-Fakestagram-Xcode10 */ = { + isa = PBXGroup; + children = ( + 3E73890292273903A2176A9E1993FA2E /* Pods-Fakestagram-Xcode10.modulemap */, + 61E01DA29E9020DE311127CA7A730B93 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */, + F027AE4687C335032B7ED5CCEB007836 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */, + 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */, + 72A73F46FAE3A8FDFFD2828F8B064232 /* Pods-Fakestagram-Xcode10-Info.plist */, + A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */, + B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */, + E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */, + ); + name = "Pods-Fakestagram-Xcode10"; + path = "Target Support Files/Pods-Fakestagram-Xcode10"; + sourceTree = ""; + }; + C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { + isa = PBXGroup; + children = ( + 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + A55FDBB22AC8C6AC62EC0C7D4CB7EDFB /* Pods */, + A9BA6E45284AE5B3734522F7A83C6715 /* Products */, + 36CBA0BB6D8786CAE4A2A3F7AC8AF6B1 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C0834CEBB1379A84116EF29F93051C60 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + F87451C24581D6C2794E73A4015226BF /* Pods-Fakestagram-Xcode10Tests */ = { + isa = PBXGroup; + children = ( + 0FE82AE6B1697F13FF38C3D02C494D58 /* Pods-Fakestagram-Xcode10Tests.modulemap */, + D9A1861BF91A580DF65644ABCAFAFFEA /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */, + A4F826DEC7FCAE4942E2ADCF65CD658C /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */, + EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */, + DA889D455206483CFD98C8295C76C2B3 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */, + 843E8C88B16D9093ABFC408353516BF6 /* Pods-Fakestagram-Xcode10Tests-Info.plist */, + 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */, + 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */, + 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */, + ); + name = "Pods-Fakestagram-Xcode10Tests"; + path = "Target Support Files/Pods-Fakestagram-Xcode10Tests"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 784080E16476341D20781AF2902317C5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EAF9C510A1C08A72B5FE636D0A09237D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F1DADB02773B24E58D1777329F68A7E /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F0E62DA26C7A9CC5E06FCA65B53C590D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 308338788F9B3B77D4E38C12C47E10AC /* Pods-Fakestagram-Xcode10Tests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 26F44590B017B9CF61B71B978A6C48A9 /* DVR */ = { + isa = PBXNativeTarget; + buildConfigurationList = BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */; + buildPhases = ( + 784080E16476341D20781AF2902317C5 /* Headers */, + A9F19AE051CBB89DAFBD44FD2E39980F /* Sources */, + B3D5D6B487B493B2D48298B3DED84BD9 /* Frameworks */, + 821CB6386DC60F6A19F6CEAA2E7AEE0B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DVR; + productName = DVR; + productReference = 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */; + productType = "com.apple.product-type.framework"; + }; + 3570D5B3E89889A7109D1B524F6AB0EC /* Pods-Fakestagram-Xcode10Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BBF9A8603F243163C5056107ADFE3BE6 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10Tests" */; + buildPhases = ( + F0E62DA26C7A9CC5E06FCA65B53C590D /* Headers */, + 9EDCD3AEB7946D6F15263CF5B7039A58 /* Sources */, + DA9F33D189901C166C02A7C18FAC7466 /* Frameworks */, + 4FA729235662E8B6828CBE4854ED78D7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 458665E3B29C6665346B49FD95514DD9 /* PBXTargetDependency */, + B7F91ED1F7D1BF929ACFEF0AA7C5B497 /* PBXTargetDependency */, + ); + name = "Pods-Fakestagram-Xcode10Tests"; + productName = "Pods-Fakestagram-Xcode10Tests"; + productReference = FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */; + productType = "com.apple.product-type.framework"; + }; + 66AF31B015059ACCE3B6BCF38BA4BBDC /* Pods-Fakestagram-Xcode10 */ = { + isa = PBXNativeTarget; + buildConfigurationList = EFCDC3E6A99E3966874A0D544F316C37 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */; + buildPhases = ( + EAF9C510A1C08A72B5FE636D0A09237D /* Headers */, + 748948DD1D0E198314D8CED7CFE0514E /* Sources */, + FA9E0D5BACAFD58B67D414EA701EAA82 /* Frameworks */, + 093120623B4C625AA9B7F398B7C81B36 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Fakestagram-Xcode10"; + productName = "Pods-Fakestagram-Xcode10"; + productReference = B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = A9BA6E45284AE5B3734522F7A83C6715 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 26F44590B017B9CF61B71B978A6C48A9 /* DVR */, + 66AF31B015059ACCE3B6BCF38BA4BBDC /* Pods-Fakestagram-Xcode10 */, + 3570D5B3E89889A7109D1B524F6AB0EC /* Pods-Fakestagram-Xcode10Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 093120623B4C625AA9B7F398B7C81B36 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FA729235662E8B6828CBE4854ED78D7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 821CB6386DC60F6A19F6CEAA2E7AEE0B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 748948DD1D0E198314D8CED7CFE0514E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FBCAF059EFD6C703D776FBB362E17481 /* Pods-Fakestagram-Xcode10-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9EDCD3AEB7946D6F15263CF5B7039A58 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0B1310A516B2ED5CAE7A4C3793D6DA1C /* Pods-Fakestagram-Xcode10Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9F19AE051CBB89DAFBD44FD2E39980F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */, + C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */, + 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */, + ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */, + 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */, + F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */, + 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */, + 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */, + 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */, + 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 458665E3B29C6665346B49FD95514DD9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DVR; + target = 26F44590B017B9CF61B71B978A6C48A9 /* DVR */; + targetProxy = 9974D5EA1D1ED243B6563957C4CEC20B /* PBXContainerItemProxy */; + }; + B7F91ED1F7D1BF929ACFEF0AA7C5B497 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-Fakestagram-Xcode10"; + target = 66AF31B015059ACCE3B6BCF38BA4BBDC /* Pods-Fakestagram-Xcode10 */; + targetProxy = 1439F3DECD7846CEA3E69B3E88985440 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 6410F571BA8C1AEC6A19403F1B61B0B5 /* 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_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 = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 73EC3C52C273E4901BFAF8AE282930B4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 839064C9546E914A832C0168D8321EFA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/DVR/DVR-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DVR/DVR-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/DVR/DVR.modulemap"; + PRODUCT_MODULE_NAME = DVR; + PRODUCT_NAME = DVR; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 97172E77B9DF71E94D334322B5D9A612 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/DVR/DVR-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DVR/DVR-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/DVR/DVR.modulemap"; + PRODUCT_MODULE_NAME = DVR; + PRODUCT_NAME = DVR; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A27713CB74E99AF202AADC23200A32F4 /* 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_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_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + BA88BD2F4198BB1D08331F6928972BFA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + BE400BEFB2E8635541EDB53740DCF0F5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6410F571BA8C1AEC6A19403F1B61B0B5 /* Debug */, + A27713CB74E99AF202AADC23200A32F4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97172E77B9DF71E94D334322B5D9A612 /* Debug */, + 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BBF9A8603F243163C5056107ADFE3BE6 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 73EC3C52C273E4901BFAF8AE282930B4 /* Debug */, + 839064C9546E914A832C0168D8321EFA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EFCDC3E6A99E3966874A0D544F316C37 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE400BEFB2E8635541EDB53740DCF0F5 /* Debug */, + BA88BD2F4198BB1D08331F6928972BFA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/DVR.xcscheme b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/DVR.xcscheme new file mode 100644 index 0000000..0f901e0 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/DVR.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10.xcscheme b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10.xcscheme new file mode 100644 index 0000000..ed3d21f --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10Tests.xcscheme b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10Tests.xcscheme new file mode 100644 index 0000000..245e962 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/Pods-Fakestagram-Xcode10Tests.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d62400a --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + DVR.xcscheme + + isShown + + orderHint + 0 + + Pods-Fakestagram-Xcode10.xcscheme + + isShown + + orderHint + 1 + + Pods-Fakestagram-Xcode10Tests.xcscheme + + isShown + + orderHint + 2 + + + SuppressBuildableAutocreation + + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-Info.plist b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-Info.plist new file mode 100644 index 0000000..0a12077 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-dummy.m b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-dummy.m new file mode 100644 index 0000000..2793711 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_DVR : NSObject +@end +@implementation PodsDummy_DVR +@end diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-prefix.pch b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-umbrella.h b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-umbrella.h new file mode 100644 index 0000000..6132b8e --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double DVRVersionNumber; +FOUNDATION_EXPORT const unsigned char DVRVersionString[]; + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.modulemap b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.modulemap new file mode 100644 index 0000000..2f6c814 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.modulemap @@ -0,0 +1,6 @@ +framework module DVR { + umbrella header "DVR-umbrella.h" + + export * + module * { export * } +} diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.xcconfig new file mode 100644 index 0000000..6b2e24d --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/DVR/DVR.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DVR +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DVR +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-dummy.m b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-dummy.m new file mode 100644 index 0000000..b25f176 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Fakestagram_Xcode10 : NSObject +@end +@implementation PodsDummy_Pods_Fakestagram_Xcode10 +@end diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-umbrella.h b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-umbrella.h new file mode 100644 index 0000000..23886b8 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_Fakestagram_Xcode10VersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Fakestagram_Xcode10VersionString[]; + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig new file mode 100644 index 0000000..b52088a --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig @@ -0,0 +1,6 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap new file mode 100644 index 0000000..7ded779 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Fakestagram_Xcode10 { + umbrella header "Pods-Fakestagram-Xcode10-umbrella.h" + + export * + module * { export * } +} diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig new file mode 100644 index 0000000..b52088a --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig @@ -0,0 +1,6 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown new file mode 100644 index 0000000..bc283b5 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown @@ -0,0 +1,27 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## DVR + +Copyright (c) 2015 Venmo + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.plist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.plist new file mode 100644 index 0000000..69b32d2 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-acknowledgements.plist @@ -0,0 +1,59 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2015 Venmo + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + DVR + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-dummy.m b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-dummy.m new file mode 100644 index 0000000..f8c8f0e --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Fakestagram_Xcode10Tests : NSObject +@end +@implementation PodsDummy_Pods_Fakestagram_Xcode10Tests +@end diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-input-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..d7c0d04 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh +${BUILT_PRODUCTS_DIR}/DVR/DVR.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-output-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..31b1df9 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DVR.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-input-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..d7c0d04 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh +${BUILT_PRODUCTS_DIR}/DVR/DVR.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-output-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..31b1df9 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DVR.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh new file mode 100755 index 0000000..4c461ee --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-frameworks.sh @@ -0,0 +1,171 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DVR/DVR.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DVR/DVR.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-umbrella.h b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-umbrella.h new file mode 100644 index 0000000..8b9e7b5 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_Fakestagram_Xcode10TestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Fakestagram_Xcode10TestsVersionString[]; + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig new file mode 100644 index 0000000..b9acfae --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "DVR" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap new file mode 100644 index 0000000..aab9bab --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Fakestagram_Xcode10Tests { + umbrella header "Pods-Fakestagram-Xcode10Tests-umbrella.h" + + export * + module * { export * } +} diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig new file mode 100644 index 0000000..b9acfae --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "DVR" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/fakestagram.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist b/fakestagram.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..53f76f5 --- /dev/null +++ b/fakestagram.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + fakestagram.xcscheme_^#shared#^_ + + orderHint + 0 + + + + From 6cffee3b5b2276db239007998dbc719c8d6b9126 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 11 Oct 2019 20:58:27 -0500 Subject: [PATCH 06/18] changes are updated --- Fakestagram-Xcode10/.DS_Store | Bin 8196 -> 6148 bytes .../project.pbxproj | 89 +++- .../UserInterfaceState.xcuserstate | Bin 9328 -> 32916 bytes .../DataSource/Cliente.swift | 64 --- .../DataSource/CodableSerializer.swift | 35 ++ .../DataSource/RestClient.swift | 58 +++ .../Fakestagram-Xcode10/Models/Account.swift | 16 + .../Fakestagram-Xcode10/Models/Post.swift | 38 ++ .../Fakestagram-Xcode10/Network/Client.swift | 68 +++ .../HttpResponse.swift | 10 +- .../RequestBuilder.swift | 14 +- .../{DataSource => Network}/StatusCode.swift | 6 +- .../PostViewController.swift | 95 +++- .../PostsTableViewController.swift | 78 +-- .../RestClientTest.swift | 48 ++ .../casettes/posts.successful.json | 444 ++++++++++++++++++ .../casettes/show_post.successful.json | 57 +++ .../Pods/Pods.xcodeproj/project.pbxproj | 4 +- 18 files changed, 964 insertions(+), 160 deletions(-) delete mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/Cliente.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CodableSerializer.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RestClient.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift rename Fakestagram-Xcode10/Fakestagram-Xcode10/{DataSource => Network}/HttpResponse.swift (83%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{DataSource => Network}/RequestBuilder.swift (93%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{DataSource => Network}/StatusCode.swift (91%) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RestClientTest.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/posts.successful.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/show_post.successful.json diff --git a/Fakestagram-Xcode10/.DS_Store b/Fakestagram-Xcode10/.DS_Store index 709c6e23cea95e61b6b00edc8396c522b630f190..f5dfbe968a36cda8d6d822f8b095282ffd5afaa1 100644 GIT binary patch delta 167 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50$jGxXU^g=(&tx8fH%xlBC(jf7 z!{o{``Hi5{$O@vOAb0hB~q|TOtxU%$EKzLR4+ey1B>qD zN>)J$WJ4UH@42sCanKP>0m3j01)6N~Yym*!3=%*C)hCy-X-vM$*0;Guq=9*21CJmx mND3&)4J2Ga9@{L)@tt`xzli5#e;y7FMu?voHplbKVFm!#Bu1nF diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 24cf546..908ddd7 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -3,15 +3,22 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ - 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50012348F45900CDE263 /* RequestBuilder.swift */; }; - 6C2C50042349177F00CDE263 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50032349177F00CDE263 /* HttpResponse.swift */; }; - 6C2C50062349185400CDE263 /* StatusCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2C50052349185400CDE263 /* StatusCode.swift */; }; + 6C1DC80C23516554001E8065 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80B23516554001E8065 /* Account.swift */; }; + 6C1DC80E2351656A001E8065 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80D2351656A001E8065 /* Post.swift */; }; + 6C1DC811235165A8001E8065 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC810235165A8001E8065 /* Client.swift */; }; + 6C1DC813235165C4001E8065 /* StatusCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC812235165C4001E8065 /* StatusCode.swift */; }; + 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC814235165E8001E8065 /* HttpResponse.swift */; }; + 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC81623516603001E8065 /* RequestBuilder.swift */; }; + 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC81A23516649001E8065 /* RestClient.swift */; }; + 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC81C2351666C001E8065 /* CodableSerializer.swift */; }; + 6C1DC82123516748001E8065 /* RestClientTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82023516748001E8065 /* RestClientTest.swift */; }; + 6C1DC8242351679B001E8065 /* posts.successful.json in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC8232351679B001E8065 /* posts.successful.json */; }; + 6C1DC826235167A4001E8065 /* show_post.successful.json in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC825235167A4001E8065 /* show_post.successful.json */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; - 6C5F57982348207400488E96 /* Cliente.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57972348207400488E96 /* Cliente.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB4233F1B1B0004C30D /* Main.storyboard */; }; @@ -36,11 +43,18 @@ /* Begin PBXFileReference section */ 46A679CEAFBC334DF6FC73B9 /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fakestagram-Xcode10.debug.xcconfig"; path = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; 6487BC4A6C894AC3FCB0A8B6 /* Pods_Fakestagram_Xcode10.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Fakestagram_Xcode10.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6C2C50012348F45900CDE263 /* RequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilder.swift; sourceTree = ""; }; - 6C2C50032349177F00CDE263 /* HttpResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpResponse.swift; sourceTree = ""; }; - 6C2C50052349185400CDE263 /* StatusCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusCode.swift; sourceTree = ""; }; + 6C1DC80B23516554001E8065 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; + 6C1DC80D2351656A001E8065 /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; + 6C1DC810235165A8001E8065 /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; + 6C1DC812235165C4001E8065 /* StatusCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusCode.swift; sourceTree = ""; }; + 6C1DC814235165E8001E8065 /* HttpResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpResponse.swift; sourceTree = ""; }; + 6C1DC81623516603001E8065 /* RequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilder.swift; sourceTree = ""; }; + 6C1DC81A23516649001E8065 /* RestClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestClient.swift; sourceTree = ""; }; + 6C1DC81C2351666C001E8065 /* CodableSerializer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableSerializer.swift; sourceTree = ""; }; + 6C1DC82023516748001E8065 /* RestClientTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestClientTest.swift; sourceTree = ""; }; + 6C1DC8232351679B001E8065 /* posts.successful.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = posts.successful.json; sourceTree = ""; }; + 6C1DC825235167A4001E8065 /* show_post.successful.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = show_post.successful.json; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; - 6C5F57972348207400488E96 /* Cliente.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cliente.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -87,13 +101,40 @@ name = Frameworks; sourceTree = ""; }; + 6C1DC80A2351653E001E8065 /* Models */ = { + isa = PBXGroup; + children = ( + 6C1DC80B23516554001E8065 /* Account.swift */, + 6C1DC80D2351656A001E8065 /* Post.swift */, + ); + path = Models; + sourceTree = ""; + }; + 6C1DC80F2351658F001E8065 /* Network */ = { + isa = PBXGroup; + children = ( + 6C1DC810235165A8001E8065 /* Client.swift */, + 6C1DC812235165C4001E8065 /* StatusCode.swift */, + 6C1DC814235165E8001E8065 /* HttpResponse.swift */, + 6C1DC81623516603001E8065 /* RequestBuilder.swift */, + ); + path = Network; + sourceTree = ""; + }; + 6C1DC82223516768001E8065 /* casettes */ = { + isa = PBXGroup; + children = ( + 6C1DC825235167A4001E8065 /* show_post.successful.json */, + 6C1DC8232351679B001E8065 /* posts.successful.json */, + ); + path = casettes; + sourceTree = ""; + }; 6C5F57962348206000488E96 /* DataSource */ = { isa = PBXGroup; children = ( - 6C5F57972348207400488E96 /* Cliente.swift */, - 6C2C50012348F45900CDE263 /* RequestBuilder.swift */, - 6C2C50032349177F00CDE263 /* HttpResponse.swift */, - 6C2C50052349185400CDE263 /* StatusCode.swift */, + 6C1DC81A23516649001E8065 /* RestClient.swift */, + 6C1DC81C2351666C001E8065 /* CodableSerializer.swift */, ); path = DataSource; sourceTree = ""; @@ -121,14 +162,16 @@ 7701BEAF233F1B1B0004C30D /* Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( + 6C1DC80A2351653E001E8065 /* Models */, + 6C1DC80F2351658F001E8065 /* Network */, 6C5F57962348206000488E96 /* DataSource */, 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */, 7701BED0233F1B540004C30D /* PostsTableViewController.swift */, + 6C5F5799234827B200488E96 /* PostViewController.swift */, 7701BEB4233F1B1B0004C30D /* Main.storyboard */, 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, - 6C5F5799234827B200488E96 /* PostViewController.swift */, 6C5F57942348203100488E96 /* Credentials.swift */, ); path = "Fakestagram-Xcode10"; @@ -137,7 +180,9 @@ 7701BEC4233F1B1C0004C30D /* Fakestagram-Xcode10Tests */ = { isa = PBXGroup; children = ( + 6C1DC82223516768001E8065 /* casettes */, 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */, + 6C1DC82023516748001E8065 /* RestClientTest.swift */, 7701BEC7233F1B1C0004C30D /* Info.plist */, ); path = "Fakestagram-Xcode10Tests"; @@ -151,7 +196,6 @@ DDB3C91F541254DDBC4C4837 /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */, 82459500856F6D726FFB5B8E /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -249,6 +293,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6C1DC8242351679B001E8065 /* posts.successful.json in Resources */, + 6C1DC826235167A4001E8065 /* show_post.successful.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -323,13 +369,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6C5F57982348207400488E96 /* Cliente.swift in Sources */, + 6C1DC813235165C4001E8065 /* StatusCode.swift in Sources */, + 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, - 6C2C50062349185400CDE263 /* StatusCode.swift in Sources */, 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, - 6C2C50022348F45900CDE263 /* RequestBuilder.swift in Sources */, + 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, - 6C2C50042349177F00CDE263 /* HttpResponse.swift in Sources */, + 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, + 6C1DC80C23516554001E8065 /* Account.swift in Sources */, + 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */, + 6C1DC811235165A8001E8065 /* Client.swift in Sources */, + 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -339,6 +389,7 @@ buildActionMask = 2147483647; files = ( 7701BEC6233F1B1C0004C30D /* RequestBuilderTest.swift in Sources */, + 6C1DC82123516748001E8065 /* RestClientTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index e2430144ecbf57da3df4bc9fd131f9732d579b43..68b714aadf57f8037ba69230b92e58de6623b3aa 100644 GIT binary patch literal 32916 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 dB4>$nsuP{BRCi2-(r5QCtMA&Hf9%&e Void - - func get(path: String, success: successfulResponse){} - - func post(path: String,body: Data?, success: successfulResponse){} - - func put (path: String,body: Data?, success: successfulResponse){} - - func delete(path: String, success: successfulResponse){} - - func request(method: String, path: String,body: Data?,success: successfulResponse) { - - let req = buildRequest(method: method, path: path,body: body) - - session.dataTask(with: req){ (data, response,error) in - if let error = error { - debugPrint(error) - return - } - /*let res = ClientResponse(response) - if res.successful? { - - }*/ - }.resume() - - } - - private func buildRequest(method: String, path: String,body : Data?) -> URLRequest{ - var urlComponents = URLComponents(url: self.baseUrl, resolvingAgainstBaseURL: true)! - urlComponents.path = path - var request = URLRequest(url: urlComponents.url!) - request.setValue(contentType, forHTTPHeaderField: "Accept") - request.setValue(contentType, forHTTPHeaderField: "Content-Type") - request.httpMethod = method - - if let token = Credentials.apiToken.get() { - request.addValue("Bearer \(token)", forHTTPHeaderField:"Authorization") - } - request.httpBody = body - - return request - } -} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CodableSerializer.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CodableSerializer.swift new file mode 100644 index 0000000..377a63f --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CodableSerializer.swift @@ -0,0 +1,35 @@ +// +// File.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +class CodableSerializer { + let data: Data? + let decoder: JSONDecoder = { + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + return decoder + }() + + init(data: Data?) { + self.data = data + } + + func async(result: @escaping (T?) -> Void) { + guard let data = data else { + DispatchQueue.main.async { result(nil) } + return + } + do { + let json = try decoder.decode(T.self, from: data) + DispatchQueue.main.async { result(json) } + } catch let err { + print("Invalid JSON format: \(err.localizedDescription)") + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RestClient.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RestClient.swift new file mode 100644 index 0000000..9912e42 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RestClient.swift @@ -0,0 +1,58 @@ +// +// File.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +class RestClient { + private let client: Client + let basePath: String + let encoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.keyEncodingStrategy = .convertToSnakeCase + return encoder + }() + + init(client: Client, basePath: String) { + self.client = client + self.basePath = basePath + } + + // eg. POST /posts/ + func create(_ data: T, success: @escaping (T?) -> Void) { + let payload = try? encoder.encode(data) + client.post(path: basePath, body: payload) { data in + CodableSerializer(data: data).async(result: success) + } + } + + // eg. GET /posts/ + // eg. GET /posts/:id + func show(id: String? = nil, success: @escaping (T?) -> Void) { + var path = basePath + if let uid = id { + path += "/\(uid)" + } + client.get(path: path) { data in + CodableSerializer(data: data).async(result: success) + } + } + // eg. PUT /posts/:id + func update(id: String, data: T, success: @escaping (T?) -> Void) { + let payload = try? encoder.encode(data) + client.put(path: "\(basePath)/\(id)", body: payload) { data in + CodableSerializer(data: data).async(result: success) + } + } + + // eg. DELETE /posts/:id + func delete(id: String, success: @escaping (T?) -> Void) { + client.delete(path: "\(basePath)/\(id)") { data in + CodableSerializer(data: data).async(result: success) + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift new file mode 100644 index 0000000..9fd98ea --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift @@ -0,0 +1,16 @@ +// +// File.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +struct Account: Codable { + let id: String? + let name: String + let deviceNumber: String + let deviceModel: String +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift new file mode 100644 index 0000000..d63f45e --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift @@ -0,0 +1,38 @@ +// +// File.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation +import UIKit + +struct Post: Codable { + let id: Int? + let title: String + let imageUrl: String? + var likesCount: Int + var commentsCount: Int + let createdAt: String + var liked: Bool + let location: String + + func likesCountText() -> String { + return "\(likesCount) likes" + } + + func commentsCountText() -> String { + return "\(commentsCount) comments" + } + + func load(_ image: @escaping (UIImage) -> Void) { + guard let urlString = imageUrl, let url = URL(string: urlString) else { return } + DispatchQueue.global(qos: .background).async { + if let data = try? Data(contentsOf: url), let img = UIImage(data: data) { + DispatchQueue.main.async { image(img) } + } + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift new file mode 100644 index 0000000..c801c8d --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift @@ -0,0 +1,68 @@ +// +// File.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +class Client { + static let fakestagram = Client(session: URLSession.shared, baseUrl: "https://fakestagram-api.herokuapp.com") + let session: URLSession + let baseUrl: String + + init(session: URLSession, baseUrl: String) { + self.session = session + self.baseUrl = baseUrl + } + + typealias successfulResponse = (Data?) -> Void + + func get(path: String, success: @escaping successfulResponse) { + request(method: "get", path: path, body: nil, success: success) + } + + func post(path: String, body: Data?, success: @escaping successfulResponse) { + request(method: "post", path: path, body: body, success: success) + } + + func put(path: String, body: Data?, success: @escaping successfulResponse) { + request(method: "put", path: path, body: body, success: success) + } + + func delete(path: String, success: @escaping successfulResponse) { + request(method: "delete", path: path, body: nil, success: success) + } + + private func request(method: String, path: String, body: Data?, success: @escaping successfulResponse) { + guard let req = buildRequest(method: method, path: path, body: body) else { + debugPrint("Invalid request") + return + } + + session.dataTask(with: req) { (data, response, error) in + if let error = error { + debugPrint(error) + return + } + + let response = HttpResponse(response: response) + if response.isSuccessful() { + success(data) + } + }.resume() + } + + private func buildRequest(method: String, path: String, body: Data?) -> URLRequest? { + var builder = RequestBuilder(baseUrl: self.baseUrl) + builder.method = method + builder.path = path + builder.body = body + if let token = Credentials.apiToken.get() { + builder.headers = ["Authorization": "Bearer \(token)"] + } + return builder.request() + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/HttpResponse.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/HttpResponse.swift similarity index 83% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/HttpResponse.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Network/HttpResponse.swift index 7df51b2..936e8ab 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/HttpResponse.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/HttpResponse.swift @@ -1,8 +1,8 @@ // -// HttpResponse.swift +// File.swift // Fakestagram-Xcode10 // -// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. // Copyright © 2019 unam. All rights reserved. // @@ -10,15 +10,15 @@ import Foundation class HttpResponse { let httpUrlResponse: HTTPURLResponse - + init(response: URLResponse?) { self.httpUrlResponse = response as! HTTPURLResponse } - + lazy var status: StatusCode = { return StatusCode(rawValue: self.httpUrlResponse.statusCode) }() - + func isSuccessful() -> Bool { return status == StatusCode.success } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/RequestBuilder.swift similarity index 93% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Network/RequestBuilder.swift index 37016a2..249c648 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/RequestBuilder.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/RequestBuilder.swift @@ -1,8 +1,8 @@ // -// RequestBuilder.swift +// File.swift // Fakestagram-Xcode10 // -// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. // Copyright © 2019 unam. All rights reserved. // @@ -11,14 +11,14 @@ import Foundation struct RequestBuilder { enum ContentMode { case jsonApp - + func accept() -> String { switch self { case .jsonApp: return "application/json" } } - + func contentType() -> String { switch self { case .jsonApp: @@ -33,18 +33,18 @@ struct RequestBuilder { public var body: Data? public var headers: [String: String]? public var contentMode: ContentMode = .jsonApp - + init(baseUrl: String) { self.urlComponents = URLComponents(string: baseUrl)! } - + func url() -> URL? { var comps = self.urlComponents comps.scheme = scheme comps.path = path return comps.url } - + func request() -> URLRequest? { guard let url = url() else { return nil } var req = URLRequest(url: url) diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/StatusCode.swift similarity index 91% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Network/StatusCode.swift index 3bc4a7d..f454d68 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StatusCode.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/StatusCode.swift @@ -1,8 +1,8 @@ // -// StatusCode.swift +// File.swift // Fakestagram-Xcode10 // -// Created by Pedro Carlos Monzalvo Navarro on 10/5/19. +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. // Copyright © 2019 unam. All rights reserved. // @@ -15,7 +15,7 @@ enum StatusCode: Int { case redirection case clientError case serverError - + public init(rawValue: Int) { switch rawValue { case 100, 101, 102: diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift index ef31ac4..a4ec8b7 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift @@ -8,23 +8,104 @@ import UIKit +struct Author: Codable { + let name: String +} +struct Comment: Codable { + let content: String + let author: Author? +} +struct Like: Codable { + let author: Author +} + class PostViewController: UIViewController { - - @IBOutlet weak var imagen: UIImageView! - + var post: Post? { + didSet { + updatePostView() + } + } + @IBOutlet weak var imageView: UIImageView! + override func viewDidLoad() { super.viewDidLoad() + updatePostView() + loadComments { comments in + debugPrint(comments) + } + + // Do any additional setup after loading the view. + } + + func updatePostView() { + guard let post = post else { return } + post.load { img in + DispatchQueue.main.async { + self.imageView.image = img + } + } } - - + /* // MARK: - Navigation - + // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ - + func loadComments(successful: @escaping ([Comment]) -> Void) { + guard let uwrappedPost = post, let postId = uwrappedPost.id else { return } + let url = URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts/\(postId)/comments")! + var request = URLRequest(url: url) + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.httpMethod = "get" + request.addValue("Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", forHTTPHeaderField: "Authorization") + + let task = URLSession.shared.dataTask(with: request) { (data, _, error) in + if error != nil || data == nil { + return + } + // get status code + + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + do { + guard let data = data else { print("Empty response"); return } + let json = try decoder.decode([Comment].self, from: data) + successful(json) + } catch let err { + print("Unable to parse successfull response: \(err.localizedDescription)") + } + } + task.resume() + } + + func loadLikes(successful: @escaping ([Like]) -> Void) { + guard let uwrappedPost = post, let postId = uwrappedPost.id else { return } + let url = URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts/\(postId)/likes")! + var request = URLRequest(url: url) + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.httpMethod = "get" + request.addValue("Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", forHTTPHeaderField: "Authorization") + + let task = URLSession.shared.dataTask(with: request) { (data, _, error) in + if error != nil || data == nil { + return + } + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + do { + guard let data = data else { print("Empty response"); return } + let json = try decoder.decode([Like].self, from: data) + successful(json) + } catch let err { + print("Unable to parse successfull response: \(err.localizedDescription)") + } + } + task.resume() + } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift index 510cddc..492685f 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift @@ -8,40 +8,10 @@ import UIKit -struct Post: Codable { - let id: Int? - let title: String - let imageUrl: String? - var likesCount: Int - var commentsCount: Int - let createdAt: String - var liked: Bool - let location: String - //let imagen: UIImage? - - - func likesCountText() -> String { - return "\(likesCount) likes" - } - - func commentsCountText() -> String { - return "\(commentsCount) comments" - } - - func load(_ image: @escaping (UIImage) -> Void) { - guard let urlString = imageUrl, let url = URL(string: urlString) else { return } - DispatchQueue.global(qos: .background).async { - if let data = try? Data(contentsOf: url), let img = UIImage(data: data) { - DispatchQueue.main.async { image(img) } - } - } - } -} - class PostsTableViewController: UITableViewController { static let cellId = "PostCell" var posts = [Post]() - + override func viewDidLoad() { super.viewDidLoad() loadPosts { data in @@ -50,24 +20,24 @@ class PostsTableViewController: UITableViewController { self.tableView.reloadData() } } - + // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false - + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem } - + // MARK: - Table view data source - + override func numberOfSections(in tableView: UITableView) -> Int { return 1 } - + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return posts.count } - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: PostsTableViewController.cellId, for: indexPath) posts[indexPath.row].load { img in @@ -76,10 +46,10 @@ class PostsTableViewController: UITableViewController { } cell.textLabel?.text = posts[indexPath.row].title cell.detailTextLabel?.text = posts[indexPath.row].location - + return cell } - + /* // Override to support conditional editing of the table view. override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { @@ -87,7 +57,7 @@ class PostsTableViewController: UITableViewController { return true } */ - + /* // Override to support editing the table view. override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { @@ -99,14 +69,14 @@ class PostsTableViewController: UITableViewController { } } */ - + /* // Override to support rearranging the table view. override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { - + } */ - + /* // Override to support conditional rearranging of the table view. override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { @@ -114,26 +84,28 @@ class PostsTableViewController: UITableViewController { return true } */ - + // MARK: - Navigation + // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - if segue.identifier == "detalle"{ - let det = segue.destination as! PostViewController - let indx = self.tableView.indexPathForSelectedRow?.row ?? 0 - posts[indx].load { img in - det.imagen.image = img - } + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + if segue.identifier == "showPostSegue" { + let dest = segue.destination as! PostViewController + let idx = self.tableView.indexPathForSelectedRow?.row ?? 0 + dest.post = posts[idx] } } - + func loadPosts(successful: @escaping ([Post]) -> Void) { - var request = URLRequest(url: URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts")!) + let url = URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts")! + var request = URLRequest(url: url) request.setValue("application/json", forHTTPHeaderField: "Accept") request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpMethod = "get" request.addValue("Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", forHTTPHeaderField: "Authorization") - + let task = URLSession.shared.dataTask(with: request) { (data, _, error) in if error != nil || data == nil { return diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RestClientTest.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RestClientTest.swift new file mode 100644 index 0000000..be784c0 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/RestClientTest.swift @@ -0,0 +1,48 @@ +// +// File.swift +// Fakestagram-Xcode10Tests +// +// Created by Pedro Carlos Monzalvo Navarro on 11/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import XCTest +import DVR +@testable import Fakestagram_Xcode10 + +class RestClientTest: XCTestCase { + func testShowPosts() { + let session = Session(cassetteName: "posts.successful") + let client = Client(session: session, baseUrl: "https://fakestagram-api.herokuapp.com") + let restClient = RestClient<[Post]>(client: client, basePath: "/api/v1/posts") + let exp = expectation(description: "Successfull index posts") + + restClient.show { posts in + exp.fulfill() + XCTAssertNotNil(posts) + XCTAssertEqual(posts!.count, 25) + XCTAssertEqual(posts!.first!.id, 228) + XCTAssertEqual(posts!.first!.title, "Example") + } + + waitForExpectations(timeout: 2, handler: nil) + } + + func testShowPost() { + let session = Session(cassetteName: "show_post.successful") + let client = Client(session: session, baseUrl: "https://fakestagram-api.herokuapp.com") + + let restClient = RestClient(client: client, basePath: "/api/v1/posts") + let exp = expectation(description: "Successfull index posts") + + restClient.show(id: "228") { post in + exp.fulfill() + XCTAssertNotNil(post) + XCTAssertEqual(post!.id, 228) + XCTAssertEqual(post!.title, "Example") + } + + waitForExpectations(timeout: 2, handler: nil) + } +} + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/posts.successful.json b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/posts.successful.json new file mode 100644 index 0000000..24d2ccf --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/posts.successful.json @@ -0,0 +1,444 @@ +{ + "interactions" : [ + { + "request" : { + "method" : "GET", + "headers" : { + "Content-Type" : "application\/json", + "Authorization" : "Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", + "Accept" : "application\/json" + }, + "url" : "https:\/\/fakestagram-api.herokuapp.com\/api\/v1\/posts" + }, + "recorded_at" : 1570837975.1744719, + "response" : { + "url" : "https:\/\/fakestagram-api.herokuapp.com\/api\/v1\/posts", + "headers" : { + "Etag" : "W\/\"0d7dc5010941ab1928365db038e254f9\"", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains", + "X-Request-Id" : "f9b64a0a-2902-46c5-9355-feffcda2b924", + "Vary" : "Origin", + "X-Download-Options" : "noopen", + "Via" : "1.1 vegur", + "X-Permitted-Cross-Domain-Policies" : "none", + "X-Content-Type-Options" : "nosniff", + "Content-Length" : "0", + "X-Xss-Protection" : "1; mode=block", + "Connection" : "keep-alive", + "Cache-Control" : "max-age=0, private, must-revalidate", + "Content-Type" : "application\/json; charset=utf-8", + "X-Frame-Options" : "SAMEORIGIN", + "X-Runtime" : "0.087793", + "Referrer-Policy" : "strict-origin-when-cross-origin", + "Date" : "Fri, 11 Oct 2019 23:52:54 GMT", + "Transfer-Encoding" : "Identity", + "Server" : "Cowboy" + }, + "body" : [ + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", + "name" : "John Carney", + "avatar_url" : null + }, + "id" : 228, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZTA9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b668068c1f6252a77beacbd9313d8f4e078a400f\/4ed83e29-b955-4dc6-b5ee-eafd994e9de8", + "title" : "Example", + "created_at" : "2019-10-04T21:15:42.650Z", + "liked" : true, + "updated_at" : "2019-10-04T21:15:42.738Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", + "name" : "John Carney", + "avatar_url" : null + }, + "id" : 227, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZWs9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--af591b63753c7a621bbaece3f99c79c9375551b4\/9b13eeaf-3a33-45d8-9f96-09506672ddf4", + "title" : "Example", + "created_at" : "2019-10-04T05:11:50.647Z", + "liked" : true, + "updated_at" : "2019-10-04T05:11:50.701Z", + "comments_count" : 0 + }, + { + "location" : "South San Francisco BART, Bart, South San Francisco, San Mateo County, California, 94014, USA", + "likes_count" : 0, + "author" : { + "id" : "26c0b0a1-6b04-4625-9d08-f8b348b968d6", + "name" : "Gerard Hane", + "avatar_url" : null + }, + "id" : 226, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZVk9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--a89eead659aa964493322d79f9f5cca4db18ff9d\/3340cca1-dd82-4c63-ba8f-3986bddbc500", + "title" : "1566158823894", + "created_at" : "2019-08-18T20:07:04.661Z", + "liked" : false, + "updated_at" : "2019-08-18T20:07:04.686Z", + "comments_count" : 0 + }, + { + "location" : "South San Francisco BART, Bart, South San Francisco, San Mateo County, California, 94014, USA", + "likes_count" : 0, + "author" : { + "id" : "26c0b0a1-6b04-4625-9d08-f8b348b968d6", + "name" : "Gerard Hane", + "avatar_url" : null + }, + "id" : 225, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZVU9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--0e22a6bc1f9e9477762e32356036134efd54eb55\/70bb725c-e86e-4430-b925-11c25718392a", + "title" : "1566158820509", + "created_at" : "2019-08-18T20:07:01.750Z", + "liked" : false, + "updated_at" : "2019-08-18T20:07:01.854Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 2, + "author" : { + "id" : "ababf2cd-0eb9-45b6-99e5-90de794f7860", + "name" : "Katelyn Sanford", + "avatar_url" : null + }, + "id" : 224, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZVE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b927d8cd407bfb7f4e32dff66842cbce798e10a3\/78a88dea-8b8e-4d33-a633-5e492bc14842", + "title" : ":p", + "created_at" : "2019-08-11T20:17:49.826Z", + "liked" : false, + "updated_at" : "2019-08-11T20:17:49.895Z", + "comments_count" : 2 + }, + { + "location" : "", + "likes_count" : 1, + "author" : { + "id" : "9b590ebf-4875-4a83-8249-c6223e0d1a2a", + "name" : "Sammy Beier", + "avatar_url" : null + }, + "id" : 223, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZU09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5726e694e2d04ec83ee589ff11293f8d4a49daf5\/3c7f898e-ae8d-410c-800d-20c590b8118e", + "title" : "1565393475188", + "created_at" : "2019-08-09T23:31:20.358Z", + "liked" : false, + "updated_at" : "2019-08-09T23:31:20.380Z", + "comments_count" : 1 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f9d53895-93f9-43c2-973e-ce47aadf6239", + "name" : "Arlinda Balistreri", + "avatar_url" : null + }, + "id" : 222, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZUk9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3d89565f024de56af1b3d510d954b64e11593812\/0314b818-2096-4387-bcee-ed62594b013e", + "title" : "1565392767381", + "created_at" : "2019-08-09T23:19:30.715Z", + "liked" : false, + "updated_at" : "2019-08-09T23:19:30.737Z", + "comments_count" : 1 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f9d53895-93f9-43c2-973e-ce47aadf6239", + "name" : "Arlinda Balistreri", + "avatar_url" : null + }, + "id" : 221, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZUU9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--26a6cfcb28d63275d7d2e38cc19cc318106bc7a1\/74ee9a0c-3fd3-413f-9a05-ed56514f9b4c", + "title" : "1565392624022", + "created_at" : "2019-08-09T23:17:06.162Z", + "liked" : false, + "updated_at" : "2019-08-09T23:17:06.191Z", + "comments_count" : 4 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f9d53895-93f9-43c2-973e-ce47aadf6239", + "name" : "Arlinda Balistreri", + "avatar_url" : null + }, + "id" : 220, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZUE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--84f7d1d7e2c9624478e486b85ef289101adff64b\/89fe9faf-dafb-4c44-9810-55f9dc1643f7", + "title" : "1565389845416", + "created_at" : "2019-08-09T22:30:45.562Z", + "liked" : false, + "updated_at" : "2019-08-09T22:30:45.589Z", + "comments_count" : 11 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f9d53895-93f9-43c2-973e-ce47aadf6239", + "name" : "Arlinda Balistreri", + "avatar_url" : null + }, + "id" : 219, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZDg9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--aa3dbf1922f86c5ab9f874710541abd83a10aa21\/8d34e2e6-d33d-4ac1-954b-b0c3e1403301", + "title" : "1565389827272", + "created_at" : "2019-08-09T22:30:27.612Z", + "liked" : false, + "updated_at" : "2019-08-09T22:30:27.633Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f9d53895-93f9-43c2-973e-ce47aadf6239", + "name" : "Arlinda Balistreri", + "avatar_url" : null + }, + "id" : 218, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZDQ9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--9534d1e17eab3138685b2ae633f1fce2b3072fa3\/24f26bae-f215-499a-a985-ad1cca2168e3", + "title" : "1565387654424", + "created_at" : "2019-08-09T21:54:14.782Z", + "liked" : false, + "updated_at" : "2019-08-09T21:54:14.823Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 1, + "author" : { + "id" : "cb9a00b1-c23d-4dcd-84a3-0066cc930adc", + "name" : "Melvina DuBuque", + "avatar_url" : null + }, + "id" : 217, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZDA9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--ce6d7e4e61a3bad722d0b1ecc9d9c85a5d443782\/b077e3b9-7abd-4f01-a3d4-baaeaa03d035", + "title" : "1565284409539", + "created_at" : "2019-08-08T17:13:30.621Z", + "liked" : false, + "updated_at" : "2019-08-08T17:13:30.647Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "cb9a00b1-c23d-4dcd-84a3-0066cc930adc", + "name" : "Melvina DuBuque", + "avatar_url" : null + }, + "id" : 216, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZHc9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5fd762895b481581889f8370850660961ac27ae2\/79075b3f-a2f6-4a28-8478-2b2024361b8f", + "title" : "1565284311613", + "created_at" : "2019-08-08T17:11:51.968Z", + "liked" : false, + "updated_at" : "2019-08-08T17:11:52.041Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "1a11b5ea-b450-478c-b968-6e4bf1724a27", + "name" : "Garth Hartmann", + "avatar_url" : null + }, + "id" : 215, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZHM9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3aaf6ee04bf6e2e276af0a7542057df4bc859a9d\/b2f6db08-2257-4bd4-9371-e784c7dd3ef5", + "title" : "1565240319353", + "created_at" : "2019-08-08T04:58:39.800Z", + "liked" : false, + "updated_at" : "2019-08-08T04:58:39.871Z", + "comments_count" : 0 + }, + { + "location" : "Powell Street Station, Market Street, Union Square, San Francisco, San Francisco City and County, California, 94103-3124, USA", + "likes_count" : 0, + "author" : { + "id" : "44a51289-6d9e-4e27-8638-6d3102511ad8", + "name" : "Melanie Gaylord", + "avatar_url" : null + }, + "id" : 214, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZG89IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--475805cb649993f55820a95307fc1f7a80db3f4e\/71f1b9e0-f262-4261-ad1d-ece8046151ef", + "title" : "1565064895736", + "created_at" : "2019-08-06T04:14:56.879Z", + "liked" : false, + "updated_at" : "2019-08-06T04:14:56.920Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "90834f94-fd51-420a-b350-30851abf61d5", + "name" : "Belle Douglas", + "avatar_url" : null + }, + "id" : 213, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZGs9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f5b051063503aadef9f0cd9a0723c12d2d627dde\/bc279b9d-2dce-49c6-9120-4e4b575f7a78", + "title" : "1565028839754", + "created_at" : "2019-08-05T18:14:00.016Z", + "liked" : false, + "updated_at" : "2019-08-05T18:14:00.078Z", + "comments_count" : 0 + }, + { + "location" : "Powell Street Station, Market Street, Union Square, San Francisco, San Francisco City and County, California, 94103-3124, USA", + "likes_count" : 0, + "author" : { + "id" : "44a51289-6d9e-4e27-8638-6d3102511ad8", + "name" : "Melanie Gaylord", + "avatar_url" : null + }, + "id" : 212, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZGc9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--ead89bde0e160956f51b9d5d7637c4ca1b8d5643\/3c16b6e2-838b-453e-87a8-c8e623efee6f", + "title" : "1564953882318", + "created_at" : "2019-08-04T21:24:43.366Z", + "liked" : false, + "updated_at" : "2019-08-04T21:24:43.424Z", + "comments_count" : 0 + }, + { + "location" : "Powell Street Station, Market Street, Union Square, San Francisco, San Francisco City and County, California, 94103-3124, USA", + "likes_count" : 1, + "author" : { + "id" : "44a51289-6d9e-4e27-8638-6d3102511ad8", + "name" : "Melanie Gaylord", + "avatar_url" : null + }, + "id" : 211, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZGM9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--aa53a5c71d2af02eb63f222e8f62666ac020626d\/70601715-1ce5-4886-8647-614a88acdc3e", + "title" : "1564938932927", + "created_at" : "2019-08-04T17:15:34.008Z", + "liked" : false, + "updated_at" : "2019-08-04T17:15:34.072Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 1, + "author" : { + "id" : "15e6a545-c5c7-4775-b3b3-f4c08622b7f8", + "name" : "Venessa Prosacco", + "avatar_url" : null + }, + "id" : 209, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZFE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--677615c8da9ee16d4a2f2d04d71620345dad3dcb\/a37c2b48-53b0-4200-8ca4-0ab3c601c2be", + "title" : "No lo haga compa", + "created_at" : "2019-07-26T22:14:55.445Z", + "liked" : false, + "updated_at" : "2019-07-26T22:14:55.465Z", + "comments_count" : 2 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "15e6a545-c5c7-4775-b3b3-f4c08622b7f8", + "name" : "Venessa Prosacco", + "avatar_url" : null + }, + "id" : 208, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZE09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--701845e2a532406662abd63bd9903cfb3d6fa427\/f56ff4ea-21aa-416f-9644-bbcc36c0a489", + "title" : "No lo haga compa", + "created_at" : "2019-07-26T22:14:48.407Z", + "liked" : false, + "updated_at" : "2019-07-26T22:14:48.472Z", + "comments_count" : 2 + }, + { + "location" : "Calle Durango, Condesa, Mexico City, Cuauhtémoc, Mexico City, 06140, Mexico", + "likes_count" : 0, + "author" : { + "id" : "3c06d9f5-9cc0-483e-a089-8bcc4c11c14e", + "name" : "Shenita Champlin", + "avatar_url" : null + }, + "id" : 207, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEU9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b375a88531fce2fba8301e8f4d9cda92016317f6\/2a6c1b7a-16d8-4155-9825-e92a834f083a", + "title" : "1563810644322", + "created_at" : "2019-07-22T15:50:48.103Z", + "liked" : false, + "updated_at" : "2019-07-22T15:50:48.219Z", + "comments_count" : 1 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "10b7accf-1817-4fe5-9674-8f7703220e96", + "name" : "Shonda Hammes", + "avatar_url" : null + }, + "id" : 206, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEE9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--6b9c9e7a5919fc296349d7e0ba3eb327fab7e28d\/8be5a13a-b703-4e9d-bfa8-640969a1d03b", + "title" : "Las svm son chidas", + "created_at" : "2019-07-11T17:43:09.553Z", + "liked" : false, + "updated_at" : "2019-07-11T17:43:09.600Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "10b7accf-1817-4fe5-9674-8f7703220e96", + "name" : "Shonda Hammes", + "avatar_url" : null + }, + "id" : 205, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBYzg9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--9bd1e3affaa38a100b254bcc0ebfbd34697367ee\/5abbd134-50c2-4529-8474-64ad58de7383", + "title" : "Mr. Bean es mi pastor!", + "created_at" : "2019-07-11T17:40:58.360Z", + "liked" : false, + "updated_at" : "2019-07-11T17:40:58.429Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "10b7accf-1817-4fe5-9674-8f7703220e96", + "name" : "Shonda Hammes", + "avatar_url" : null + }, + "id" : 204, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEk9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f0193550348281afd2b2998b93997529e8ca4d16\/9b188868-6f6a-424d-b577-5bd8e99fff4c", + "title" : "Todos los del diplomado en las fiestas jajaja!", + "created_at" : "2019-07-10T23:46:37.725Z", + "liked" : false, + "updated_at" : "2019-07-23T01:22:34.916Z", + "comments_count" : 0 + }, + { + "location" : "", + "likes_count" : 1, + "author" : { + "id" : "519661d9-5f38-45dc-ba4e-ec3522aa128a", + "name" : "Lesley Funk", + "avatar_url" : null + }, + "id" : 203, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBY3M9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--954b1ccc1f0dcb9d061ac38009b43f0bd727b118\/83e80764-2bd6-40e7-b6a8-01c54af1dd84", + "title" : "1562190435299", + "created_at" : "2019-07-03T21:47:15.564Z", + "liked" : false, + "updated_at" : "2019-07-03T21:47:15.623Z", + "comments_count" : 1 + } + ], + "status" : 200 + } + } + ], + "name" : "posts.successful" +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/show_post.successful.json b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/show_post.successful.json new file mode 100644 index 0000000..03e91e1 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/casettes/show_post.successful.json @@ -0,0 +1,57 @@ +{ + "interactions" : [ + { + "response" : { + "status" : 200, + "body" : { + "location" : "", + "likes_count" : 0, + "author" : { + "id" : "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", + "name" : "John Carney", + "avatar_url" : null + }, + "id" : 228, + "image_url" : "https:\/\/fakestagram-api.herokuapp.com\/rails\/active_storage\/blobs\/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZTA9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b668068c1f6252a77beacbd9313d8f4e078a400f\/4ed83e29-b955-4dc6-b5ee-eafd994e9de8", + "title" : "Example", + "created_at" : "2019-10-04T21:15:42.650Z", + "liked" : false, + "updated_at" : "2019-10-04T21:15:42.738Z", + "comments_count" : 0 + }, + "headers" : { + "X-Permitted-Cross-Domain-Policies" : "none", + "Content-Type" : "application\/json; charset=utf-8", + "X-Request-Id" : "c6266b7f-6e74-4fc8-808c-6046b689f67f", + "Via" : "1.1 vegur", + "Cache-Control" : "max-age=0, private, must-revalidate", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains", + "Date" : "Sat, 12 Oct 2019 00:46:20 GMT", + "Transfer-Encoding" : "Identity", + "X-Xss-Protection" : "1; mode=block", + "Referrer-Policy" : "strict-origin-when-cross-origin", + "X-Download-Options" : "noopen", + "Server" : "Cowboy", + "X-Runtime" : "0.063186", + "Connection" : "keep-alive", + "Etag" : "W\/\"819b2d0fa0647c5c452d27fb77a8d11e\"", + "X-Frame-Options" : "SAMEORIGIN", + "Vary" : "Origin", + "X-Content-Type-Options" : "nosniff" + }, + "url" : "https:\/\/fakestagram-api.herokuapp.com\/api\/v1\/posts\/228" + }, + "request" : { + "headers" : { + "Accept" : "application\/json", + "Content-Type" : "application\/json", + "Authorization" : "Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e" + }, + "method" : "GET", + "url" : "https:\/\/fakestagram-api.herokuapp.com\/api\/v1\/posts\/228" + }, + "recorded_at" : 1570841180.898001 + } + ], + "name" : "show_post.successful" +} diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj index 80d08f1..5d02da4 100644 --- a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ @@ -327,7 +327,7 @@ LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 9.3"; + compatibilityVersion = "Xcode 10.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( From 3d18dff2a21b22b7f51b273576c5f622b7125bb2 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 18 Oct 2019 10:43:29 -0500 Subject: [PATCH 07/18] Added ShowPostViewController with its XIB and separate of user the data models --- .DS_Store | Bin 8196 -> 6148 bytes Fakestagram-Xcode10/.DS_Store | Bin 6148 -> 6148 bytes .../project.pbxproj | 32 ++++++ .../UserInterfaceState.xcuserstate | Bin 29339 -> 35692 bytes .../UserInterfaceState.xcuserstate | Bin 32916 -> 43118 bytes .../Base.lproj/Main.storyboard | 23 +++- .../Fakestagram-Xcode10/Models/Author.swift | 14 +++ .../Fakestagram-Xcode10/Models/Comment.swift | 15 +++ .../Fakestagram-Xcode10/Models/Like.swift | 13 +++ .../PostViewController.swift | 11 -- .../Fakestagram-Xcode10/View/AuthorView.swift | 62 +++++++++++ .../View/ShowPostViewController.swift | 36 ++++++ .../View/ShowPostViewController.xib | 103 ++++++++++++++++++ 13 files changed, 293 insertions(+), 16 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Author.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Comment.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Like.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib diff --git a/.DS_Store b/.DS_Store index 5f18241473cebe1e810b54da4a94d29d0f2d63a5..86d04d6b5478eb788dd0adc71ae94fb673b00930 100644 GIT binary patch delta 239 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6x*nGmw7U`z$U|!Nd-BX#U%y?*BP0Z zSywRJOr)&c<|BZOw)hte==*5nQW zt<84@y_hC8@GJ&8L68|DCBO}&T|sW%SoocJGQW%`$OjBe5Z{12$gnw{XAUy}RGTj- delta 283 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20+o*S!d9wn?ALhmE92^rHSSE9`Y;yaW zRFIQdTw-8wgOQ1ug_Vt+gOiJ!lbes5Gd4IQzdX1kv81%vDX}PCKqfddB{eCrC_FQz zBqJm>&ow8tEH%%+$S1KRb@DqF&-7@JhJeJ944@(oWrqx)y+FXp!5J?gQC)3pY^tMR zY-~`gqfl*bZlI%JVr*7h%gMnZsqPjOSK8D!Yxa_*%a$KH4AI8O2%#ASp)`y-GI~>^8f$< delta 64 zcmZoMXffFEgM~@&_T)7zc9Shw`Pdp5fIxoo1{U4Pm8`XFt}Jk_CYwB40Z3K?D677? Il&xP708xn$vj6}9 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 908ddd7..72ffa06 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -18,6 +18,12 @@ 6C1DC82123516748001E8065 /* RestClientTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82023516748001E8065 /* RestClientTest.swift */; }; 6C1DC8242351679B001E8065 /* posts.successful.json in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC8232351679B001E8065 /* posts.successful.json */; }; 6C1DC826235167A4001E8065 /* show_post.successful.json in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC825235167A4001E8065 /* show_post.successful.json */; }; + 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */; }; + 6C1DC82D23523BB9001E8065 /* ShowPostViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */; }; + 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82E23524732001E8065 /* AuthorView.swift */; }; + 6C5656552358DB9D00460C1E /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656542358DB9D00460C1E /* Author.swift */; }; + 6C5656572358DBAB00460C1E /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656562358DBAB00460C1E /* Comment.swift */; }; + 6C5656592358DBB800460C1E /* Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656582358DBB800460C1E /* Like.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; @@ -54,6 +60,12 @@ 6C1DC82023516748001E8065 /* RestClientTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestClientTest.swift; sourceTree = ""; }; 6C1DC8232351679B001E8065 /* posts.successful.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = posts.successful.json; sourceTree = ""; }; 6C1DC825235167A4001E8065 /* show_post.successful.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = show_post.successful.json; sourceTree = ""; }; + 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowPostViewController.swift; sourceTree = ""; }; + 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShowPostViewController.xib; sourceTree = ""; }; + 6C1DC82E23524732001E8065 /* AuthorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorView.swift; sourceTree = ""; }; + 6C5656542358DB9D00460C1E /* Author.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = ""; }; + 6C5656562358DBAB00460C1E /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; }; + 6C5656582358DBB800460C1E /* Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Like.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -106,6 +118,9 @@ children = ( 6C1DC80B23516554001E8065 /* Account.swift */, 6C1DC80D2351656A001E8065 /* Post.swift */, + 6C5656542358DB9D00460C1E /* Author.swift */, + 6C5656562358DBAB00460C1E /* Comment.swift */, + 6C5656582358DBB800460C1E /* Like.swift */, ); path = Models; sourceTree = ""; @@ -130,6 +145,16 @@ path = casettes; sourceTree = ""; }; + 6C1DC82723523B6C001E8065 /* View */ = { + isa = PBXGroup; + children = ( + 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */, + 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */, + 6C1DC82E23524732001E8065 /* AuthorView.swift */, + ); + path = View; + sourceTree = ""; + }; 6C5F57962348206000488E96 /* DataSource */ = { isa = PBXGroup; children = ( @@ -162,6 +187,7 @@ 7701BEAF233F1B1B0004C30D /* Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( + 6C1DC82723523B6C001E8065 /* View */, 6C1DC80A2351653E001E8065 /* Models */, 6C1DC80F2351658F001E8065 /* Network */, 6C5F57962348206000488E96 /* DataSource */, @@ -283,6 +309,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6C1DC82D23523BB9001E8065 /* ShowPostViewController.xib in Resources */, 7701BEBB233F1B1C0004C30D /* LaunchScreen.storyboard in Resources */, 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */, 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */, @@ -372,11 +399,16 @@ 6C1DC813235165C4001E8065 /* StatusCode.swift in Sources */, 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, + 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */, + 6C5656592358DBB800460C1E /* Like.swift in Sources */, 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, 6C1DC80C23516554001E8065 /* Account.swift in Sources */, + 6C5656552358DB9D00460C1E /* Author.swift in Sources */, + 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */, + 6C5656572358DBAB00460C1E /* Comment.swift in Sources */, 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */, 6C1DC811235165A8001E8065 /* Client.swift in Sources */, 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index cf5f76658c82da48203b1dfb370817f494df0aed..815abb9f78f658544f65463b195772eefad0d5c6 100644 GIT binary patch literal 35692 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 literal 29339 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 F{{gJ>R0IG3 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 68b714aadf57f8037ba69230b92e58de6623b3aa..452631f49b8ae9202e0aaac28ddb5de0f562ed02 100644 GIT binary patch delta 23067 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 R9|*bM;zQhT!}sj3{y!?qW-9;y delta 15439 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 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard index b9f1514..2d45032 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard @@ -42,6 +42,9 @@ + + + @@ -62,21 +65,31 @@ - - - + + + + + + + + + + - + - + + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Author.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Author.swift new file mode 100644 index 0000000..7672dc4 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Author.swift @@ -0,0 +1,14 @@ +// +// Author.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 17/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +struct Author: Codable { + let name: String +} + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Comment.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Comment.swift new file mode 100644 index 0000000..eff984e --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Comment.swift @@ -0,0 +1,15 @@ +// +// Comment.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 17/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +struct Comment: Codable { + let content: String + let author: Author? +} + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Like.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Like.swift new file mode 100644 index 0000000..0785fb5 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Like.swift @@ -0,0 +1,13 @@ +// +// Like.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 17/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +struct Like: Codable { + let author: Author +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift index a4ec8b7..10897d1 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift @@ -8,17 +8,6 @@ import UIKit -struct Author: Codable { - let name: String -} -struct Comment: Codable { - let content: String - let author: Author? -} -struct Like: Codable { - let author: Author -} - class PostViewController: UIViewController { var post: Post? { didSet { diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift new file mode 100644 index 0000000..05afa7b --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift @@ -0,0 +1,62 @@ +// +// AuthorView.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 12/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class AuthorView: UIView { + var author: Author? { + didSet { updateContent() } + } + + private let avatar: UIImageView = { + let iv = UIImageView() + iv.image = UIImage(named: "profile.circle.fill") + iv.contentMode = .scaleAspectFill + iv.translatesAutoresizingMaskIntoConstraints = false + return iv + }() + private let nameLbl: UILabel = { + let lbl = UILabel() + lbl.text = "Lorem ipsum" + return lbl + }() + + convenience init() { + self.init(frame: .zero) + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupConstraints() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupConstraints() + } + + private func setupConstraints() { + addSubview(avatar) + NSLayoutConstraint.activate([ + avatar.topAnchor.constraint(equalTo: self.topAnchor, constant: 3), + avatar.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 3), + avatar.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 3) + ]) + addSubview(nameLbl) + NSLayoutConstraint.activate([ + nameLbl.leadingAnchor.constraint(equalTo: avatar.trailingAnchor, constant: 5), + nameLbl.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 3), + nameLbl.centerYAnchor.constraint(equalTo: self.centerYAnchor) + ]) + } + + func updateContent() { + guard let uauthor = author else { return } + nameLbl.text = uauthor.name + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift new file mode 100644 index 0000000..034785b --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift @@ -0,0 +1,36 @@ +// +// PostViewController.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 12/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class ShowPostViewController: UIViewController { + + @IBOutlet weak var imageView: UIImageView! + @IBOutlet weak var likeCounter: UILabel! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var likeBttn: UIButton! + @IBOutlet weak var commentBtn: UIButton! + + @IBAction func onTapLike(_ sender: Any?){ + print("Likes") + } + @IBAction func onTapCreateComment(_ sender: Any?){ + print("to comment") + } + @IBAction func onTapShowComment(_ sender: Any?){ + print("to show comment") + } + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib new file mode 100644 index 0000000..067c74b --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From be48b93be1aa1942698e2fc818a88a68aa018027 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 18 Oct 2019 17:19:02 -0500 Subject: [PATCH 08/18] Replace spagetti code with RestClient --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 43118 -> 17384 bytes .../PostsTableViewController.swift | 43 ++++-------------- 3 files changed, 9 insertions(+), 34 deletions(-) diff --git a/.DS_Store b/.DS_Store index 86d04d6b5478eb788dd0adc71ae94fb673b00930..5ebdba06dd0ec84135b11bc1ff761a123fcb4ecb 100644 GIT binary patch delta 21 ccmZoMXffE}$jV`CY^tMRY;3UElXbTc06@V7vH$=8 delta 21 ccmZoMXffE}$jV`4W}%~CWNEb7lXbTc06`}Oz5oCK diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 452631f49b8ae9202e0aaac28ddb5de0f562ed02..a92916f300423ce92a222645b494bae11deccbfd 100644 GIT binary patch delta 7036 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 Nq`TXm9seCe{s%UNAs7Gv literal 43118 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 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift index 492685f..41d8bed 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift @@ -10,17 +10,16 @@ import UIKit class PostsTableViewController: UITableViewController { static let cellId = "PostCell" - var posts = [Post]() + var posts: [Post]? { + didSet { self.tableView.reloadData() } + } + let client = RestClient<[Post]>(client: Client.fakestagram, basePath: "/api/v1/posts/") override func viewDidLoad() { super.viewDidLoad() - loadPosts { data in - DispatchQueue.main.async { - self.posts = data - self.tableView.reloadData() - } + client.show{ [unowned self] data in + self.posts = data } - // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false @@ -35,11 +34,12 @@ class PostsTableViewController: UITableViewController { } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return posts.count + return posts?.count ?? 0 } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: PostsTableViewController.cellId, for: indexPath) + guard let posts = self.posts else { return cell } posts[indexPath.row].load { img in cell.imageView?.contentMode = .scaleAspectFit cell.imageView?.image = img @@ -94,32 +94,7 @@ class PostsTableViewController: UITableViewController { if segue.identifier == "showPostSegue" { let dest = segue.destination as! PostViewController let idx = self.tableView.indexPathForSelectedRow?.row ?? 0 - dest.post = posts[idx] - } - } - - func loadPosts(successful: @escaping ([Post]) -> Void) { - let url = URL(string: "https://fakestagram-api.herokuapp.com/api/v1/posts")! - var request = URLRequest(url: url) - request.setValue("application/json", forHTTPHeaderField: "Accept") - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - request.httpMethod = "get" - request.addValue("Bearer f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e", forHTTPHeaderField: "Authorization") - - let task = URLSession.shared.dataTask(with: request) { (data, _, error) in - if error != nil || data == nil { - return - } - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - do { - guard let data = data else { print("Empty response"); return } - let json = try decoder.decode([Post].self, from: data) - successful(json) - } catch let err { - print("Unable to parse successfull response: \(err.localizedDescription)") - } + dest.post = posts?[idx] } - task.resume() } } From 88982f3eb5470b6c12806f3f2cc510fd79f18f99 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 19 Oct 2019 09:57:09 -0500 Subject: [PATCH 09/18] deleted postTableViewController and new XIB of custom cell --- .DS_Store | Bin 6148 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 6148 -> 8196 bytes .../project.pbxproj | 28 +++- .../UserInterfaceState.xcuserstate | Bin 17384 -> 21741 bytes .../iconCamera.imageset/Contents.json | 21 +++ .../iconCamera.imageset/iconCamera.png | Bin 0 -> 458 bytes .../person.imageset/Contents.json | 21 +++ .../person.imageset/person.png | Bin 0 -> 1787 bytes .../Base.lproj/Main.storyboard | 152 ++++++++++-------- .../Fakestagram-Xcode10/Models/Post.swift | 1 + .../PostsTableViewController.swift | 100 ------------ .../PostsViewController.swift | 58 +++++++ .../Fakestagram-Xcode10/UIDevice+models.swift | 88 ++++++++++ .../Fakestagram-Xcode10/View/AuthorView.swift | 18 ++- .../View/PostCollectionViewCell.swift | 53 ++++++ .../View/PostCollectionViewCell.xib | 103 ++++++++++++ 16 files changed, 464 insertions(+), 179 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/iconCamera.png create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/person.png delete mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib diff --git a/.DS_Store b/.DS_Store index 5ebdba06dd0ec84135b11bc1ff761a123fcb4ecb..8b25df1e67aee8f64be99dbac2896abee45952f7 100644 GIT binary patch literal 8196 zcmeHMJ#P~+7=GP`_R>-j@u5})q+5^}N|m%#J5)$%nj(q-A+7=>Ky5A;(!eE-au-qv zL0Q-t7=VeD0X9YkMi#`zhWG^ti5~#3KbrdTK`$K;AGTyaj_t?x`{+IU-U|SbRMklU zOaOp^nPF@ci!O=vv)qveWXo|xf_!lE2`fvB<&KfMK`WpY&z<;R#J0DEU43iR@0{PK_1rGrbBiPIn)?=)KXi7{HSb@F6xv#xPs+Pe1W8cPvB|Uaiq&s%)K006}ykPr11ZTQg38&y1 zWPyT%_9r0TX7x*Cs#b@b#jbf}soi_K>=ryf9{)rJ1|$21h7DuH7#SP6X>HP)$GxLopv%atppEBoW=NpZvF@7R(dUd0C?|%J3kI05(-fO2BU-Z=Zx`s(zGQoZR-Kkn5^`)jvDnXT}%YbXa@u zT9uMZOL=54m5y|O2JuALYI$cFpGyk2gC0u8k*#`YA2S6shg!A2eWO6nFxfimc3n$Vs2^TX7ZbM# z!*Cu}VHsB7B3Q7}rowj|p?XmiF5}20NW%rhX()mdWbpgosd68%HFVmG0)v7y!Q%gw z-rxWCGPUMt1+)Txi2@{&w$drw?DiX2`@UJMZDQWQ%n}>d6v!!9@NgWFhvSH?KMb*M o;!ws(N^A(^b delta 201 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5sJ6q~50D9Q_x2a6RmlrSVRq%#yTByLPx z&dkU=*+Ech@;m|g$ybHdCr=T)%3*A5s-s|RY%sY{X!hhk!jqWFq$f`hv0^*fFaL*s z$>a+nHVCExe?f*}aB_Zb0nh>_fxpVdVK@yPW_(X3hp67iXKPW zSiT*n(OR6Y(L+9D*Vr!qRK}yJqs0AoH%gOC`QZER^qxuD>6q&`Uz~oqcjLpCl`7u7 z8s6C>Yt?hha`6|YV+~jFykIfomyr}tN=&|IG@Hp9ksWqLZ@=C;ZN|61ecfHrjMrFS zk{+t?dVhQAdhLjgGUB6D=3*sfo>7qjfBi#bdcN9YQuKs#$l|GHm z?w!<})?BBp)Srv$sD(FDt=5!k-8K8uu%yqcl0KE=xr!t^zq2M=gT+hd4m7B|7Mt}t zaa^9?@|LRe{IomRjML3NedSBnG2BtP;2|C(9(ziDaE85yop5J!7mVp0VZ&8VWsw~# zi!_X1NoB}Aa^gHkJu$k;c|{CImCuDL*7)IWv^ZhhVR1fZ=$W#4eK##x|C6_)zW>kE zJ^P#S40r}y21KLN?X2>gsjb~n{v~VefbBk;G&wKVs9e~oa-68jabocgLmmg5Dt$tO fxkjF${q+w4rkX+VKH+2#`22tHp5^oZEa(4U6LlYB delta 148 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50$jGxXU^g=(&tx6}&&l%zttU4K zW-vunPwo@)VO%izw$OT}-V2lO2surz65(UqF!`gX>EwMP0h86l=1we|vzVQOLy#G0 k8W0F@0|{4w0Z7Ur?*IS* diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 72ffa06..dabcc5e 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -21,6 +21,10 @@ 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */; }; 6C1DC82D23523BB9001E8065 /* ShowPostViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */; }; 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC82E23524732001E8065 /* AuthorView.swift */; }; + 6C307327235A78350063C3C5 /* PostsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C307326235A78350063C3C5 /* PostsViewController.swift */; }; + 6C30732A235A83A40063C3C5 /* PostCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C307328235A83A40063C3C5 /* PostCollectionViewCell.swift */; }; + 6C30732B235A83A40063C3C5 /* PostCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6C307329235A83A40063C3C5 /* PostCollectionViewCell.xib */; }; + 6C30732D235AA3730063C3C5 /* UIDevice+models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */; }; 6C5656552358DB9D00460C1E /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656542358DB9D00460C1E /* Author.swift */; }; 6C5656572358DBAB00460C1E /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656562358DBAB00460C1E /* Comment.swift */; }; 6C5656592358DBB800460C1E /* Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656582358DBB800460C1E /* Like.swift */; }; @@ -31,7 +35,6 @@ 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB7233F1B1C0004C30D /* Assets.xcassets */; }; 7701BEBB233F1B1C0004C30D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */; }; 7701BEC6233F1B1C0004C30D /* RequestBuilderTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */; }; - 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BED0233F1B540004C30D /* PostsTableViewController.swift */; }; 8C19C2964BDDB876DC23EA18 /* Pods_Fakestagram_Xcode10.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6487BC4A6C894AC3FCB0A8B6 /* Pods_Fakestagram_Xcode10.framework */; }; F4237714DC7ABD4F0CAE565D /* Pods_Fakestagram_Xcode10Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B8A339C8EBE3992A9E89CAF /* Pods_Fakestagram_Xcode10Tests.framework */; }; /* End PBXBuildFile section */ @@ -63,6 +66,10 @@ 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowPostViewController.swift; sourceTree = ""; }; 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShowPostViewController.xib; sourceTree = ""; }; 6C1DC82E23524732001E8065 /* AuthorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorView.swift; sourceTree = ""; }; + 6C307326235A78350063C3C5 /* PostsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsViewController.swift; sourceTree = ""; }; + 6C307328235A83A40063C3C5 /* PostCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostCollectionViewCell.swift; sourceTree = ""; }; + 6C307329235A83A40063C3C5 /* PostCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PostCollectionViewCell.xib; sourceTree = ""; }; + 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+models.swift"; sourceTree = ""; }; 6C5656542358DB9D00460C1E /* Author.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = ""; }; 6C5656562358DBAB00460C1E /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; }; 6C5656582358DBB800460C1E /* Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Like.swift; sourceTree = ""; }; @@ -77,7 +84,6 @@ 7701BEC1233F1B1C0004C30D /* Fakestagram-Xcode10Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Fakestagram-Xcode10Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEC5233F1B1C0004C30D /* RequestBuilderTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilderTest.swift; sourceTree = ""; }; 7701BEC7233F1B1C0004C30D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7701BED0233F1B540004C30D /* PostsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsTableViewController.swift; sourceTree = ""; }; 7B8A339C8EBE3992A9E89CAF /* Pods_Fakestagram_Xcode10Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Fakestagram_Xcode10Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 82459500856F6D726FFB5B8E /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fakestagram-Xcode10Tests.release.xcconfig"; path = "Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig"; sourceTree = ""; }; D65BF6830E7358A7FE742F2E /* Pods-Fakestagram-Xcode10.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fakestagram-Xcode10.release.xcconfig"; path = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig"; sourceTree = ""; }; @@ -148,6 +154,8 @@ 6C1DC82723523B6C001E8065 /* View */ = { isa = PBXGroup; children = ( + 6C307328235A83A40063C3C5 /* PostCollectionViewCell.swift */, + 6C307329235A83A40063C3C5 /* PostCollectionViewCell.xib */, 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */, 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */, 6C1DC82E23524732001E8065 /* AuthorView.swift */, @@ -192,13 +200,14 @@ 6C1DC80F2351658F001E8065 /* Network */, 6C5F57962348206000488E96 /* DataSource */, 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */, - 7701BED0233F1B540004C30D /* PostsTableViewController.swift */, 6C5F5799234827B200488E96 /* PostViewController.swift */, + 6C307326235A78350063C3C5 /* PostsViewController.swift */, 7701BEB4233F1B1B0004C30D /* Main.storyboard */, 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, 6C5F57942348203100488E96 /* Credentials.swift */, + 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */, ); path = "Fakestagram-Xcode10"; sourceTree = ""; @@ -313,6 +322,7 @@ 7701BEBB233F1B1C0004C30D /* LaunchScreen.storyboard in Resources */, 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */, 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */, + 6C30732B235A83A40063C3C5 /* PostCollectionViewCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -397,18 +407,20 @@ buildActionMask = 2147483647; files = ( 6C1DC813235165C4001E8065 /* StatusCode.swift in Sources */, + 6C30732D235AA3730063C3C5 /* UIDevice+models.swift in Sources */, 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */, 6C5656592358DBB800460C1E /* Like.swift in Sources */, - 7701BED1233F1B540004C30D /* PostsTableViewController.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, 6C1DC80C23516554001E8065 /* Account.swift in Sources */, 6C5656552358DB9D00460C1E /* Author.swift in Sources */, 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */, + 6C307327235A78350063C3C5 /* PostsViewController.swift in Sources */, 6C5656572358DBAB00460C1E /* Comment.swift in Sources */, + 6C30732A235A83A40063C3C5 /* PostCollectionViewCell.swift in Sources */, 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */, 6C1DC811235165A8001E8065 /* Client.swift in Sources */, 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, @@ -577,13 +589,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = F2BL68NTA5; + DEVELOPMENT_TEAM = 6FC73M3GHS; INFOPLIST_FILE = "Fakestagram-Xcode10/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "unam.Fakestagram-Xcode10"; + PRODUCT_BUNDLE_IDENTIFIER = "com.Fakestagram-Xcode10"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -596,13 +608,13 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = F2BL68NTA5; + DEVELOPMENT_TEAM = 6FC73M3GHS; INFOPLIST_FILE = "Fakestagram-Xcode10/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "unam.Fakestagram-Xcode10"; + PRODUCT_BUNDLE_IDENTIFIER = "com.Fakestagram-Xcode10"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index a92916f300423ce92a222645b494bae11deccbfd..758c466d7075d18d61a528596c616b91a8d591a4 100644 GIT binary patch delta 11776 zcmd6N2UL^S|My)$7FiGoBxHa>NJvN!6|^pvL+>zxQ6b z7k<41u5<+`5CaK_1!@onEFcY7feoYsJ8*yu&;vNZ5HJ)B14W=1lz`!21Skb%pd3s9 z6Tu`<0cHRnXas)H1e(E2Fbm8Ea{vV#xEI_9R)SSvHP{F?fk(ijU>n#C_JM=oMer&( z3QmAi;2d}tycYl;fX~3^;0pK#TmwIWzafASB8VY@QYeFR7!Ng23lm`y91IJg6Apnx z;V@VPi(v^I4oARJSO&}CNH_|PhGXC)SOKeHJ@mo`I0w#!^Wc0KfQ#ULa2Z?)*TRS3 zCin>44tKzva2I?W1`flQ;Su->d=(yrufb#Rb$Aw@gYUxg@B+LDKY*9um+&h53Vsd0 zgFnHaQ8~2HyK$fv*Wr5X#WV3NJR8r$^YH?F555=QhwsPB@hbcv zei%QFpTK+ZlXxF~3O|ka;{*5^{1QHlU&C+U6Zky7fZxOKR%fCLC799c*fk;UY0at~QaR*}^tNH&m1$yTzBY$rR&PO^(U zP4<%mF8z6D#*;T=H=z}%FNHp&+DC?5xjzinzXE^_ zq{$qV&~U1z$<#5)nU_D>Q(x_!S>SWkxhv%TgI-Ns_lo>MnU0*ye7iNThoiunnV;Xo zn$;sC-)hgw?bXYkZ_mlgE(ngsqk`XH@7OaS5=emzWP<*{yaV(Ey+Ch}1+qaO&==eV z`cWyBQ8`smC5@udR7GQUfB|eegFp_*1$iK!JrAa_Y({akFC9R0=m_>)MjgR{!c%c0 z!5Cm}1*5=d8c#K?U@RC%wKRd%riyw8`-v=rCWEQKybZWOC8z?`zzwE=8mgmuYM@4% zNRw!{ZNLM%gX!$k9n=Fa?atPo!am8g2hC=bc8I=;7j!LSE|?EuTEIMNY5@yqD$NM) z5yvYQg2lkx0v1vB?`~>gofMLo;5D%z?tZY0pWqU(l%`Q@D_G7RY}DG(V&L#DvO(|= zFt>pKum!Y$)}TBhI%t=u11+Ep zv`;85%kxzEJ>GhkZ}yntvXaVa?kayr<2JChm2cBE;C8U{#yWP@locs{__tflrAaESK4S@RNjnXfoZvsywcaa73VgPQzP zy*_>ww#J#BDgG|D{0^i5c=t) z1jC^4PD)S&Oi)6HF-k==VE-PwR=_Fb~CsP-#q*aUr7yx_2ESL@Zu&2A&1o}f>y9dA=m<#jRX2;TM z>ZbM7%bsSi88lM=6!sNM571-uBI5;PZ$^%Lir42Za?SG8dFHrty>$&PpQq7VU*xTJ zSBz|QGkI$CFiv-DNT^h9=zM9a^?Mp>-DM569{+Hkr;h2yFxPBvlYg~5deXR?J;v3B zO3Qt2X6d3wxqXdHkvgi&nkwt~k>rLlcP XdZO&$$p?XMMGM)^L}9D$kX&sot3# z^}%R)Qm{o9$8(%7&2v{a)zr8{9G}#+n(8vY%g<;hHFQj_i*(ggPqVwa)ZO57H@fRt z8#bK^c@!HU&ppM(Ru!VgPoYAt>gv=vpAgB$3c0CcS27HMl)8&#V5iUu<0MInpvw^w3fB1W8!&NoJJ`JZvz=zKpR3@4JqV;wVD(H7lL;7 zkQ_Jz7sI<*i+eyRythKGC@#CfiDB;g8vj(b@wb$Xa@97u<&gS1$lVW@jK8I}6)pws zw-$8i;&S-FZ59Zwf-pk`>C6_mfzG0i@*nou%0O%rb88Sy)&n9 zcA(PdVS?^!s`5Aa+`RSA_161+-r8EXkMXUeI}`BXK5w&!&8b2j z2NUo;ewW^-%joiPHRYqM&S6&j%rPC7|04Xbl{fTVtM~|h$~%BAUZ|OJMQ|+JH zHS9O=+O0AZkiqZa4;>{*0~;>gW~;Bmzkqow{006Be}linKj5EqEq#ctqYu;dbi-Eo zHv$MEgfKIg8|fzc2;EG#@Ro7hIIp*^z*WVZ!1!FY|c; zTwO*tX~4Ik<$!T>GqSSN3_UXJ^FwSxvKwql@7xy@g`zumVZf=5UT2XS#Q_ z2}pKKzo zmJS>1_td!?{jRzOx`#eaL4|xpa703biJw;b|1{GfXlQViDwd#OY^JMJF~W`o6r+;h z8>%#dhO^?|Rn|ZpPsng{%?6&jA(ySXLT(>Z#r&C#`I4a?|33_Zt;3rz!4FM1WD`(1 zTgpf@7>!2x3`5x}U5##LD{Ve^E%QvxZVKpAbWg`r#-Z^ei%ZJbLR--|(B2^n6PYZa zNpwG5&b;f~x%M=JeSVr@ZdR|XG()fKp7ZD5DhHLQiphZ+O`)&SgG>gVq0jR&5I`Qd zXDgb9rlVR^hw71+K1&bL7wKX8GCgub7LX53VLW?|K2Nueu4j?Uu*zCFi#J1pf@X!d z^a9VNaW}ze7rPIm1*~fpeTi<9ldi%p8A!b;1Psyha*=kcTyzw@(#8M4dngyJKr7KI zw3=;RkV(QC^dMS`9zyF_`k@p(jMlRaU5_@h9bwYo^Ly%R7{8k8>WiCrePuq`U0?l= zLPgb7myapE+gIwUuW>U+$CR?xTNOeG`SpymtP3j|(b0JrGix{Kbq#ZC;hprnRrIJ_ zE{~S)9`n&U|LVh%udUNACP<#jDH=`}ga^#IFFL%%KcZtui&Y88L7Ssyb z|9b;on7g74)Q)xlb31wzZAIJAcKSL!PT!y>+R;w5iz)hU`X)WYH2W-dtd8wxMo*!G zeCwyteslmmLr>DT=qdVkJ45pW(DMw~CNrL#X1Kx;tcjf;cm?j+a>Ku(*U;H3;LdZaC06%pBsaFnlaw# zch?PNq5e?!>{}o)gPR?upwQFEe9UYHE32k6A0q2&UeQr4$DyGyVMF6E`YDUTumH%g z5Q{40>Z&H6kJ-H&lrnfyJO%n02gT>H1V>^ima+D7tiVce7)N6jj={0WhvRTO^S0H& zHx%&!;}lP=JJ02JmCtT)+Zz2oCgyj-V;K{0zx!qsTp`!ghvF<29PmTl*>{kjXw8j8rC!#JRW##O%O%I3E|_!MG4R@en)|52N4HALx(tC;BtJPJf}l z(%*LAViv!#Fd3KPGF;BSN73JzNb>oTzc~mv7{(`&!Wo`5==H%yopMAY3w??_^(^#a zz`|JOZSqyI7_PcATC?%h{A;ea+3j=Huuw?1LICB$ zE{XxXkf%s7$H52=3T~q~a*DUM`c7KGelhky$k^f~cq#K6H?jboD#{CaD_+Li*?+C; z==%U(!Ggv+`-arJ6|dww|9jtmZKhl${0Es z&7AiV=5p7w#PgHP8@zyCMIW(bau`b|3t2Kb8TVv~-_Hg!V@?c z$+jv0w&1n+p@}zANxb=KV@2yg`zV%eV{cu&T#wsXeiLuN8}TOm2;Pjh;1=A9+c+rW zpqzsW4k|eq#ldI}syGK7CwdF=Ae#)dJY;mXl%!4 z@H_Zze2#;O9PGwQIB4d*>HioU^08sye=Rt~7kL%`fP+aaI&3PKX02+rPMOuKYXO(> zXDlAXALCE(ryT6gL1wH{+Hl}=d<97yN>x- z5dVUI#lPX-@gMk44q7UCH zpfC{175^_rg?9#nM9SDgm@f3VEokp#3kgJ#I|IY6Dm97c1v!phYatpA-pnr(9WgPT zBYI*WMv_R9NH@}*B$E^lW^pi^gMB#ImxFh4upbBeb8r9$2ks!LUG9t6c=tuv<_)6i zs4fSV+v&janKu1@=)g!nejC|haymU28T79ntZVZM$%MQ`Fk>+gM}?*A_tue0B8&r7pWw*3|f#XQcc`s3aKGe ziHA%h(>XYlgTpvj#KB??mT+)52S;$Ql!IkENFC24(m-YqA890hz|^vw2N@h3$-z+^ z9L>Qo930DvGJ-1&c7>dUPc?3TS>Di5EHmt?_Xl4v+&!{~jhP>rr(vqM-reY_Yht0Q zmqk_mtDF7Rp(KX&j=Dbi*}d{}3No{;d6`++*35$5`PS^-gL+td^z516!=B$WJF6gg zkI`r%_mZW|jF9`t{bUIT*{YexnAk>^k>%t84o>3WEDm~@2pu=pmXbB#!lUFtvX(qV z){%!fSi!+59Gu3%Iu176!0BWo*}~J@L>?iVIXIbvE)G_a3$U^NHbyhTk8 z8v5#j8xvQU$YX>Z*Zi~3Uh*VAj~Wh6?U+YVk~)PPB!~W`F)k%9l9zb!#&}Z8=Dae= z(3iYQSXlHA!p!o#K~B((9IWS{mpZC|p*sSG5H296@R|}u%!c5%Nh1@DVo6lAPH!+< z(zE;Yy{mh_LCzsVhZU8L9#>IW+cU}4bH%?b^{hr0EE@xeE`4T)Yarve&5K-$494&OU8_4CvUO(F~dvQ%lHWl@QifwqvyFBt9+gYCTVRG zCzS^OOiqa_E}86NaDlIFom_ghs@gq8S~Jx%ZF;a@${@3b>ffoW_evXP4E2?>e01JO z_AfV=4aG;EwQ?al(bS#xOPiYaZBJ=Z1QOVIvu59cNoLI{?F1yOcHVq;6v#3OUSC-Q z%k#D_D822SwV)g$A8OG``S~we%#sc4Xw1)|s>&voI%Mvcg;%Y2m;R$XxG`H3n8}Vo z7qi36HS83!Ep#hlFL(yL1m0kWb*I2-aF*SPxWG=_E`u-GWr#o6ah4LsvC9wL*>O@T zJ4)&e@8VAt7`m&5Q{gmN%dR^3pdU8FS?s#QgK!tiFn`3-v{%@zg|FZb4E6oOa-)B; zR47Ck83U*+`IX1mor9;*F?P$~L-aihdjDc~3M4G3 zG-4YIbP5>!8-|PVaCVPi60XLz?AkyB_OXitf#|EzUq^qh0xF^stK_N#l|f}yWvKe7 z`l)hMqgCT>fX3>Mr+aQkjVdogja^3c40(?^a;D5@$vLu_oF^ATDm{aPKBm;*li36(XcxhdglDQF}H6bW|GD(V9aBeC{6{)_hHho)UZKe#bK_nsxWt0O_(Qa zdRSeUH*7{&W7s`m_k}G9TNd^}*vhcgVQa$HhOG-*AGR;-XxN3YufkEdBfNk3i13PV zS9oQ(H{2iI96l?2et0093ttreQ24Xq7sI~{|26#g@IS-fGQk6acEO{9Cj|!u&j}6*UKAV^91|QDoDiH8oD;k+_(X6` z@QY9?R0$J>7Gb6^TUa1;3Wo}dg~NrV!is>fQdljl5qgBvg|mcnh4Y0}xKOxQxJtN2 zxK{YEaD#A@aHnv$@Nwaj!l#7$g|7?G2`>oW7k(hTB)lxVCj3_To$v<{5Mfc6NFWl4 zBqF;gThvE%mndIUE*dYY5;cgLL^DORMGHh!v{1BIv{Cee=nc_H(J9dx(OFU8UC~w1 zkD}j2e~SJVLopW1#j)Zzu|}LA?j}wao5W^unz)a6uy~xfPTVYBBwiw3CVoJ?Qv8tk zVetm>Ch=zRZt;Hc5%F>H3GqqsDe=4F3*z_17sVfnzZd^55lF<6NQqpcltfE1Bm*Rs zl4{8m$yCWSNv)(_(jf5#Bz{S=WR_%(WS(S!gi01l9+hm9?2zn|?3O$(*(=#6d0KKn za!~S|F3ffq=Bo_ucg;nQY%sx zEsK$iNMY2({c`{D6P4<-RnCyMoMcIe4E3zMDzskep zN_mt#S{@@$k|)bea*Nz5PnVCDSIcYU9(k?2Ufv*Yk}s6sFJCHOE?*&ED_>2NdB7fkLE+RU|7+3bP_jVN=)@8H!9rt|DJCSm9I*RTL>o6eAR6iph#v z#l4CRiUW$XijS01rAFCJnXEJ^&B`=oPi1dqwz99XpK^e5ymG#Bm2#(YpK`zQ8RfIe zSCuD~XOx$epDVvmUR8dr{89O{@)zZA%0HrFq5{?^XVj>u(NSZf#zoacO^xzIO^@&9rbwB-l%<1Pe;8Jbt3As=*Z}l=swZ8(Z$iD zqsK*0h@KQZJ-Rl!F4`MCD|&hKmgvW$UylAD`cm}e=ue_Qi@u_YS0$;^R5q2J8S6|{ zFIBFpIG`$5jZ%$KjZ@83QPpNuyXuJQli~S+?r`YRipbl4y z)zRu$b(~tG&QK3lJJmzgMd}ju2=yZMGWEmizy|du^=5U8x=sD4dYk$w^?vm;>Sxt2 zt6x#Stv;hZtA1B~S$$3Yo%#p$PwMM&BrZHo5GRU@jf;!Z#3jU;`6arU@^IB(oN zaU0?uk9#@pY}}V|f5n4%6i?#A;|1}e_^9{|@$K<1#J?Kar}1l=HM2BxG>bHMYwp$DuUV>DuGytIrn#ym+DNTb zE7vAy4cbI)cWsI`RohQHL|ddS(UxkV%pEPr~#Bf5M7{RS9bno=$i>;U`^$uDdQ6&y)bjx%P=vL}h>(=Nt>9*>&>vrlM)9ukcp*s}Ny{J2^JEA+K zJFR<1cTV@Q?o-|8x-WD;>weMwru##$)a&&|eUiSrK0}|W@1@Vu7wgCC>-7zKpWd%; z*3Z(<(a+N_&{KU-|DgUM{loeV`c3*R`ZoQe`tACi`q%WI8AOIOL#e@USZ6q3IA{3K zaM|#Q;WNWE!!L&441qrke;I)h8Hq96C^Kq}Mq@W)iZRWYZp<)d8V4FnjAM*rjpL1z zjFXLZMxU|CILkQSNR5k(cN>=)*Bg%;<ZnUP}y5lqIGlrX}Vj7A1~Mo}0WN`QGFQ zlQ$-}B|njTB>8Ca>&YjQ-%386d^Y)f^83jjB!8FuL-NnbzXp>3Nd7worG%vjQp72d zDcw>Ar4*;QQ`V*IOnEKkLduUOXbLw8Ok$JV6lIDrsZE8Zk)|=G@uo>8m#NCsVDg## zrkSb2)RSw86rv|=F{UPeqc`kM5X^zG@p()XnAO@Ai+x%3y(52qhV|Jkmvo9#X9{q2M7dG^8f zA@(ABiG6~-%09*JvDexg?alVt_IdUN_H6(cdx1k>?odD0Yl+ zlsiT_DjY6Hjl=Jl>sa969E%-G9m^dn9YM!~j&+Vbj^`XNJ6?4hbG+d=?RdxWuH!w& ze;gk>zA9W=_(0)?!tI5-3ilN5Eqto*K;g56uN59IJW=>o;pxJ63eOduFZ|P)=p5#( zX?6yj_c~WPgU*f4Hs^Nde&;jJ!_HTnN1exR3zFF7weuR6bRe(U_+`MdKE m=U+o2hDe4;hbV?b4KWN!9MWw_N+;w-9p7Q1+Y$GWgZ~E`>OOP; delta 7756 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 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/Contents.json b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/Contents.json new file mode 100644 index 0000000..79d4115 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "iconCamera.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/iconCamera.png b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/iconCamera.imageset/iconCamera.png new file mode 100644 index 0000000000000000000000000000000000000000..52515091684841fcffc69490898bb53e0cfcbc16 GIT binary patch literal 458 zcmV;*0X6=KP);>>pcesA;~^B* zE)haBGA_C%mXrR2#Er3%m&{DRs@K(3T?7C2i&g@zfhCYRummoJyRkJr0!19g1RN`e zk$l?)rfUdI#m8#fKnM5)27*-};D^Aqz5pJ9BQ10$iv#uT#^U@8w15OtixRL8w1J67 zG|hv)MhKN;BfG(znBYCc>^`1lM9>;<{t~`?iU~b{O z0dfNEY5ckLPOz}v9x|3$Yy$+ zWFB6TV;w_2p)Fufo}VIwa!yrztvhj{Et~{Xa2Ic;HnmYRyzt%Lb%)rDpY83Mjlm*c zsqCwm?iva@Did&D*bK}742kt*w=SyyeUJYf;2}aN!`%2|%snX!YM7dYekEftqdZ1P zBlMdnqLHVbZXgzm^Wr%-F;h0CW+5yjR)arlUzhGHjk`|12#3^Yj1I)c={8|H;Y!VPXH1 zlmACY|5Q}}u(1CP4gcEO|8jEw%gg_|y8mo!|HQ=q<>mj3jQ=?~|DT`#s;d81R{u*& z|0N~=XlVbWr2j51|2H@PK|%ksv;P?x|A2u1TwMRVyZ?B2aT*JM000IiNkl z4ZE>S5P(Y`k`$#PA{;#A=>Pw_m-8Hte1vMo&U*L$1>INKnVp>-k|Yoa1OkCTAP@)y z0s^R-ZgwaAb}Hvc+g>koqtMh9*3VZL)AqBeT+GJphC1tqtd8FGdk^e>X*Z%!W&Nm? zF#Un`-0z3JJLJ!?ll0Q(YX6vKUDi)rlE^FLcf`tgT6FX*DCu{ky=DE}ucAh;{{F5R zn5>`uB|1(;zXLs+_0zwAKB+D!%if;#^FKw;>Ilm67xf>bHmE0fP#m*%c!=7pD|iTv zL)I3LNUB7MYrK%PMlpWbFn^yV*<3vAg9yrjLo`d(YQ>2>Q=+Sl(SkCRmn4%L9q1eV z!Ke70`hbG6M{%)fLmJ96);hO_6a!4c1PVI1nlKC7YPFR32>vE-0s@0*39u8`AnreYlkL%r~Xvv_^TY7>`ilt<%6T zTpO&t&X@=bjV!l()?R1gZwy0u#oFskxIi&M@tOz3R%$5juT zxG@B*LFH-EIWrZ8!cZ8pM;Ho2`iA4Lk2l20X+GbOP}bI6f4boiz8?JlFeJ1;L^7nb z$A8qy{Sk&XP8B0z?R5sFs87ofr`GoQ)kI2$a}2@Y^9>0dAjU6TjVVt`>D&UvkkrWx zd?$uXtK}Q#bnPo*?RCbi-M@a1HKCgcb*~`Yr%mV#7{`!Or*LP7Vo2y(f`($aA=HbZ zg7vWHSx~xn;eNbff?+tP)Veo=Z%riD^@Y;cw(PLh%3)wMV+`n&OOXmSJJwctVvH>? zp@J|@k1(a};Q@fVqt~Yn-ObPAqe*o|FZc)3R z7enW5Bi2SYK;9rdLTLN@3-IN&Hfx_-RM>ctu=cqF=q@;=v~xNULasGCI?Y07Aam1z z*!9X^3^+rY69*u-P_(uc|4?U8f_+L=wme`>CoZM>MIIF>U~K5+Gbg$*y-_==uTYW{ zkTWQY(5c!Ddx%!r9>r*XLIG%52&ip+FWJ^l-8OW8g+J5}7_?vE;g?ufkl@Dfin;-V zPyKi>WD<|0FAzizqTvsjS8Qz7IxrEW;?MHY(HHRgJxUJox$b_?C1rW8>IKaOPj#BXHjyBb7M8nVeLFmArLfRYC`6Udtmk$@|g(+rgP- z@(j;;&n_}_aOQlx!Xm*hshSRSyK^am`3iT;p6=r)jiI%q_S*~&fv5m z%8ZsueB1E3oMtyzf1i1RrVab8sW%~42#wvD)k% zv%XR6vVJ6Rt~#nqH`;N)#al!epu?X07$&5DXk^WKETJ~xXD3*S<|#{!J|ocIa%y>u zKPeDi^0#djZWIDRl4Bt*{M2vsNN{|KDF4SyhKVZapOS9hCom0&zn>(;;C|zYKp+qZ1OkCT dAP@*H`45|VnE^y~*a-jt002ovPDHLkV1l_tgoXeB literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard index 2d45032..2e1e7af 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -10,86 +10,106 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + + - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift index d63f45e..32ab7ec 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift @@ -18,6 +18,7 @@ struct Post: Codable { let createdAt: String var liked: Bool let location: String + let author: Author? func likesCountText() -> String { return "\(likesCount) likes" diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift deleted file mode 100644 index 41d8bed..0000000 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsTableViewController.swift +++ /dev/null @@ -1,100 +0,0 @@ -// -// PostsTableViewController.swift -// fakestagram -// -// Created by LuisE on 9/24/19. -// Copyright © 2019 3zcurdia. All rights reserved. -// - -import UIKit - -class PostsTableViewController: UITableViewController { - static let cellId = "PostCell" - var posts: [Post]? { - didSet { self.tableView.reloadData() } - } - let client = RestClient<[Post]>(client: Client.fakestagram, basePath: "/api/v1/posts/") - - override func viewDidLoad() { - super.viewDidLoad() - client.show{ [unowned self] data in - self.posts = data - } - // Uncomment the following line to preserve selection between presentations - // self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem - } - - // MARK: - Table view data source - - override func numberOfSections(in tableView: UITableView) -> Int { - return 1 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return posts?.count ?? 0 - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: PostsTableViewController.cellId, for: indexPath) - guard let posts = self.posts else { return cell } - posts[indexPath.row].load { img in - cell.imageView?.contentMode = .scaleAspectFit - cell.imageView?.image = img - } - cell.textLabel?.text = posts[indexPath.row].title - cell.detailTextLabel?.text = posts[indexPath.row].location - - return cell - } - - /* - // Override to support conditional editing of the table view. - override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. - return true - } - */ - - /* - // Override to support editing the table view. - override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - // Delete the row from the data source - tableView.deleteRows(at: [indexPath], with: .fade) - } else if editingStyle == .insert { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } - } - */ - - /* - // Override to support rearranging the table view. - override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - if segue.identifier == "showPostSegue" { - let dest = segue.destination as! PostViewController - let idx = self.tableView.indexPathForSelectedRow?.row ?? 0 - dest.post = posts?[idx] - } - } -} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift new file mode 100644 index 0000000..198e6f8 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift @@ -0,0 +1,58 @@ +// +// PostsViewController.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 18/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class PostsViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { + var posts: [Post]? { + didSet { + self.postsCollection.reloadData() + } + } + let client = RestClient<[Post]>(client: Client.fakestagram, basePath: "/api/v1/posts") + + @IBOutlet weak var postsCollection: UICollectionView! + override func viewDidLoad() { + super.viewDidLoad() + postsCollection.delegate = self + postsCollection.dataSource = self + let nib = UINib(nibName: String(describing: PostCollectionViewCell.self), bundle: nil) + postsCollection.register(nib, forCellWithReuseIdentifier: PostCollectionViewCell.identifier) + client.show { [unowned self] data in + self.posts = data + } + + // Do any additional setup after loading the view. + } + + /* + // MARK: - Navigation + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + + // MARK: - Collection View Delegates + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return self.posts?.count ?? 0 + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PostCollectionViewCell.identifier, for: indexPath) as! PostCollectionViewCell + guard let posts = self.posts else { return cell } + cell.post = posts[indexPath.row] + return cell + } + + // MARK: - Flow Layout Delegates + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: self.view.frame.width, height: 650) + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift new file mode 100644 index 0000000..66e5316 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift @@ -0,0 +1,88 @@ +// +// UIDevice+models.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 18/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +public extension UIDevice { + + static let modelName: String = { + var systemInfo = utsname() + uname(&systemInfo) + let machineMirror = Mirror(reflecting: systemInfo.machine) + let identifier = machineMirror.children.reduce("") { identifier, element in + guard let value = element.value as? Int8, value != 0 else { return identifier } + return identifier + String(UnicodeScalar(UInt8(value))) + } + + func mapToDevice(identifier: String) -> String { // swiftlint:disable:this cyclomatic_complexity + #if os(iOS) + switch identifier { + case "iPod5,1": return "iPod touch (5th generation)" + case "iPod7,1": return "iPod touch (6th generation)" + case "iPod9,1": return "iPod touch (7th generation)" + case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4" + case "iPhone4,1": return "iPhone 4s" + case "iPhone5,1", "iPhone5,2": return "iPhone 5" + case "iPhone5,3", "iPhone5,4": return "iPhone 5c" + case "iPhone6,1", "iPhone6,2": return "iPhone 5s" + case "iPhone7,2": return "iPhone 6" + case "iPhone7,1": return "iPhone 6 Plus" + case "iPhone8,1": return "iPhone 6s" + case "iPhone8,2": return "iPhone 6s Plus" + case "iPhone9,1", "iPhone9,3": return "iPhone 7" + case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus" + case "iPhone8,4": return "iPhone SE" + case "iPhone10,1", "iPhone10,4": return "iPhone 8" + case "iPhone10,2", "iPhone10,5": return "iPhone 8 Plus" + case "iPhone10,3", "iPhone10,6": return "iPhone X" + case "iPhone11,2": return "iPhone XS" + case "iPhone11,4", "iPhone11,6": return "iPhone XS Max" + case "iPhone11,8": return "iPhone XR" + case "iPhone12,1": return "iPhone 11" + case "iPhone12,3": return "iPhone 11 Pro" + case "iPhone12,5": return "iPhone 11 Pro Max" + case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2" + case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad (3rd generation)" + case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad (4th generation)" + case "iPad6,11", "iPad6,12": return "iPad (5th generation)" + case "iPad7,5", "iPad7,6": return "iPad (6th generation)" + case "iPad7,11", "iPad7,12": return "iPad (7th generation)" + case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air" + case "iPad5,3", "iPad5,4": return "iPad Air 2" + case "iPad11,4", "iPad11,5": return "iPad Air (3rd generation)" + case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad mini" + case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad mini 2" + case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad mini 3" + case "iPad5,1", "iPad5,2": return "iPad mini 4" + case "iPad11,1", "iPad11,2": return "iPad mini (5th generation)" + case "iPad6,3", "iPad6,4": return "iPad Pro (9.7-inch)" + case "iPad6,7", "iPad6,8": return "iPad Pro (12.9-inch)" + case "iPad7,1", "iPad7,2": return "iPad Pro (12.9-inch) (2nd generation)" + case "iPad7,3", "iPad7,4": return "iPad Pro (10.5-inch)" + case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4":return "iPad Pro (11-inch)" + case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8":return "iPad Pro (12.9-inch) (3rd generation)" + case "AppleTV5,3": return "Apple TV" + case "AppleTV6,2": return "Apple TV 4K" + case "AudioAccessory1,1": return "HomePod" + case "i386", "x86_64": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "iOS"))" + default: return identifier + } + #elseif os(tvOS) + switch identifier { + case "AppleTV5,3": return "Apple TV 4" + case "AppleTV6,2": return "Apple TV 4K" + case "i386", "x86_64": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "tvOS"))" + default: return identifier + } + #endif + } + + return mapToDevice(identifier: identifier) + }() + +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift index 05afa7b..bec7597 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift @@ -8,6 +8,7 @@ import UIKit +@IBDesignable class AuthorView: UIView { var author: Author? { didSet { updateContent() } @@ -15,14 +16,19 @@ class AuthorView: UIView { private let avatar: UIImageView = { let iv = UIImageView() - iv.image = UIImage(named: "profile.circle.fill") + iv.image = UIImage(named: "person") iv.contentMode = .scaleAspectFill + iv.layer.cornerRadius = 41 + iv.clipsToBounds = true iv.translatesAutoresizingMaskIntoConstraints = false return iv }() private let nameLbl: UILabel = { let lbl = UILabel() lbl.text = "Lorem ipsum" + lbl.font = UIFont.systemFont(ofSize: 18, weight: .bold) + lbl.textColor = .black + lbl.translatesAutoresizingMaskIntoConstraints = false return lbl }() @@ -43,14 +49,15 @@ class AuthorView: UIView { private func setupConstraints() { addSubview(avatar) NSLayoutConstraint.activate([ - avatar.topAnchor.constraint(equalTo: self.topAnchor, constant: 3), - avatar.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 3), - avatar.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 3) + avatar.topAnchor.constraint(equalTo: self.topAnchor, constant: 5), + avatar.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 5), + avatar.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -5), + avatar.widthAnchor.constraint(equalToConstant: 90) ]) addSubview(nameLbl) NSLayoutConstraint.activate([ nameLbl.leadingAnchor.constraint(equalTo: avatar.trailingAnchor, constant: 5), - nameLbl.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 3), + nameLbl.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -5), nameLbl.centerYAnchor.constraint(equalTo: self.centerYAnchor) ]) } @@ -60,3 +67,4 @@ class AuthorView: UIView { nameLbl.text = uauthor.name } } + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift new file mode 100644 index 0000000..2208d20 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift @@ -0,0 +1,53 @@ +// +// PostCollectionViewCell.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 18/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class PostCollectionViewCell: UICollectionViewCell { + + static let identifier: String = "PostCell" + public var post: Post? { + didSet { + updateView() + } + } + + @IBOutlet weak var authorView: AuthorView! + @IBOutlet weak var imageView: UIImageView! + @IBOutlet weak var likeCounter: UILabel! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var likeBttn: UIButton! + @IBOutlet weak var commentBtn: UIButton! + + @IBAction func onTapLike(_ sender: Any?){ + print("Likes") + } + @IBAction func onTapCreateComment(_ sender: Any?){ + print("to comment") + } + @IBAction func onTapShowComment(_ sender: Any?){ + print("to show comment") + } + + func reset() { + self.imageView.image = nil + self.likeCounter.text = "" + self.titleLabel.text = "" + } + + func updateView() { + reset() + guard let post = self.post else { return } + self.authorView.author = post.author + self.titleLabel.text = post.title + self.likeCounter.text = post.likesCountText() + post.load { [unowned self] img in + self.imageView.image = img + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib new file mode 100644 index 0000000..bc7faf4 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1691fd0474876ed0e621b37aa0df1b0c67d4764a Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 19 Oct 2019 12:17:34 -0500 Subject: [PATCH 10/18] Implement post creation with images using base64 --- .../project.pbxproj | 26 ++++++++++++++---- .../UserInterfaceState.xcuserstate | Bin 21741 -> 29516 bytes .../pomememe.imageset/Contents.json | 21 ++++++++++++++ .../pomememe.imageset/pomememe.jpg | Bin 0 -> 27485 bytes .../Base.lproj/Main.storyboard | 25 +++++++++++++---- .../Fakestagram-Xcode10/Models/Post.swift | 5 ++++ .../Fakestagram-Xcode10/UIImage+Base64.swift | 17 ++++++++++++ .../CameraViewController.swift | 24 ++++++++++++++++ .../PostViewController.swift | 0 .../PostsViewController.swift | 0 .../{View => Views}/AuthorView.swift | 0 .../PostCollectionViewCell.swift | 1 + .../PostCollectionViewCell.xib | 0 .../ShowPostViewController.swift | 0 .../ShowPostViewController.xib | 0 15 files changed, 109 insertions(+), 10 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/pomememe.jpg create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift rename Fakestagram-Xcode10/Fakestagram-Xcode10/{ => ViewControllers}/PostViewController.swift (100%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{ => ViewControllers}/PostsViewController.swift (100%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{View => Views}/AuthorView.swift (100%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{View => Views}/PostCollectionViewCell.swift (96%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{View => Views}/PostCollectionViewCell.xib (100%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{View => Views}/ShowPostViewController.swift (100%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{View => Views}/ShowPostViewController.xib (100%) diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index dabcc5e..5f6f417 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 6C112495235B742900D8FAA4 /* UIImage+Base64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */; }; 6C1DC80C23516554001E8065 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80B23516554001E8065 /* Account.swift */; }; 6C1DC80E2351656A001E8065 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80D2351656A001E8065 /* Post.swift */; }; 6C1DC811235165A8001E8065 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC810235165A8001E8065 /* Client.swift */; }; @@ -30,6 +31,7 @@ 6C5656592358DBB800460C1E /* Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656582358DBB800460C1E /* Like.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; + 6CB97272235B6B5D0052BDB2 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB4233F1B1B0004C30D /* Main.storyboard */; }; 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB7233F1B1C0004C30D /* Assets.xcassets */; }; @@ -52,6 +54,7 @@ /* Begin PBXFileReference section */ 46A679CEAFBC334DF6FC73B9 /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fakestagram-Xcode10.debug.xcconfig"; path = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; 6487BC4A6C894AC3FCB0A8B6 /* Pods_Fakestagram_Xcode10.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Fakestagram_Xcode10.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Base64.swift"; sourceTree = ""; }; 6C1DC80B23516554001E8065 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; 6C1DC80D2351656A001E8065 /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; 6C1DC810235165A8001E8065 /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; @@ -75,6 +78,7 @@ 6C5656582358DBB800460C1E /* Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Like.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; + 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7701BEB5233F1B1B0004C30D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -119,6 +123,16 @@ name = Frameworks; sourceTree = ""; }; + 6C112496235B7C3200D8FAA4 /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 6C5F5799234827B200488E96 /* PostViewController.swift */, + 6C307326235A78350063C3C5 /* PostsViewController.swift */, + 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */, + ); + path = ViewControllers; + sourceTree = ""; + }; 6C1DC80A2351653E001E8065 /* Models */ = { isa = PBXGroup; children = ( @@ -151,7 +165,7 @@ path = casettes; sourceTree = ""; }; - 6C1DC82723523B6C001E8065 /* View */ = { + 6C1DC82723523B6C001E8065 /* Views */ = { isa = PBXGroup; children = ( 6C307328235A83A40063C3C5 /* PostCollectionViewCell.swift */, @@ -160,7 +174,7 @@ 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */, 6C1DC82E23524732001E8065 /* AuthorView.swift */, ); - path = View; + path = Views; sourceTree = ""; }; 6C5F57962348206000488E96 /* DataSource */ = { @@ -195,18 +209,18 @@ 7701BEAF233F1B1B0004C30D /* Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( - 6C1DC82723523B6C001E8065 /* View */, + 6C112496235B7C3200D8FAA4 /* ViewControllers */, + 6C1DC82723523B6C001E8065 /* Views */, 6C1DC80A2351653E001E8065 /* Models */, 6C1DC80F2351658F001E8065 /* Network */, 6C5F57962348206000488E96 /* DataSource */, 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */, - 6C5F5799234827B200488E96 /* PostViewController.swift */, - 6C307326235A78350063C3C5 /* PostsViewController.swift */, 7701BEB4233F1B1B0004C30D /* Main.storyboard */, 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, 6C5F57942348203100488E96 /* Credentials.swift */, + 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */, 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */, ); path = "Fakestagram-Xcode10"; @@ -407,6 +421,7 @@ buildActionMask = 2147483647; files = ( 6C1DC813235165C4001E8065 /* StatusCode.swift in Sources */, + 6CB97272235B6B5D0052BDB2 /* CameraViewController.swift in Sources */, 6C30732D235AA3730063C3C5 /* UIDevice+models.swift in Sources */, 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, @@ -425,6 +440,7 @@ 6C1DC811235165A8001E8065 /* Client.swift in Sources */, 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, + 6C112495235B742900D8FAA4 /* UIImage+Base64.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 758c466d7075d18d61a528596c616b91a8d591a4..4eac7da9d908b982489797f3658d8270cf1d0c7e 100644 GIT binary patch delta 16846 zcma)D2S8I-_kZ_IM1=$rLI@)eAPhld2)Gyl2aphw00|@{0V1M66mXB+r`B0(HC<|L zWjNbfYpvE*t#)YD+N!m-YHe+;t=866SGE1$mk>wg`@TQ;B;0q;y}x_zIp>~nxw0M{ z{uw-Pao{mnPplUv!U8cd))z~{`eDgf3YLncVg0dmECb8L^0A@VFl;zB0;|Isu_mk) zn}kiqreia(nb<6BE;bK)7F&cZ!Iok#VJ~AVuvf8FSR1w)TZ3)D-oW0*HetK4-Pi}% z9&9i65q1bWj2*?kz)oS`VBcbnv)Fgo57oWQ;Do_H@@fD7>eJOY>Dk$4myjmP2r@JxIFJ`f*<564H~ z1$ZG|jF;i%xE?p)R=gUo!R`21d>r14x8M`;8TcH0E3Vj?k>m`2PX9KikbTKPq>3yi)no~&A+@BAEG5fG18FD6 zlHx{DHhcUM7DduaegsYBTjNwVV2Y`j|RI9i@&_UsI0L)EVk~>L=Nn~N^(S?U zx=sBkf)ZJ}#v8$FV)qsP#8 zdMrJKolqL0xh>96V2^cngr{R4f0{+Yg1L0_hS zqp#A}=m+%Q^gj&70H!zN!}u~hhR+C?AV$K3Gto>E(~lX*3}SMbVN405VYG~isbb7b z4Ks!r&rD@zGIN*(%yZ0A#>u?QyvnR%I-S)-mSY&qGV=r@^76~=&0|`|T5D{1_L}jH zwx(7yFET$fJt-wOWoSZjk|Hl5H9a{cAtNm#H=%#OwA`Vo8L7#+Y01a2-k1;Oiv?kk zSmJt2f(2tCSSS{TNwIJ&0+T@s(vX2(um|*pJz+1{dp#C~MPqU-28+ca;;?wE50(IZ zpf3y1KR*^oS&+*D1qJF$V-AZ#!;1o9vs`a%CrEE~(g zaxn!Iz)#>Qcngs&4^J9w=B4Xv?6tN;*Z(Q%X8UMcO{;eN*s=EJ*2MhU`c`|hXT4AM zL6pu_qJ-XB)MIkB-P&Ah=EXQyh6g)xT3T$a3Tvyi!CvPxiN5s?9_z$!5#X2Pm4GiJf8ST$CI z)nYc71aqJgmcts@04Knia4}o~SNp@wa2L!zj*UW0ug6AXW3UG2S&@hq!2mOFmUBwX z*a{_Dazjhsobj!r?9GWS6YEE|9>eU|SZo~DToGB*U~Oq>vNqcE?vJ*XQkAw;Q`C-L zx9C;c;%bgbk54cWVo(IdX5LaXd@E>i{vH!3aSi);uW7Dc5;Jc$2O_Qugu>p)Ns}AJ zG)rfJOCVY)_+m-qlxT=FQ=zit#X$L-=&(7hRpB%)I&Bz%DE;|7$JFT{Lnt zZvjV>q(J-8Z2ezEue*q1|Ha~*ni~7~?pWOE>K^~E1#_%=dJXGceG@!=70tFF+!wKG+{-9CKNikFouoh{pAe zXx!f!Jj^ZHN3hS!Roa~9X6xj3>7EFq@LMSpu~+&jqq7Hd|HIB`YC*T zpHdHr9+)_Q22cSiff3e18ypGiIzbiBh0qE|xd4vt4&W#bU_Gq&0BrcL%xeJ?+~CF| zaAW>6I1jREfaQ=)2Qz>JK-dVIpdF6w1T$U0o`F5axsbJVhwNDn*&^8NLH7KAMfNgS z?nbr@A#3H3y^7d2{wcQczVl#f18X>J?Vtm6g4J*$oCGJsDV<;~SO?aFo*Up)I33P_ zj_$C%!(rPDr+Kiw*DW?#c5s(!#Cj(E0DS0%xfj8N9L)U)Ci@gjz8CP28~{f+oCm>Y z;1D^Zg8dbwm6GL0rT^yo?||*A2wW9+IozPY&WWa2?zLH{tVe30w-Doqph!3*ue) zf(zm+-9W@K1Q7@D#V&|Ai6G(>PIC`@3BK%lGI+kcxUSjo-Z;+%5cfp@mmz?-9|E}i zX@K}74~Ym5MgZ|ZT#N_d68I`y315S+cj6%~4Z)>wl?z~dcL3!az!=!(0T|!yUVCOr z#?##3QW3Zg4qQ3{*ZDL!(8ohE2+!fb4aSGyS$H;F1J}ZJaD6A9iz~o)z3_av0d7QF z^>%mQia2me_=X3Zn&VyxuHhc|CVb2FWbk}=K$i978HHEiCO1+eLb{1VYDP%kc^WAh z=s{YG*K&FwSZ2)DV|xV<~1tsK(v@O=-`N&l6N4t%B? z9E-s1;K0pB;C4O@4!q|9Hy?kF1GfNQh(C)jg1g}da1Y$ui7)1`^}?6J4_)B)cL#16 z2W~ms=K;48fdgl84fh}&dCT==cxLLv*Sf*2LEt{(z^zB%KJEtG1`o+bd=r+~hQAFz zZNuMz2cPh%aqq1zALoFXHyQb7c1PkQE{+(B0tgTJc6>LM*n#iBcjCL?XYdd_+<||9 z@4@%NBk&~rnmfV!JP~%d!ws#i0eRQ9T2I(fWUsMu?nF!X-PO&u3HA2zjuxG@xz5(= z9z(%-@Md0gH^ZCVZIAbMc~AH!96LXSpTmq3_-FVb{4nN=AHhGzx8h$IT3nbA2t#Xq zqphXY+Bmk-;|`&~0Db{AN8thZl`QAOw?0U`2a{0ICzh8F!qH|OU;^3rZc z_aMB0|BNNBTE%Uy%OS;o#V>QaehGflhW`dnKe_AIT$}!Fms4KIIkbrl+@|+cTI-t< zTOJ03p3!dNcR2z76TgMu#_zy0@GSfep6kT#;dk)+_yhPoJO|Ii3rN1R{6d{GV+9ei z5xI|IN^NWN_?p)7&9=uKf9GO9X#G$L^qaRkN#0OF2J2fGtUwUG{e(7obk~1<> z`u9)GNbe)Bi8vyj=tCsHKj2k(4PHmLWNKY8mSY45;o|G_YL_$XK(2A6@vV@w63HD;njT*)|{X{B}=H5S9 z))(%B+sm`M0mLAV2?OEnHexWm`@~KXxvrhOW9B)y@X8&uw;&}(ieqc_c;iGqp~Mo` z5<`h$#BgE+Q9u+DMerW{3*Lth;NS2c7GP@$6;Vv6i4sCXXbBw)01HSK&@5nB;KhR8 zEb!rUUF23GTkVKeTjK~<>@>38*4$FrVjth^sIhU)NPKy!=upE)Kb$>UsK;y zmtbwSSy2bBe~m4np}wWHtH~Fsd+SgXp0wC%b5JLfeS)od0*XXk@7*k~A}no$nFTlt z2o#7U_8n_)v~k~w^(Z!T*wCt7x<=FxwJ3(^3RASU)(+HS!?+Xx`o%p~9XHk}7Es-e z#SMkja76A1MOPN2xC_psMR~TUk!W)5p2MSl#5kgb+q7mD^k^emS>Vm_&et|+thK4O zi+6b_q~f-I5;3KXn9PEnEa+8|=tgfNrnhr&tK3{FLQLW~;+YQ;$hUn=+lkr494r9o z$TKY9wGne!z=v7R;|cNQ#IwYUSim}B5%C1b1Ae04R==UtAIWfuEo;Zt0PE2(U z=o=zSS7hcZk}^^ga#QkA3N1M$Eg>VPe||!G|Kyz9q4{YU`T5Q%eZymjw}^MpaYAe) z-X=D&Ae;peERb~&n~8UcEi8y+K@JQ0BF)_2w?R$pAoi{%b`raY-NXmP9u^=teOQph zf>ah{u;3xL_Yt3PgYG9jB0gq8Gz;V`i0L3cB@Pe=SrE&DI2OdCL1!dwauCM|WXzxL z{55fkLy*9NL>B^Cwp$Oe5@~7f`1*!g5A)9vKXym|6LEp~nFak=kj#Parx$bvK$^oQ9sm^2Ef}IDG3;gHtP?nN`l8Qv_P?a_z7i9&U@)TKg5bSYW7~qqXHlVX#a!M-f zN@I5RPtVBY@|Gwy76`@8XHo`+OI2EhZYauNm5wNFK`9YVGn(sbZ8@#2&GpseTW!wK zDU#r00Y2HeZ8<1;8NdykH!P$*e<+v8Y#%oSzGF-*xc=CB%|p+BrA*>9eQoHAUjk# zVkjT2B+u4T(_B9moqQeEYMpaes$8rtskN1}Z`_Mtq|7bszL0{a@(!cJpnQ5ozv z>^Al{V1NJ>ydr@d#DaK`05VX)s{$B76)JCy1`VJIj70^miC{7+aZN{IHVa+`J5Ydk z2UV&5!GWtv)f@N4`KV46fCoBI1eAdS1RW|!RU${;j!(lKsQ9!9)tpx0>yVFm47pZU z@N4)jboBQ|6{HkYC(0sn2_;dAib8f|=jNjF&mv^XmLLoDIx7CWg$&6%$auU@>=pJA zCJIx8Il_Elk+4KqCA12gge}6U!WqI@!dHYV(Bio-9JuuoThR5h>xU58qjb0V{foH& zuZ<%9A|7BZU3=xR1pkmU=XdNU0f`eIlO##Gj87&D1|a*xf`Kd;w1)T;*N{C(Z?tZq z1{ovx77GTmAPaf+Z*hl0gp*AQb>1EBaQI`sq<|E1TF&{WoEN&|qmdUEuwaM_7AYbF z-3V;$qzD}jI(w~kveeot?bmNWsv9~fA%p*|J*0$76!I>)jvF$J*xQErp%dhx`6Ojz z6gsRNTx%PNtY;p~cK3~a)YsjRK8r#oR%pW+Q0wWI1uSm`}d;t|4Lo zkTZ~k-aKDa(DCPCeBAyvPauzpjf?M-fPBC~c?E?<#ieBiqjRe)Qc`MGX$Pd4d4W&o z<({U_jYaMfI?z$t`H}wwd+>1RRmKgMoO%pd+yUJcFwDGA zl~(-hbxB{1 zM&}HT$|~n^B`IWir%p}kBTbs#M>@4%YAX7ek)A$%I>KMBNA&KU>7p+mh?*-ZpG+)Q z46I6;ls>Y?npWE{Ijy$Vxg|>FC;(PeI)4Tg%h!ONr~-ZuSrRW~Lt;>MyAPg-r=j|G zKCVLMqZyxy&qQJOi>PqD3}1n-#9znP;2+{A@l&W!eFl}IeNjXpL*?fLA}j0NQ^(6hk6f{OJhj~_+Wk)z0Zax^&xeQrbi#THtfU0iJRn(p+&y@^Of0BE{>&^o-FcQ~l;kXO zA*WQc$!Ewpo3nmIb!8`DcW`2`+=3hy^jvPz!H5QC&Ba!OYBj2x&msmh{k|>4QMy_VT=r(dK3&tSA z9}+?xZ;%@~z;EKGSkM4Zpid;Ss|_q@gxPA(s9VTwu1@4u*Q+M3*PE`74K6?V@h}ld zyN7Hyx#tm>y(}0Dvplc%lOMa_I9zx>VZpeEp)h%nJcQn%ko`m(d6)&wkKP<5zvQS8 zil#R57zB-3*oF45vy$#oKCNZZL9lHNiv=@TFpCAVJ4h22Me&e=aDx5}Cqg|F9kT3kZYApiN{J{* zceFK#78(Bvj&?50l4U<@anX6mBBxqO`TXp}w`=){@ig zyxP;xpGu^X&@!pMEO@pJi$aG=wo}k6%0Z=3*;wKRsy~%ZWl)*a0BRsLh#E`{p|V); z919k+;CU7-VFA)0CktL+!HX<-3AsNT(5$(X0+s$z{f-(&4W~v>1ssG|Snwel9#!*L z@HdO|SzOHGLEIMbxGl)DRgbT$vo&*39t!3I5LS0;iE}2++Ex@cx@z;>6^6%N46`-W zk8d%dMs5)I3v|MiaYux`$^E-_e03ulq~b9$o3J1q z>$s$nhtNjVbGtQ?s-sZoy^;mUw7lLyjYix;Mq(Amo;^rFUgKGEJVScI0k&E^>PIvi`qabSeu4Vg87=BVQWsHkv?$);azd$JImTaN!Cshw1pkpc zl9`mzN7_F#ZTfVN==@GyLw1n*gA>|)NN(Gy>(mVvAijJAvrR6EM_wGV4)&&qA^&VU z?xDLw{l(GU92&3E&-4j`Q8X3w1k4z}-ON;(LB3|W^aav3V(Gofs8%QG?iDdjB3y!nkEDOGa z$l#uPc%aeYG%}N&bObGpnW^Ug2OC0(n-rX5vSu=@VQ&WzvxE9>3)dQbTSK$ zc8NHhhJ*_*LB$vJpkhzD>+xtRJ&4Y7i8wuk6Y(#Rh|@W6Fbj@#Q>%!3Ow8$_^e}1% zy6}VK^fU`jAc00X&UE*7)2QgwPAh2@3%+8(sfTufE}^x^?9dt(oNS|YEO6B&{Fg%|B3S3sw%-sb-*A4#L6%<$QoHo#v++fJ8ebYuGuj^ZwU134#4RlY0%XON016?_M zbo@SjB)cv0!}Hi(20D9zCC4Krf`9#RlU@t1qzNXBPayf_p6Z3;Lmm5_y^Y zFvp|PLZW^|u1E8h(k~+sf2vABzk=VPm(wd)a1owk!7nWM)r0mmgw|bs@Ql$;ccQ(2 ztmNQ%v5tQGVUfYnO_hP(M889Crr)KvaG@%~ewhWovET{|e&<}R$Epmm?kYoO|IEzv z%#`H*{ZdfT;pr+vT34BY-ocd_`nU=W38=(?3Jngf&fo#|A-(TkrGv+{=@a@>_o2ap zyDYfsIUd|%a2SnDAE7^|kJ4YT;2H~%J-o$&+YgTi`ncP|Uw0X96rZ^3L!8U$zAY$? z;fhDGU3Q*6MSsH`2sc@P!ijAtSNE@a5|8;Wrv!c8J=vXyr-Z|;EBH0nDe>e@F($RIo4#ssjqcN;RG>1gEGV2OhXW%J zCX&T_v$*f06N8a6@!fd9^bIVENkj`m?kA3N_OfhrbCLV<07z!~KTYQ7pl>3&OvD9_ zj_0CFdV+2+gYKq!0A{nep9i3V1DMC;v$#Kt2RsIFI8*fWOdX68O;pU{0&XH9%rbDk zt@FB%P|oNWeRl)~L{Q1%B90&sol&vA5{G9s7RKsUgA+_GV`D~QzDyl9nyF_-qg-gS z-QMcXLvT*4iu0*?qB@uJ>~@Q}nvQK!tNTsh*k)8sYM%VmD;AH0NH`=cEh+xCXYq4N<9Try__UGVnz%4^NP{fAr_C~Ru#?p zcF5gf(A|bMrXDenb0Ltk$Fwo+W}e(RgcLhh`g-@`*x$}{aP{wpjlH=>ckk8A8Yk-; zO|>&?kq?MIIWRBu*CG+(IS2j)lS0&|i1mATAZVg6vQF*m$0FE1~F zSAbWbSCH2#uk~JAymou-_d4M9rPp^}-+P_+`l-j{9&>uk>#?B6v)=v=Z>e{Lccgc; z_dDJnc<=Sz=lxMnbI*pJO+Cloh7txFA#q{dYYiY07d$slI=(W0czurT7XZOzS zo!9%z-rx29zW4dwKlzODndCFYXPVCpU)rf@E$m+)WWzs`S;zl(p6e~f>Ef0BQS z|1JMV{ssO;{;&MY{40Lmeo1~hzZSn~ehxp@Zwm=mnEwg?lm4gu&-$P9|H1#N|8@U=1YQDf zK`()ifF}?OB!Un@m>^sr6F9O3BLxct>jj$y?+LaEwhQ(N4hfD3jtagM92a~g_*(Fd z;Ag>Q!4<(Df}4U{f;)nH!XCn2La{JH7%7Yv#t7q3y&_GRF3c1T6b=?v2%)f3xL`;9kJ}fWJkU2p9Q^1fl>@peRHX zCJGnHM9HF5QI4oUR3uV~)FO?jQe+aDMOIOb$R?U8S|>Uzx-7aWx-GgZ`YVtO>>cPE z$Pe@n6b6a{9n!#vz`lX0f&BwB0tW|X1?B`Q0yTl9fz^Ry0viMEf#U*O0;dJe2!w$% z17`=$3G4_w73&m=&MywMX#Fb)` z*eq@mj}y-j&lS%XFBC5lFBZQdUM_xB{F-=`xZNS%Bfb#SBPb@QUr=gL|DcSZoS=fB zq99d}I!F_w3n~lJ2ibx~2Q>sW1+@f?51JS>IcQ$c!k|}z+JZWQRtK#OS|7AIXiL!6 zp!b7z1nmm?Cg>lDOp+@pl&Bsg;bBjFOC&G)S5xQzcL`Q!-mJU$RiLNU~V+ zn#9p2*(lj2*)G{B*)7>4IUxB=a#-@Y1)9j^Ne7YlGhm-Wa?ocysWF!5;;G8T@VVnc(k&zYjhid^z|^ z@E^g~f^P)>8R8d`5n>FP8ZtX%Zpi$Qg&{A5tPFYG5z-dY5wbdDZOE38?IAluc8BZ> z`6%R*kOLuKhkP4yG308<^^lt(w?giO0+jQkLYdGWp*=%mLRF#7p-V!Shpr5LJ+v)! zL+HDq?}cs)-5$C#ba&`yp+`f%3_TutD)igXGojywUJ1P#`XCGo!^5aBCagzTKv-Z{ zP*`x-D`Bg{9B+ng4BHg8Ic$5_&amBKd%`{pyDANn4wsflb<#4aURp10kxrM+moAhp zk}j4mkuI06mA)z6DBUD|Pr6OIUAj}cPkK=Lo%E*kL3l`bWO!b9MYuhDTKM$v8R0N| zQTX%WOT%9be>r?v_?qx_;Tyu=jL3`_8c`fk5}}PKjVO0SSR$$;Y9mHQjEWc?F(+bq z#NLQ+BF;x#h`1Q>Ys5_%kdZQ4){@UOO|EHiexI8TBecdWMwkF%qFXo)yu}n z8fA9bI9ZEqhHQbXQ+7ypL3Sq+MD~eHiyRV}9hn=M7dbR?c%(M6DzZMZHIj{-896KR znaJlN9g8DhjeI?_EwVFmP2{@B_ae7NZjam37--&%U_Dr02 zT>rSNxS?^zxca!UaV>EZ;wHzzxLI*?;^xOKjC&#OrMOq)*2is%dpB-t-1fM=ar@&w zi8~l~DDFhu*Kt?k?!|+6GMumF3=W~6&MPP1@?k*1uX>= z3MLm!D{vIdESOy|w_tujd%=4J2MSIXTq~3oCO8VS3sr@cg_gpa!jXkz3Y!YY6}A-4 zE!Hv+!2o-NO5Ye;4&G>QkgBsw-Mr z)LC@A=u*+`qI*RTl$erGQc96BQYlx)DHD`Q%4FqmWvQ}4X;PY%waPl>Xk~-4Q8`8F zP&#HRpHVJQE>b?PT&nC;zN6ft+@{>2+^yWBJghvbJf{3gc}n@M@}lyR@;Bul%InIT zDxe}&jLKWpTji??R)wh|R8guJRh%kcrBRit^r}i!c(kY*RZS|pYMg3@idD^4%~dT> zJ*(QJ+OFEA+N0X1x?kL**r%9ZEN~QyizUS&#bL$i#fIXM#r4Gv#rERn;@0AM#Y>7` zDPB?hT5(%(XYo75?-%bZ{-F57;seEpijNe3QGBfU`{FBVOx;5rpbk+>)iQOoIzgSJ zPFAO>)79B(rCO&hS68S_>RNT3x?bI&Zc?-A1?rd8%hfB@tJLl4PW3*uLS zCA&(#D7jJcx2C7YN5j_$G$M^ylcP~-N;Eo6xu!y6)L1o5n(>-RnyH!@nrAfgGz&C~ zG>bJmHODoVH8(Z4HTN8v``RAbK&?a@stwmhYUSEEZGv`?HcOkU&DRds7HXB+Vr_}G zN;_KnjCPs!J?(MrIqjc1T-Q_QqvPuYI+0GQlj)*#a$TIRk8Xs{u5;=(>vrls(0!=e zuRE;!O82$y8{KK$S=~9^Z@O!`8@gM%zjP0D|CEAKUa2FhG^2D_X+`OT(#fUMN*$#$ zOJ|pEE!|Ukp!87b=cQkko+v$8`eW(ur8i4&m)_pk6vK!^0<+5^Bd3kw7xvAV-KB0V8 z`MmOl<$=j(^-3-v0!NpI2D=tt`7^$q$a{WyJ#9_r`o zpVcqcFV(-Oe@)+}@6fN-uhVbPf2zM?;2V+*nTA0IN0uSSP+-s+N)6=(gQ3!3GK@CZ z4dV>0hRKGhh8YHESZr8oSZml|c+0TKu-UN1u-mZD@Uh{5;WNY6hHnjL4c{AnG+Z#; zs}NO0R>&*jDiSJ^Dv~P(S4^##SFy0-xr*m2Ln>1%ODd}>EtS=kw#uf;ah0u=6Dyyu zTv^%as9amQq4KTDEtT6Uw^#0}{GjsF%Fil~R35E7Q+c`a_sVOPH!E*f-m83I#Eia1 zKcmnXXp|U3jZ$NTG16FKtTNUa>y2ZKjYhk1l5whWx)B;@8J{seXIx@*8ecTF8&@0G z8aEieWYG~E)s=_K|m9DC>YC_fIs%cd-s$O(d zwO74SwXy1*sx4L9s`ggxull6wK-HnDBULA>zOTA$Mps15Vso%L%p75kGAEjo%*p07 zbGkXxTyAbPzii%Q-frGu-eo>$K5RZ}K4v~)K54#WzHPo|eqg~YgoU#BSo|#k7O^GR z5^G7aq*(e}GA-E_g(crI+)`k1Xe|~?on^G8(K6OD(K5v{&El}ImIaoVEz2z{EvqaY zmerPxmUk^%E!!=-EC(%LSdLpxTE4M-Z~4)3!SajclI5o5fz{i}w+gHxYmhbE8flHT z##-a8gRMiYTC2`lYAv^pvQD?YY~5^q&$`XJ!@Apg(t6JNv-Ntl&`}*;Evt^Mj;-!f zol~7xJ*>K*T3KCOt*^FL*H+h6kFIX4wpUN9c2u*~v#Xa>zfk>B^|IZYhU#z}V{aX!H<5lBb)4RsECa^|Q6Ivs!iLKGr=xb)yEUbB_W~(a; VgyHD#X1FhA9s0}M$G>XM{2%F}FqHrR delta 11661 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 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/Contents.json b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/Contents.json new file mode 100644 index 0000000..d84d585 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "pomememe.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/pomememe.jpg b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/pomememe.imageset/pomememe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46c6540eb04d612831096ca610af485c37ccf474 GIT binary patch literal 27485 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�W2=RbZsSi)nJ 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 A8vp - + @@ -48,7 +48,7 @@ - + @@ -63,6 +63,7 @@ + @@ -92,17 +93,31 @@ - + - + + + + + + + + - + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift index 32ab7ec..bf0407f 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift @@ -9,6 +9,11 @@ import Foundation import UIKit +struct CreatePost: Codable { + let title: String + let imageData: String? +} + struct Post: Codable { let id: Int? let title: String diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift new file mode 100644 index 0000000..728fb5a --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift @@ -0,0 +1,17 @@ +// +// UIImage+Base64.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 19/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +extension UIImage { + func base64() -> String { + let data = self.jpegData(compressionQuality: 90)! + let encoded = data.base64EncodedString(options: .lineLength64Characters) + return "data:image/jpg;base64,\(encoded)" + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift new file mode 100644 index 0000000..454c6f1 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift @@ -0,0 +1,24 @@ +// +// CameraViewController.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 19/10/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class CameraViewController: UIViewController { + + let client = RestClient(client: Client.fakestagram, basePath: "/api/v1/posts") + + @IBAction func onTapCreate(_ sender: UIButton) { + let img = UIImage(named: "pomememe")! + let newPost = CreatePost(title: "Karate Pome", imageData: img.base64()) + client.create(newPost) { post in + print("Successful!") + print(post?.title) + + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostViewController.swift similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/PostViewController.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostViewController.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/PostsViewController.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/AuthorView.swift similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/View/AuthorView.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Views/AuthorView.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PostCollectionViewCell.swift similarity index 96% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PostCollectionViewCell.swift index 2208d20..412c92f 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PostCollectionViewCell.swift @@ -45,6 +45,7 @@ class PostCollectionViewCell: UICollectionViewCell { guard let post = self.post else { return } self.authorView.author = post.author self.titleLabel.text = post.title + self.titleLabel.textColor = .black self.likeCounter.text = post.likesCountText() post.load { [unowned self] img in self.imageView.image = img diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PostCollectionViewCell.xib similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/View/PostCollectionViewCell.xib rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PostCollectionViewCell.xib diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShowPostViewController.swift similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShowPostViewController.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShowPostViewController.xib similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/View/ShowPostViewController.xib rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShowPostViewController.xib From 46d061cac0ce1e85468844307b390c333d9b2fcd Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Fri, 8 Nov 2019 17:17:39 -0600 Subject: [PATCH 11/18] Organized code and adding create or add account --- .DS_Store | Bin 8196 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 8196 -> 8196 bytes .../project.pbxproj | 16 ++++++-- .../UserInterfaceState.xcuserstate | Bin 29516 -> 25124 bytes .../Fakestagram-Xcode10/AppDelegate.swift | 13 ++++++ .../Fakestagram-Xcode10/Credentials.swift | 24 ----------- .../Fakestagram-Xcode10/Models/Account.swift | 4 +- .../Utils/Credentials.swift | 38 ++++++++++++++++++ .../{ => Utils}/UIDevice+models.swift | 8 ++++ .../{ => Utils}/UIImage+Base64.swift | 0 .../ViewControllers/PostsViewController.swift | 14 ++++++- 11 files changed, 86 insertions(+), 31 deletions(-) delete mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift rename Fakestagram-Xcode10/Fakestagram-Xcode10/{ => Utils}/UIDevice+models.swift (95%) rename Fakestagram-Xcode10/Fakestagram-Xcode10/{ => Utils}/UIImage+Base64.swift (100%) diff --git a/.DS_Store b/.DS_Store index 8b25df1e67aee8f64be99dbac2896abee45952f7..d51e472dc905b05d07b039ab96862fbc4e44e9a0 100644 GIT binary patch delta 55 zcmV-70LcG@K!iZBI_Ur)T57wFe!6937z)m!zEhBnAcsgfNeQ7Jos8VQ_MO zZUIn&fq|J}vZLT~rp!;1`-JQ!YY6eM+V2(ExNmZ|kmKYkB;J3fHulLq!haYyO#Ucp Kx_O_78#e$cH!A)B delta 124 zcmZp1XmQxkDZtF|_|oJa0W*#|v6c_cYY#dCIXXfqE=f80Nem1O2w@%pE&hTG!{Frn z+ybBk0|S%6WJkf}Oex{- R|6!ak`J<@m=6xb=+yJ;oEfW9$ diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 5f6f417..c5d03d0 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -126,13 +126,23 @@ 6C112496235B7C3200D8FAA4 /* ViewControllers */ = { isa = PBXGroup; children = ( - 6C5F5799234827B200488E96 /* PostViewController.swift */, 6C307326235A78350063C3C5 /* PostsViewController.swift */, + 6C5F5799234827B200488E96 /* PostViewController.swift */, 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */, ); path = ViewControllers; sourceTree = ""; }; + 6C112497235B7CE000D8FAA4 /* Utils */ = { + isa = PBXGroup; + children = ( + 6C5F57942348203100488E96 /* Credentials.swift */, + 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */, + 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */, + ); + path = Utils; + sourceTree = ""; + }; 6C1DC80A2351653E001E8065 /* Models */ = { isa = PBXGroup; children = ( @@ -214,14 +224,12 @@ 6C1DC80A2351653E001E8065 /* Models */, 6C1DC80F2351658F001E8065 /* Network */, 6C5F57962348206000488E96 /* DataSource */, + 6C112497235B7CE000D8FAA4 /* Utils */, 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */, 7701BEB4233F1B1B0004C30D /* Main.storyboard */, 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, - 6C5F57942348203100488E96 /* Credentials.swift */, - 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */, - 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */, ); path = "Fakestagram-Xcode10"; sourceTree = ""; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 4eac7da9d908b982489797f3658d8270cf1d0c7e..4ed969709840a27ca8f5d7b318e502ed232c0255 100644 GIT binary patch delta 12980 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 rphi{`QX{X4t Bool { // Override point for customization after application launch. + loadOrCreateAccount() + //print(UIDevice.modelName) + //print(UIDevice.identifier) return true } + func loadOrCreateAccount(){ + if Credentials.apiToken != nil { return } + let account = Account(id: nil, name: "Maximo Decimo", deviceNumber: UIDevice.identifier, deviceModel: UIDevice.modelName) + let client = RestClient(client: Client.fakestagram, basePath: "/api/v1/accounts") + client.create(account) { account in + guard let account = account, let idx = account.id else { return } + _ = Credentials.apiToken.set(value: idx) + } + } + func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift deleted file mode 100644 index 2c03ae5..0000000 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Credentials.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// Credentials.swift -// Fakestagram-Xcode10 -// -// Created by Pedro Carlos Monzalvo Navarro on 10/4/19. -// Copyright © 2019 unam. All rights reserved. -// - -import Foundation - -enum Credentials{ - case apiToken - - func get()-> String?{ - switch self { - case .apiToken: - return "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e" - } - } - - func set(value: String) ->Bool{ - return true; - } -} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift index 9fd98ea..90d2999 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Account.swift @@ -11,6 +11,6 @@ import Foundation struct Account: Codable { let id: String? let name: String - let deviceNumber: String - let deviceModel: String + let deviceNumber: String? + let deviceModel: String? } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift new file mode 100644 index 0000000..a3c98c4 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift @@ -0,0 +1,38 @@ +// +// Credentials.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 10/4/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +enum Credentials { + case apiToken + + func get() -> String? { + switch self { + case .apiToken: + return UserDefaults.standard.string(forKey: "apiToken") + //return "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e" + } + } + + func set(value: String) -> Bool { + switch self { + case .apiToken: + UserDefaults.standard.set(value, forKey: "apiToken") + } + return true + } + + func destroy() -> Bool { + switch self { + case .apiToken: + UserDefaults.standard.setNilValueForKey("apiToken") + } + return true + } +} + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIDevice+models.swift similarity index 95% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIDevice+models.swift index 66e5316..6750ba6 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/UIDevice+models.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIDevice+models.swift @@ -10,6 +10,14 @@ import UIKit public extension UIDevice { + static let identifier: String = { + if let vendorId = UIDevice.current.identifierForVendor{ + return "\(vendorId.hashValue):\(vendorId.uuidString)" + } else { + return ":\(UUID().uuidString)" + } + }() + static let modelName: String = { var systemInfo = utsname() uname(&systemInfo) diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift similarity index 100% rename from Fakestagram-Xcode10/Fakestagram-Xcode10/UIImage+Base64.swift rename to Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift index 198e6f8..5dc00de 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PostsViewController.swift @@ -15,6 +15,7 @@ class PostsViewController: UIViewController, UICollectionViewDelegate, UICollect } } let client = RestClient<[Post]>(client: Client.fakestagram, basePath: "/api/v1/posts") + let refreshControl = UIRefreshControl() @IBOutlet weak var postsCollection: UICollectionView! override func viewDidLoad() { @@ -23,13 +24,24 @@ class PostsViewController: UIViewController, UICollectionViewDelegate, UICollect postsCollection.dataSource = self let nib = UINib(nibName: String(describing: PostCollectionViewCell.self), bundle: nil) postsCollection.register(nib, forCellWithReuseIdentifier: PostCollectionViewCell.identifier) + + postsCollection.addSubview(refreshControl) + refreshControl.addTarget(self, action: #selector(self.reloadData), for: UIControl.Event.valueChanged) + client.show { [unowned self] data in self.posts = data } - // Do any additional setup after loading the view. } + @objc func reloadData(){ + client.show { [unowned self] data in + self.posts = data + //sleep(1) + self.refreshControl.endRefreshing() + } + } + /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation From a2029c85d95c488e1cf6373925d6c8ec134ae617 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 9 Nov 2019 11:17:39 -0600 Subject: [PATCH 12/18] added post service --- .DS_Store | Bin 8196 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 8196 -> 8196 bytes .../project.pbxproj | 12 +++++ .../UserInterfaceState.xcuserstate | Bin 25124 -> 29548 bytes .../Fakestagram-Xcode10/Models/Post.swift | 5 -- .../Services/CreatePostService.swift | 45 +++++++++++++++++ .../CameraViewController.swift | 46 ++++++++++++++++-- .../Fakestagram-Xcode10Tests/Info.plist | 2 + 8 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CreatePostService.swift diff --git a/.DS_Store b/.DS_Store index d51e472dc905b05d07b039ab96862fbc4e44e9a0..2d8955382bfcf5b5c212027fbde9a0fd1d87ce0b 100644 GIT binary patch delta 180 zcmZp1XmQw}DiF_Rwupg&frUYjA)O(Up(Hoo#U&{xKM5$tQQy7)hve>qj;Qh}c;yQ+ z41<&Na|?ia7#Mg07$!RiN^PDe;LgZ+a`H3525yP!YGY$l9R*`!gUJO#vWzn)_X)`} q&YJvCNNe&9AqQqww{|ewRk)LhbHnBf!e%U+*(JWQZ2lv{&I|y7Q#339 delta 179 zcmZp1XmQw}DiF`&agTw4frUYjA)O(Up(Hoo#U&{xKM5$tVYIbc$Yt$8M^yO~yz&JZ zhQZ1CxdlKy3=C`&7$!RiN^PDe;LgZ+V)8S=1}^dHYI9Q^1!Dut$%R6)j58+p3&}Ii poV-C$Yw}GY2WFPNQ^0ID;Z7!w2b(Vno3U(WllacE`JV_oGXQi$GI;<1 diff --git a/Fakestagram-Xcode10/.DS_Store b/Fakestagram-Xcode10/.DS_Store index 2788e27e3dae15c3d467e4eb42a49a8d3eec07fd..0bc99034df3974eaf46b6f03c22734ec97fdf2f3 100644 GIT binary patch delta 99 zcmZp1XmQxkCBRgoG`UB>jALp~^?R}12OWVN9ibGLq@4UD1_lO%Fpq%NW+Oo+Mz+^+ na&JX;Pwo+Nm|P{qgW&#SO7WZABm9SP!sL&lrknSPxN!pjAEqT% delta 99 zcmZp1XmQxkCBRg`Ke5XXC!L2OWVN9ibGLq@4UD1_lO%Fpq%NW+Oo+MmGDs n0vq?Oo!lejFu6*I2f_Wv)W$x!NB9rphRGjAO*iioapML6|1Bi~ diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index c5d03d0..a113108 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; 6CB97272235B6B5D0052BDB2 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */; }; + 6CD0F05C23771FD000D5874B /* CreatePostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD0F05B23771FD000D5874B /* CreatePostService.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB4233F1B1B0004C30D /* Main.storyboard */; }; 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7701BEB7233F1B1C0004C30D /* Assets.xcassets */; }; @@ -79,6 +80,7 @@ 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; + 6CD0F05B23771FD000D5874B /* CreatePostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatePostService.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7701BEB5233F1B1B0004C30D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -196,6 +198,14 @@ path = DataSource; sourceTree = ""; }; + 6CD0F05A23771FBB00D5874B /* Services */ = { + isa = PBXGroup; + children = ( + 6CD0F05B23771FD000D5874B /* CreatePostService.swift */, + ); + path = Services; + sourceTree = ""; + }; 7701BEA4233F1B1B0004C30D = { isa = PBXGroup; children = ( @@ -219,6 +229,7 @@ 7701BEAF233F1B1B0004C30D /* Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( + 6CD0F05A23771FBB00D5874B /* Services */, 6C112496235B7C3200D8FAA4 /* ViewControllers */, 6C1DC82723523B6C001E8065 /* Views */, 6C1DC80A2351653E001E8065 /* Models */, @@ -449,6 +460,7 @@ 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, 6C112495235B742900D8FAA4 /* UIImage+Base64.swift in Sources */, + 6CD0F05C23771FD000D5874B /* CreatePostService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 4ed969709840a27ca8f5d7b318e502ed232c0255..5689365b8ea838c7c14da87f5eb1242c23092b73 100644 GIT binary patch delta 14745 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 delta 11560 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: Client.fakestagram, basePath: "/api/v1/posts/") + private var currentLocation: CLLocationCoordinate2D? + + func call(image img: UIImage, title: String, success: @escaping (Int?) -> Void) { + let newPost = CreatePost( + id: nil, + title: title, + imageData: img.base64(), + latitude: currentLocation?.latitude, + longitude: currentLocation?.longitude + ) + client.create(newPost) { post in + success(post?.id) + } + } + + func update(coordinate: CLLocationCoordinate2D?) { + currentLocation = coordinate + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift index 454c6f1..34563f5 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift @@ -7,18 +7,54 @@ // import UIKit +import CoreLocation -class CameraViewController: UIViewController { +class CameraViewController: UIViewController, CLLocationManagerDelegate { - let client = RestClient(client: Client.fakestagram, basePath: "/api/v1/posts") + let locationManager = CLLocationManager() + let service = CreatePostService() + + override func viewDidLoad() { + super.viewDidLoad() + enableBasicLocationServices() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + locationManager.startUpdatingLocation() + } + + override func viewWillDisappear(_ animated: Bool) { + locationManager.stopUpdatingLocation() + super.viewWillDisappear(animated) + + } @IBAction func onTapCreate(_ sender: UIButton) { let img = UIImage(named: "pomememe")! - let newPost = CreatePost(title: "Karate Pome", imageData: img.base64()) - client.create(newPost) { post in + service.call(image: img, title: "Karate Pome") { (postId) in print("Successful!") - print(post?.title) + print(postId ?? -1) + } + } + func enableBasicLocationServices() { + locationManager.delegate = self + switch CLLocationManager.authorizationStatus() { + case .notDetermined: + locationManager.requestWhenInUseAuthorization() + case .restricted, .denied: + print("Disable location features") + case .authorizedWhenInUse, .authorizedAlways: + print("Enable location features") + @unknown default: + fatalError() } } + + func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { + guard let location = locations.last else { return } + print(location) + service.update(coordinate: location.coordinate) + } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist index 6c40a6c..13f76bb 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist @@ -2,6 +2,8 @@ + NSLocationWhenInUseUsageDescription + Geolocalize your moments CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable From a2b865547715f3bc299a90f1660111924ec72543 Mon Sep 17 00:00:00 2001 From: Carlos Monzalvo N Date: Sat, 9 Nov 2019 13:36:09 -0600 Subject: [PATCH 13/18] added memory cache & fixed the post load --- .../project.pbxproj | 16 ++++++ .../UserInterfaceState.xcuserstate | Bin 29548 -> 53178 bytes .../Fakestagram-Xcode10/AppDelegate.swift | 19 +++---- .../DataSource/CacheImage.swift | 24 ++++++++ .../DataSource/DataContainer.swift | 52 ++++++++++++++++++ .../DataSource/ImageStore.swift | 41 ++++++++++++++ .../DataSource/StorageType.swift | 47 ++++++++++++++++ .../Fakestagram-Xcode10/Info.plist | 2 + .../Fakestagram-Xcode10Tests/Info.plist | 2 - 9 files changed, 191 insertions(+), 12 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CacheImage.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/DataContainer.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StorageType.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index a113108..e8f9df5 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -31,6 +31,10 @@ 6C5656592358DBB800460C1E /* Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656582358DBB800460C1E /* Like.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; + 6C89EB1923772E6500CC903B /* CacheImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1823772E6500CC903B /* CacheImage.swift */; }; + 6C89EB1B23772E8200CC903B /* DataContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1A23772E8200CC903B /* DataContainer.swift */; }; + 6C89EB1D23772EB700CC903B /* ImageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1C23772EB700CC903B /* ImageStore.swift */; }; + 6C89EB1F23772EEC00CC903B /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1E23772EEC00CC903B /* StorageType.swift */; }; 6CB97272235B6B5D0052BDB2 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */; }; 6CD0F05C23771FD000D5874B /* CreatePostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD0F05B23771FD000D5874B /* CreatePostService.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; @@ -79,6 +83,10 @@ 6C5656582358DBB800460C1E /* Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Like.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; + 6C89EB1823772E6500CC903B /* CacheImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheImage.swift; sourceTree = ""; }; + 6C89EB1A23772E8200CC903B /* DataContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataContainer.swift; sourceTree = ""; }; + 6C89EB1C23772EB700CC903B /* ImageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageStore.swift; sourceTree = ""; }; + 6C89EB1E23772EEC00CC903B /* StorageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageType.swift; sourceTree = ""; }; 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; 6CD0F05B23771FD000D5874B /* CreatePostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatePostService.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -194,6 +202,10 @@ children = ( 6C1DC81A23516649001E8065 /* RestClient.swift */, 6C1DC81C2351666C001E8065 /* CodableSerializer.swift */, + 6C89EB1823772E6500CC903B /* CacheImage.swift */, + 6C89EB1A23772E8200CC903B /* DataContainer.swift */, + 6C89EB1C23772EB700CC903B /* ImageStore.swift */, + 6C89EB1E23772EEC00CC903B /* StorageType.swift */, ); path = DataSource; sourceTree = ""; @@ -447,14 +459,18 @@ 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */, 6C5656592358DBB800460C1E /* Like.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, + 6C89EB1923772E6500CC903B /* CacheImage.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, + 6C89EB1B23772E8200CC903B /* DataContainer.swift in Sources */, 6C1DC80C23516554001E8065 /* Account.swift in Sources */, 6C5656552358DB9D00460C1E /* Author.swift in Sources */, 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */, 6C307327235A78350063C3C5 /* PostsViewController.swift in Sources */, 6C5656572358DBAB00460C1E /* Comment.swift in Sources */, + 6C89EB1F23772EEC00CC903B /* StorageType.swift in Sources */, 6C30732A235A83A40063C3C5 /* PostCollectionViewCell.swift in Sources */, + 6C89EB1D23772EB700CC903B /* ImageStore.swift in Sources */, 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */, 6C1DC811235165A8001E8065 /* Client.swift in Sources */, 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 5689365b8ea838c7c14da87f5eb1242c23092b73..9ab8977d787abad623bf978f2c23bc5da30205ba 100644 GIT binary patch literal 53178 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 delta 13486 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 OPv24_Y57-r<^KTbn^$E3 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/AppDelegate.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/AppDelegate.swift index fdb6461..d75af7e 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/AppDelegate.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/AppDelegate.swift @@ -22,16 +22,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } - func loadOrCreateAccount(){ - if Credentials.apiToken != nil { return } - let account = Account(id: nil, name: "Maximo Decimo", deviceNumber: UIDevice.identifier, deviceModel: UIDevice.modelName) - let client = RestClient(client: Client.fakestagram, basePath: "/api/v1/accounts") - client.create(account) { account in - guard let account = account, let idx = account.id else { return } - _ = Credentials.apiToken.set(value: idx) - } - } - func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. @@ -54,6 +44,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } + func loadOrCreateAccount(){ + if Credentials.apiToken.get() != nil { return } + let account = Account(id: nil, name: "Maximo Decimo", deviceNumber: UIDevice.identifier, deviceModel: UIDevice.modelName) + let client = RestClient(client: Client.fakestagram, basePath: "/api/v1/accounts") + client.create(account) { account in + guard let account = account, let idx = account.id else { return } + _ = Credentials.apiToken.set(value: idx) + } + } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CacheImage.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CacheImage.swift new file mode 100644 index 0000000..930b4ea --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/CacheImage.swift @@ -0,0 +1,24 @@ +// +// CacheImage.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 09/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation +import UIKit + +class CacheImage { + static let shared = CacheImage() + private var memCache = NSCache() + + func read(key: String) -> UIImage? { + return memCache.object(forKey: key as NSString) + } + + func write(key: String, value: UIImage?) { + guard let value = value else { return } + memCache.setObject(value, forKey: key as NSString) + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/DataContainer.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/DataContainer.swift new file mode 100644 index 0000000..8a2d54e --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/DataContainer.swift @@ -0,0 +1,52 @@ +// +// DataContainer.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 09/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +// Usage +// DataContainer.cache.write("file.json",data: parsedData) +// DataContainer.cache.read("file.png") +// DataContainer.permanent.write("file.json",data: parsedData) +// DataContainer.permanent.read("file.png") +enum DataContainer { + case cache + case permanent + + var baseUrl: URL { + switch self { + case .cache: + StorageType.cache.ensureExists() + return StorageType.cache.url + case .permanent: + StorageType.permanent.ensureExists() + return StorageType.permanent.url + } + } + + func read(_ filename: String) -> Data? { + let url = urlFor(filename: filename) + return try? Data(contentsOf: url) + } + + func write(_ filename: String, data: Data) -> Bool { + do { + try data.write(to: urlFor(filename: filename)) + return true + } catch let err { + debugPrint("Error: \(err.localizedDescription)") + return false + } + } + + func urlFor(filename: String) -> URL { + var url = baseUrl + url.appendPathComponent(filename) + return url + } + +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift new file mode 100644 index 0000000..0d0c61e --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift @@ -0,0 +1,41 @@ +// +// ImageStore.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 09/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation +import UIKit + +// Usage +// ImagaStore.permanent.write("filename.jpg", image: img) +// ImagaStore.cache.read("filename.jpg") +enum ImageStore { + case cache + case permanent + + var container: DataContainer { + switch self { + case .cache: + return DataContainer.cache + case .permanent: + return DataContainer.permanent + } + } + + func read(_ filename: String) -> UIImage? { + if let img = CacheImage.shared.read(key: filename) { + return img + } + guard let data = container.read(filename) else { return nil } + return UIImage(data: data) + } + + func write(_ filename: String, image: UIImage) -> Bool { + CacheImage.shared.write(key: filename, value: image) + guard let data = image.jpegData(compressionQuality: 0.9) else { return false } + return container.write(filename, data: data) + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StorageType.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StorageType.swift new file mode 100644 index 0000000..8237942 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/StorageType.swift @@ -0,0 +1,47 @@ +// +// StorageType.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 09/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +enum StorageType { + case cache + case permanent + + var searchPathDirectory: FileManager.SearchPathDirectory { + switch self { + case .cache: + return .cachesDirectory + case .permanent: + return .documentDirectory + } + } + + var url: URL { + var url = FileManager.default.urls(for: searchPathDirectory, in: .userDomainMask).first! + let applicationPath = "mx.unam.ioslab.fakestagram.storage" + url.appendPathComponent(applicationPath) + return url + } + + var path: String { + return url.path + } + + func clear() { + try? FileManager.default.removeItem(at: url) + } + + func ensureExists() { + var isDir: ObjCBool = false + if FileManager.default.fileExists(atPath: path, isDirectory: &isDir) { + if isDir.boolValue { return } + try? FileManager.default.removeItem(at: url) + } + try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: false, attributes: nil) + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist index 16be3b6..a527ff3 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist @@ -2,6 +2,8 @@ + NSLocationWhenInUseUsageDescription + Geolocalize your moments CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist index 13f76bb..6c40a6c 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10Tests/Info.plist @@ -2,8 +2,6 @@ - NSLocationWhenInUseUsageDescription - Geolocalize your moments CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable From 4c7079bba575242379bd4f36d43f8cf0881400a4 Mon Sep 17 00:00:00 2001 From: Pedro Carlos Monzalvo Navarro Date: Sat, 23 Nov 2019 13:21:00 -0600 Subject: [PATCH 14/18] added photos with iphone's camera and added keychain --- .../project.pbxproj | 46 +- .../xcschemes/xcschememanagement.plist | 2 +- .../UserInterfaceState.xcuserstate | Bin 53178 -> 73035 bytes .../Base.lproj/Main.storyboard | 29 +- .../Fakestagram-Xcode10/CheckSum.h | 18 + .../Fakestagram-Xcode10/CheckSum.m | 31 + .../DataSource/DataContainer.swift | 17 +- .../DataSource/ImageStore.swift | 21 +- .../Fakestagram-Xcode10-Bridging-Header.h | 5 + .../Fakestagram-Xcode10/Info.plist | 2 + .../Fakestagram-Xcode10/Models/Post.swift | 15 +- .../Fakestagram-Xcode10/Network/Client.swift | 28 +- .../Services/IndexService.swift | 17 + .../Utils/Credentials.swift | 14 +- .../Utils/NotificationKeys.swift | 20 + .../Utils/UIImage+Base64.swift | 12 +- .../CameraViewController.swift | 110 +++- .../Views/PreviewView.swift | 30 + Fakestagram-Xcode10/Podfile | 1 + Fakestagram-Xcode10/Podfile.lock | 8 +- Fakestagram-Xcode10/Pods/Manifest.lock | 8 +- .../Pods/Pods.xcodeproj/project.pbxproj | 606 ++++++++++++------ .../xcschemes/SAMKeychain.xcscheme | 60 ++ .../xcschemes/xcschememanagement.plist | 7 + Fakestagram-Xcode10/Pods/SAMKeychain/LICENSE | 20 + .../Pods/SAMKeychain/Readme.markdown | 87 +++ .../Pods/SAMKeychain/Sources/SAMKeychain.h | 203 ++++++ .../Pods/SAMKeychain/Sources/SAMKeychain.m | 130 ++++ .../SAMKeychain/Sources/SAMKeychainQuery.h | 147 +++++ .../SAMKeychain/Sources/SAMKeychainQuery.m | 316 +++++++++ .../en.lproj/SAMKeychain.strings | Bin 0 -> 1580 bytes ...estagram-Xcode10-acknowledgements.markdown | 24 + ...Fakestagram-Xcode10-acknowledgements.plist | 30 + ...10-frameworks-Debug-input-files.xcfilelist | 2 + ...0-frameworks-Debug-output-files.xcfilelist | 1 + ...-frameworks-Release-input-files.xcfilelist | 2 + ...frameworks-Release-output-files.xcfilelist | 1 + .../Pods-Fakestagram-Xcode10-frameworks.sh | 171 +++++ .../Pods-Fakestagram-Xcode10.debug.xcconfig | 4 + .../Pods-Fakestagram-Xcode10.release.xcconfig | 4 + ...ds-Fakestagram-Xcode10Tests.debug.xcconfig | 6 +- ...-Fakestagram-Xcode10Tests.release.xcconfig | 6 +- .../SAMKeychain/SAMKeychain-Info.plist | 26 + .../SAMKeychain/SAMKeychain-dummy.m | 5 + .../SAMKeychain/SAMKeychain-prefix.pch | 12 + .../SAMKeychain/SAMKeychain-umbrella.h | 18 + .../SAMKeychain/SAMKeychain.modulemap | 6 + .../SAMKeychain/SAMKeychain.xcconfig | 10 + 48 files changed, 2068 insertions(+), 270 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.h create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.m create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Services/IndexService.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/NotificationKeys.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PreviewView.swift create mode 100644 Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/SAMKeychain.xcscheme create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/LICENSE create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Readme.markdown create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.h create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.m create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.h create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.m create mode 100644 Fakestagram-Xcode10/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-input-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-output-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-input-files.xcfilelist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-output-files.xcfilelist create mode 100755 Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap create mode 100644 Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index e8f9df5..34ddcbb 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -8,6 +8,10 @@ /* Begin PBXBuildFile section */ 6C112495235B742900D8FAA4 /* UIImage+Base64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */; }; + 6C1151B123899CF40047F423 /* IndexService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1151B023899CF40047F423 /* IndexService.swift */; }; + 6C1151B323899F090047F423 /* PreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1151B223899F090047F423 /* PreviewView.swift */; }; + 6C1151B52389A2530047F423 /* NotificationKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1151B42389A2530047F423 /* NotificationKeys.swift */; }; + 6C1151B82389A2940047F423 /* CheckSum.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C1151B72389A2940047F423 /* CheckSum.m */; }; 6C1DC80C23516554001E8065 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80B23516554001E8065 /* Account.swift */; }; 6C1DC80E2351656A001E8065 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC80D2351656A001E8065 /* Post.swift */; }; 6C1DC811235165A8001E8065 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1DC810235165A8001E8065 /* Client.swift */; }; @@ -60,6 +64,12 @@ 46A679CEAFBC334DF6FC73B9 /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Fakestagram-Xcode10.debug.xcconfig"; path = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; 6487BC4A6C894AC3FCB0A8B6 /* Pods_Fakestagram_Xcode10.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Fakestagram_Xcode10.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Base64.swift"; sourceTree = ""; }; + 6C1151B023899CF40047F423 /* IndexService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndexService.swift; sourceTree = ""; }; + 6C1151B223899F090047F423 /* PreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewView.swift; sourceTree = ""; }; + 6C1151B42389A2530047F423 /* NotificationKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationKeys.swift; sourceTree = ""; }; + 6C1151B62389A2930047F423 /* Fakestagram-Xcode10-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fakestagram-Xcode10-Bridging-Header.h"; sourceTree = ""; }; + 6C1151B72389A2940047F423 /* CheckSum.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheckSum.m; sourceTree = ""; }; + 6C1151B92389A2BD0047F423 /* CheckSum.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheckSum.h; sourceTree = ""; }; 6C1DC80B23516554001E8065 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; 6C1DC80D2351656A001E8065 /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; 6C1DC810235165A8001E8065 /* Client.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Client.swift; sourceTree = ""; }; @@ -149,6 +159,7 @@ 6C5F57942348203100488E96 /* Credentials.swift */, 6C30732C235AA3730063C3C5 /* UIDevice+models.swift */, 6C112494235B742900D8FAA4 /* UIImage+Base64.swift */, + 6C1151B42389A2530047F423 /* NotificationKeys.swift */, ); path = Utils; sourceTree = ""; @@ -188,6 +199,7 @@ 6C1DC82723523B6C001E8065 /* Views */ = { isa = PBXGroup; children = ( + 6C1151B223899F090047F423 /* PreviewView.swift */, 6C307328235A83A40063C3C5 /* PostCollectionViewCell.swift */, 6C307329235A83A40063C3C5 /* PostCollectionViewCell.xib */, 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */, @@ -203,8 +215,8 @@ 6C1DC81A23516649001E8065 /* RestClient.swift */, 6C1DC81C2351666C001E8065 /* CodableSerializer.swift */, 6C89EB1823772E6500CC903B /* CacheImage.swift */, - 6C89EB1A23772E8200CC903B /* DataContainer.swift */, 6C89EB1C23772EB700CC903B /* ImageStore.swift */, + 6C89EB1A23772E8200CC903B /* DataContainer.swift */, 6C89EB1E23772EEC00CC903B /* StorageType.swift */, ); path = DataSource; @@ -214,6 +226,7 @@ isa = PBXGroup; children = ( 6CD0F05B23771FD000D5874B /* CreatePostService.swift */, + 6C1151B023899CF40047F423 /* IndexService.swift */, ); path = Services; sourceTree = ""; @@ -253,6 +266,9 @@ 7701BEB7233F1B1C0004C30D /* Assets.xcassets */, 7701BEB9233F1B1C0004C30D /* LaunchScreen.storyboard */, 7701BEBC233F1B1C0004C30D /* Info.plist */, + 6C1151B72389A2940047F423 /* CheckSum.m */, + 6C1151B92389A2BD0047F423 /* CheckSum.h */, + 6C1151B62389A2930047F423 /* Fakestagram-Xcode10-Bridging-Header.h */, ); path = "Fakestagram-Xcode10"; sourceTree = ""; @@ -290,6 +306,7 @@ 7701BEA9233F1B1B0004C30D /* Sources */, 7701BEAA233F1B1B0004C30D /* Frameworks */, 7701BEAB233F1B1B0004C30D /* Resources */, + 108B478EEA9893F17439FA36 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -332,6 +349,7 @@ TargetAttributes = { 7701BEAC233F1B1B0004C30D = { CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; }; 7701BEC0233F1B1C0004C30D = { CreatedOnToolsVersion = 10.3; @@ -383,6 +401,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 108B478EEA9893F17439FA36 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 33D4F6B0D251E8BDBF9F6AD1 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -457,15 +492,19 @@ 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */, + 6C1151B123899CF40047F423 /* IndexService.swift in Sources */, 6C5656592358DBB800460C1E /* Like.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, + 6C1151B323899F090047F423 /* PreviewView.swift in Sources */, 6C89EB1923772E6500CC903B /* CacheImage.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, 6C89EB1B23772E8200CC903B /* DataContainer.swift in Sources */, 6C1DC80C23516554001E8065 /* Account.swift in Sources */, 6C5656552358DB9D00460C1E /* Author.swift in Sources */, + 6C1151B52389A2530047F423 /* NotificationKeys.swift in Sources */, 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */, + 6C1151B82389A2940047F423 /* CheckSum.m in Sources */, 6C307327235A78350063C3C5 /* PostsViewController.swift in Sources */, 6C5656572358DBAB00460C1E /* Comment.swift in Sources */, 6C89EB1F23772EEC00CC903B /* StorageType.swift in Sources */, @@ -640,6 +679,7 @@ baseConfigurationReference = 46A679CEAFBC334DF6FC73B9 /* Pods-Fakestagram-Xcode10.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 6FC73M3GHS; INFOPLIST_FILE = "Fakestagram-Xcode10/Info.plist"; @@ -649,6 +689,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.Fakestagram-Xcode10"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -659,6 +701,7 @@ baseConfigurationReference = D65BF6830E7358A7FE742F2E /* Pods-Fakestagram-Xcode10.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 6FC73M3GHS; INFOPLIST_FILE = "Fakestagram-Xcode10/Info.plist"; @@ -668,6 +711,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "com.Fakestagram-Xcode10"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist index 08505b2..0c7a624 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Fakestagram-Xcode10.xcscheme_^#shared#^_ orderHint - 3 + 4 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 9ab8977d787abad623bf978f2c23bc5da30205ba..97a6edec8965dd1451d07aaf1432d2c54ded8df8 100644 GIT binary patch literal 73035 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 - - - - + + - + @@ -19,7 +17,7 @@ - + @@ -102,26 +100,39 @@ + + + + - + + + + + + + + + + - + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.h b/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.h new file mode 100644 index 0000000..da20457 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.h @@ -0,0 +1,18 @@ +// +// CheckSum.h +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 23/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +#ifndef CheckSum_h +#define CheckSum_h +#import +#import + +@interface CheckSum : NSObject ++(NSString *) sha256String: (NSString *)input; +@end + +#endif /* Checksum_h */ diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.m b/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.m new file mode 100644 index 0000000..27f0c42 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/CheckSum.m @@ -0,0 +1,31 @@ +// +// CheckSum.m +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 23/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +#import "CheckSum.h" + +@implementation CheckSum +- (instancetype)init { + if (self = [super init]) { + } + return self; +} + ++(NSString *) sha256String: (NSString *)input{ + const char* str = [input UTF8String]; + unsigned char result[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(str, strlen(str), result); + + NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; + for(int i = 0; i Data? { - let url = urlFor(filename: filename) - return try? Data(contentsOf: url) + return try? Data(contentsOf: urlFor(filename: filename)) } - + func write(_ filename: String, data: Data) -> Bool { do { try data.write(to: urlFor(filename: filename)) @@ -42,11 +40,12 @@ enum DataContainer { return false } } - + func urlFor(filename: String) -> URL { var url = baseUrl url.appendPathComponent(filename) return url } - + } + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift index 0d0c61e..3b57a0e 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/DataSource/ImageStore.swift @@ -12,10 +12,11 @@ import UIKit // Usage // ImagaStore.permanent.write("filename.jpg", image: img) // ImagaStore.cache.read("filename.jpg") + enum ImageStore { case cache case permanent - + var container: DataContainer { switch self { case .cache: @@ -24,18 +25,28 @@ enum ImageStore { return DataContainer.permanent } } - + func read(_ filename: String) -> UIImage? { if let img = CacheImage.shared.read(key: filename) { + print(" - Reading from memory") return img } + print(" - Reading from disk") guard let data = container.read(filename) else { return nil } - return UIImage(data: data) + let image = UIImage(data: data) + + print(" * Writting into memory") + CacheImage.shared.write(key: filename, value: image) + return image } - + func write(_ filename: String, image: UIImage) -> Bool { - CacheImage.shared.write(key: filename, value: image) guard let data = image.jpegData(compressionQuality: 0.9) else { return false } + + print(" - Writting into memory") + CacheImage.shared.write(key: filename, value: image) + + print(" - Writting into disk") return container.write(filename, data: data) } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h b/Fakestagram-Xcode10/Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h new file mode 100644 index 0000000..f31fb29 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Fakestagram-Xcode10-Bridging-Header.h @@ -0,0 +1,5 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import "CheckSum.m" diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist b/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist index a527ff3..fd6c7d0 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Info.plist @@ -2,6 +2,8 @@ + NSCameraUsageDescription + To capture your favorite moments and share with the world NSLocationWhenInUseUsageDescription Geolocalize your moments CFBundleDevelopmentRegion diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift index 32ab7ec..449a8ad 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Models/Post.swift @@ -19,21 +19,30 @@ struct Post: Codable { var liked: Bool let location: String let author: Author? - + func likesCountText() -> String { return "\(likesCount) likes" } - + func commentsCountText() -> String { return "\(commentsCount) comments" } - + func load(_ image: @escaping (UIImage) -> Void) { guard let urlString = imageUrl, let url = URL(string: urlString) else { return } + let filename = CheckSum.sha256String(urlString)! + if let img = ImageStore.cache.read(filename) { + print("Reading cache") + image(img) + return + } DispatchQueue.global(qos: .background).async { if let data = try? Data(contentsOf: url), let img = UIImage(data: data) { + print("Loading from the internet") + _ = ImageStore.cache.write(filename, image: img) DispatchQueue.main.async { image(img) } } } } } + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift index c801c8d..84c0994 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Network/Client.swift @@ -12,49 +12,57 @@ class Client { static let fakestagram = Client(session: URLSession.shared, baseUrl: "https://fakestagram-api.herokuapp.com") let session: URLSession let baseUrl: String - + init(session: URLSession, baseUrl: String) { self.session = session self.baseUrl = baseUrl } - + typealias successfulResponse = (Data?) -> Void - + func get(path: String, success: @escaping successfulResponse) { request(method: "get", path: path, body: nil, success: success) } - + func post(path: String, body: Data?, success: @escaping successfulResponse) { request(method: "post", path: path, body: body, success: success) } - + func put(path: String, body: Data?, success: @escaping successfulResponse) { request(method: "put", path: path, body: body, success: success) } - + func delete(path: String, success: @escaping successfulResponse) { request(method: "delete", path: path, body: nil, success: success) } - + private func request(method: String, path: String, body: Data?, success: @escaping successfulResponse) { guard let req = buildRequest(method: method, path: path, body: body) else { debugPrint("Invalid request") return } - + session.dataTask(with: req) { (data, response, error) in if let error = error { debugPrint(error) return } - + let response = HttpResponse(response: response) if response.isSuccessful() { success(data) + } else { + #if DEBUG + debugPrint(response.status) + if let data = data { + let error = String(data: data, encoding: .utf8) + debugPrint(error) + } + #endif } }.resume() } - + private func buildRequest(method: String, path: String, body: Data?) -> URLRequest? { var builder = RequestBuilder(baseUrl: self.baseUrl) builder.method = method diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/IndexService.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/IndexService.swift new file mode 100644 index 0000000..01d9ca7 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/IndexService.swift @@ -0,0 +1,17 @@ +// +// IndexService.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 23/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +class IndexService { + let client = RestClient<[Post]>(client: Client.fakestagram, basePath: "/api/v1/posts") + + func call(success: @escaping ([Post]?) -> Void) { + client.show(success: success) + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift index a3c98c4..36e6e90 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/Credentials.swift @@ -7,30 +7,30 @@ // import Foundation +import SAMKeychain enum Credentials { case apiToken - + func get() -> String? { switch self { case .apiToken: - return UserDefaults.standard.string(forKey: "apiToken") - //return "f41af9b1-5a7e-4f0b-8c88-e44f686b1d2e" + return SAMKeychain.password(forService: "mx.unam.fakestagram", account: "apiToken") } } - + func set(value: String) -> Bool { switch self { case .apiToken: - UserDefaults.standard.set(value, forKey: "apiToken") + SAMKeychain.setPassword(value, forService: "mx.unam.fakestagram", account: "apiToken") } return true } - + func destroy() -> Bool { switch self { case .apiToken: - UserDefaults.standard.setNilValueForKey("apiToken") + SAMKeychain.deletePassword(forService: "mx.unam.fakestagram", account: "apiToken") } return true } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/NotificationKeys.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/NotificationKeys.swift new file mode 100644 index 0000000..64cf320 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/NotificationKeys.swift @@ -0,0 +1,20 @@ +// +// NotificationKeys.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 23/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import Foundation + +enum NotificationKeys { + case didFinishPostCreation + + var value: Notification.Name { + switch self { + case .didFinishPostCreation: + return Notification.Name(rawValue: "didFinishPostCreationNotification") + } + } +} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift index 728fb5a..5d7a895 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Utils/UIImage+Base64.swift @@ -8,10 +8,16 @@ import UIKit +extension Data { + func imageBase64(ext: String = "tiff") -> String { + let encoded = self.base64EncodedString(options: .lineLength64Characters) + return "data:image/\(ext);base64,\(encoded)" + } +} + extension UIImage { func base64() -> String { - let data = self.jpegData(compressionQuality: 90)! - let encoded = data.base64EncodedString(options: .lineLength64Characters) - return "data:image/jpg;base64,\(encoded)" + let data = self.jpegData(compressionQuality: 0.85)! + return data.imageBase64(ext: "jpg") } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift index 34563f5..d00e044 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift @@ -8,36 +8,52 @@ import UIKit import CoreLocation +import AVFoundation -class CameraViewController: UIViewController, CLLocationManagerDelegate { - - let locationManager = CLLocationManager() - let service = CreatePostService() - +class CameraViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() enableBasicLocationServices() + enableCameraAccess() } - + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) locationManager.startUpdatingLocation() } - + override func viewWillDisappear(_ animated: Bool) { locationManager.stopUpdatingLocation() super.viewWillDisappear(animated) - } - - @IBAction func onTapCreate(_ sender: UIButton) { - let img = UIImage(named: "pomememe")! - service.call(image: img, title: "Karate Pome") { (postId) in - print("Successful!") - print(postId ?? -1) + + let service = CreatePostService() + @IBAction func onTapCreate(_ sender: Any) { + print("📸") + let settings: AVCapturePhotoSettings + print(self.photoOutput.availablePhotoCodecTypes) + if self.photoOutput.availablePhotoCodecTypes.contains(.hevc) { + settings = AVCapturePhotoSettings(format: + [AVVideoCodecKey: AVVideoCodecType.hevc]) + } else { + settings = AVCapturePhotoSettings() } + settings.flashMode = .auto + photoOutput.capturePhoto(with: settings, delegate: self) } - + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + + // MARK: - CoreLocation methods + let locationManager = CLLocationManager() func enableBasicLocationServices() { locationManager.delegate = self switch CLLocationManager.authorizationStatus() { @@ -51,10 +67,72 @@ class CameraViewController: UIViewController, CLLocationManagerDelegate { fatalError() } } + + // MARK: - AVFoundation methods + + @IBOutlet weak var previewView: PreviewView! + + func enableCameraAccess() { + switch AVCaptureDevice.authorizationStatus(for: .video) { + case .authorized: + // The user has previously granted access to the camera. + self.setupCaptureSession() + case .notDetermined: + // The user has not yet been asked for camera access. + AVCaptureDevice.requestAccess(for: .video) { granted in + if granted { + self.setupCaptureSession() + } + } + case .denied: + // The user has previously denied access. + return + case .restricted: + // The user can't grant access due to restrictions. + print("The user can't grant access due to restrictions.") + @unknown default: + fatalError() + } + } + + let session = AVCaptureSession() + let photoOutput = AVCapturePhotoOutput() + + func setupCaptureSession() { + session.beginConfiguration() + let device = AVCaptureDevice.default(.builtInWideAngleCamera, + for: .video, position: .back)! + guard let videoDeviceInput = try? AVCaptureDeviceInput(device: device), + session.canAddInput(videoDeviceInput) else { return } + session.addInput(videoDeviceInput) + + guard session.canAddOutput(photoOutput) else { return } + session.sessionPreset = .photo + session.addOutput(photoOutput) + + session.commitConfiguration() + previewView.session = session + + session.startRunning() + } + +} + +extension CameraViewController: AVCapturePhotoCaptureDelegate { + func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { + debugPrint(photo.metadata) + + guard let data = photo.fileDataRepresentation(), let img = UIImage(data: data) else { return } + service.call(image: img, title: UUID().uuidString) { postId in + print("Successful!") + print(postId ?? -1) + } + } +} +extension CameraViewController: CLLocationManagerDelegate { func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } - print(location) service.update(coordinate: location.coordinate) } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PreviewView.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PreviewView.swift new file mode 100644 index 0000000..703ab04 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/PreviewView.swift @@ -0,0 +1,30 @@ +// +// PreviewView.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 23/11/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit +import AVFoundation + +class PreviewView: UIView { + override class var layerClass: AnyClass { + return AVCaptureVideoPreviewLayer.self + } + + var session: AVCaptureSession? { + get { + return videoPreviewLayer.session + } + set { + videoPreviewLayer.session = newValue + } + } + + /// Convenience wrapper to get layer as its statically known type. + var videoPreviewLayer: AVCaptureVideoPreviewLayer { + return layer as! AVCaptureVideoPreviewLayer + } +} diff --git a/Fakestagram-Xcode10/Podfile b/Fakestagram-Xcode10/Podfile index 5b949c8..6836e86 100644 --- a/Fakestagram-Xcode10/Podfile +++ b/Fakestagram-Xcode10/Podfile @@ -6,6 +6,7 @@ target 'Fakestagram-Xcode10' do use_frameworks! # Pods for Fakestagram-Xcode10 + pod 'SAMKeychain' target 'Fakestagram-Xcode10Tests' do inherit! :search_paths diff --git a/Fakestagram-Xcode10/Podfile.lock b/Fakestagram-Xcode10/Podfile.lock index 0efd60f..3a2f2b2 100644 --- a/Fakestagram-Xcode10/Podfile.lock +++ b/Fakestagram-Xcode10/Podfile.lock @@ -1,16 +1,20 @@ PODS: - DVR (2.0.0) + - SAMKeychain (1.5.3) DEPENDENCIES: - DVR + - SAMKeychain SPEC REPOS: trunk: - DVR + - SAMKeychain SPEC CHECKSUMS: DVR: 062c287b9dc613a84120e44640176e4ef3ecf943 + SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c -PODFILE CHECKSUM: 5075cefd4e51f711421154e70927ac376184d3a8 +PODFILE CHECKSUM: 39ebf455a67bdec16d2dd23f9a19256fbb449689 -COCOAPODS: 1.8.3 +COCOAPODS: 1.8.4 diff --git a/Fakestagram-Xcode10/Pods/Manifest.lock b/Fakestagram-Xcode10/Pods/Manifest.lock index 0efd60f..3a2f2b2 100644 --- a/Fakestagram-Xcode10/Pods/Manifest.lock +++ b/Fakestagram-Xcode10/Pods/Manifest.lock @@ -1,16 +1,20 @@ PODS: - DVR (2.0.0) + - SAMKeychain (1.5.3) DEPENDENCIES: - DVR + - SAMKeychain SPEC REPOS: trunk: - DVR + - SAMKeychain SPEC CHECKSUMS: DVR: 062c287b9dc613a84120e44640176e4ef3ecf943 + SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c -PODFILE CHECKSUM: 5075cefd4e51f711421154e70927ac376184d3a8 +PODFILE CHECKSUM: 39ebf455a67bdec16d2dd23f9a19256fbb449689 -COCOAPODS: 1.8.3 +COCOAPODS: 1.8.4 diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj index 5d02da4..1e5e0ca 100644 --- a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/project.pbxproj @@ -7,24 +7,33 @@ objects = { /* Begin PBXBuildFile section */ - 02A29FF79F344740883667E0806F5A66 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - 0B1310A516B2ED5CAE7A4C3793D6DA1C /* Pods-Fakestagram-Xcode10Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */; }; - 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */; }; - 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */; }; - 308338788F9B3B77D4E38C12C47E10AC /* Pods-Fakestagram-Xcode10Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */; }; - 4F1DADB02773B24E58D1777329F68A7E /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */; }; - 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */; }; - 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */; }; - A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */; }; - ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */; }; - C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */; }; - D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */; }; - FBCAF059EFD6C703D776FBB362E17481 /* Pods-Fakestagram-Xcode10-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */; }; + 06807C205FE8C18B68229A21B79F2C0A /* SAMKeychainQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0B1310A516B2ED5CAE7A4C3793D6DA1C /* Pods-Fakestagram-Xcode10Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B189510E689CA0C7A3FF8B515544ED1 /* Pods-Fakestagram-Xcode10Tests-dummy.m */; }; + 0E740145DC8569F11C3D23161F42A3F3 /* SAMKeychainQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 180B0BC996F28420A22940BB965F2687 /* SAMKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */; }; + 1F76FE48BAE3021631A8C0EC47758EA0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */; }; + 2550EA80C45F86FEFB6B484590C3127B /* SAMKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */; }; + 308338788F9B3B77D4E38C12C47E10AC /* Pods-Fakestagram-Xcode10Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C90B88C9EFA69E18047CDB0E45105900 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */; }; + 48749968F49ABC19B218B6A650DA2EFA /* SAMKeychain.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */; }; + 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */; }; + 71EA169002FBB20CD1A9D4B393A050E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */; }; + 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */; }; + A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + A44705A450B7BC75180A9FC266CCFB3D /* SAMKeychain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */; }; + A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */; }; + ACD09716CA671314C4697B49D295D786 /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D642418547F1E25AB97E15BAEA365CA6 /* Pods-Fakestagram-Xcode10-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */; }; + BFA984829A93206FAD5A7EE73D02CECB /* Pods-Fakestagram-Xcode10-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 37A9358D21C8C6C66788978D173A1975 /* Pods-Fakestagram-Xcode10-dummy.m */; }; + C050181AF88C681D976640BD1FCC41BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */; }; + CCC0CABB1AADB1E1751D6FC4F8CC4DAC /* SAMKeychain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,49 +51,78 @@ remoteGlobalIDString = 26F44590B017B9CF61B71B978A6C48A9; remoteInfo = DVR; }; + AA7DCFBA1FD37FF25FA4EAB49C3B7A04 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5572D14DECB5A676C1B31B30A3BA7F10; + remoteInfo = SAMKeychain; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponse.swift; path = Sources/DVR/URLResponse.swift; sourceTree = ""; }; - 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10-dummy.m"; sourceTree = ""; }; - 0FE82AE6B1697F13FF38C3D02C494D58 /* Pods-Fakestagram-Xcode10Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10Tests.modulemap"; sourceTree = ""; }; - 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10Tests-umbrella.h"; sourceTree = ""; }; + 0B189510E689CA0C7A3FF8B515544ED1 /* Pods-Fakestagram-Xcode10Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10Tests-dummy.m"; sourceTree = ""; }; + 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDownloadTask.swift; path = Sources/DVR/SessionDownloadTask.swift; sourceTree = ""; }; + 186820FE521F1AC79A450839CC93FE96 /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; + 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SAMKeychainQuery.h; path = Sources/SAMKeychainQuery.h; sourceTree = ""; }; 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DVR.framework; path = DVR.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cassette.swift; path = Sources/DVR/Cassette.swift; sourceTree = ""; }; - 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionUploadTask.swift; path = Sources/DVR/SessionUploadTask.swift; sourceTree = ""; }; - 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 3E73890292273903A2176A9E1993FA2E /* Pods-Fakestagram-Xcode10.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10.modulemap"; sourceTree = ""; }; - 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.debug.xcconfig"; sourceTree = ""; }; - 61E01DA29E9020DE311127CA7A730B93 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10-acknowledgements.markdown"; sourceTree = ""; }; - 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-umbrella.h"; sourceTree = ""; }; - 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DVR-dummy.m"; sourceTree = ""; }; - 72A73F46FAE3A8FDFFD2828F8B064232 /* Pods-Fakestagram-Xcode10-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-Info.plist"; sourceTree = ""; }; - 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.release.xcconfig"; sourceTree = ""; }; - 78E93B5D323ACF8A3EDDA867EF458AC1 /* DVR-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-prefix.pch"; sourceTree = ""; }; - 7A2E79AE26D80027B271646CE62614F0 /* DVR.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DVR.modulemap; sourceTree = ""; }; - 843E8C88B16D9093ABFC408353516BF6 /* Pods-Fakestagram-Xcode10Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-Info.plist"; sourceTree = ""; }; - 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDownloadTask.swift; path = Sources/DVR/SessionDownloadTask.swift; sourceTree = ""; }; - 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/DVR/URLRequest.swift; sourceTree = ""; }; - 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/DVR/SessionDataTask.swift; sourceTree = ""; }; + 22FAE02B8CF68D49C0FB33094920A653 /* Pods-Fakestagram-Xcode10.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10.modulemap"; sourceTree = ""; }; + 23C9EBF11AA3083FF6FFA0659AF80300 /* Pods-Fakestagram-Xcode10-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-Info.plist"; sourceTree = ""; }; + 2FD1A57AEDEAA0A1E3C799FD74B62D6E /* Pods-Fakestagram-Xcode10.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.release.xcconfig"; sourceTree = ""; }; + 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPURLResponse.swift; path = Sources/DVR/HTTPURLResponse.swift; sourceTree = ""; }; + 37A9358D21C8C6C66788978D173A1975 /* Pods-Fakestagram-Xcode10-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10-dummy.m"; sourceTree = ""; }; + 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 42D6DB83792C3550E949DB39A5936AB3 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-acknowledgements.plist"; sourceTree = ""; }; + 532E89693817782682084FC581911A02 /* Pods-Fakestagram-Xcode10Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Fakestagram-Xcode10Tests.modulemap"; sourceTree = ""; }; + 559CE0CDBD1D6CA5803D0C77D21EFACD /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown"; sourceTree = ""; }; + 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SAMKeychain.framework; path = SAMKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 641ABD908D7856E45E7BE1E8EF78B3F0 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Fakestagram-Xcode10Tests-frameworks.sh"; sourceTree = ""; }; + 6864987775489E2B6D4C815D5311D86F /* DVR-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-prefix.pch"; sourceTree = ""; }; + 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/DVR/URLRequest.swift; sourceTree = ""; }; + 694C3B279742AA9A8DD64C3F11CC8EDA /* DVR.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DVR.modulemap; sourceTree = ""; }; + 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-umbrella.h"; sourceTree = ""; }; + 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SAMKeychain.bundle; path = Support/SAMKeychain.bundle; sourceTree = ""; }; + 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Sources/DVR/Session.swift; sourceTree = ""; }; + 7B571BCB215465E5A7D7DD4D86B132E8 /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.debug.xcconfig"; sourceTree = ""; }; + 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionUploadTask.swift; path = Sources/DVR/SessionUploadTask.swift; sourceTree = ""; }; + 85425238E1D910A19C2AFDA001348B9C /* DVR-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DVR-Info.plist"; sourceTree = ""; }; + 91226FDA22617E1E41BFFEFC84B44F4B /* Pods-Fakestagram-Xcode10-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Fakestagram-Xcode10-frameworks.sh"; sourceTree = ""; }; + 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DVR-dummy.m"; sourceTree = ""; }; + 94BD5EEDA78EAD67F828B04D0213DEC0 /* Pods-Fakestagram-Xcode10Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-Info.plist"; sourceTree = ""; }; + 9CCA8E8CDDF99B2C1E1CCB9C8F6072AD /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10Tests.release.xcconfig"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interaction.swift; path = Sources/DVR/Interaction.swift; sourceTree = ""; }; - A4F826DEC7FCAE4942E2ADCF65CD658C /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.plist"; sourceTree = ""; }; - A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10-umbrella.h"; sourceTree = ""; }; - B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DVR.xcconfig; sourceTree = ""; }; + A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DVR.xcconfig; sourceTree = ""; }; + B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SAMKeychain.h; path = Sources/SAMKeychain.h; sourceTree = ""; }; + B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cassette.swift; path = Sources/DVR/Cassette.swift; sourceTree = ""; }; + B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SAMKeychain-dummy.m"; sourceTree = ""; }; B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Fakestagram_Xcode10.framework; path = "Pods-Fakestagram-Xcode10.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.debug.xcconfig"; sourceTree = ""; }; - BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPURLResponse.swift; path = Sources/DVR/HTTPURLResponse.swift; sourceTree = ""; }; - D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Sources/DVR/Session.swift; sourceTree = ""; }; - D9A1861BF91A580DF65644ABCAFAFFEA /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown"; sourceTree = ""; }; - DA889D455206483CFD98C8295C76C2B3 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Fakestagram-Xcode10Tests-frameworks.sh"; sourceTree = ""; }; - E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Fakestagram-Xcode10.release.xcconfig"; sourceTree = ""; }; - EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Fakestagram-Xcode10Tests-dummy.m"; sourceTree = ""; }; - F027AE4687C335032B7ED5CCEB007836 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10-acknowledgements.plist"; sourceTree = ""; }; - FB417FE726419C01C14DAE6C94F18C73 /* DVR-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DVR-Info.plist"; sourceTree = ""; }; + B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SAMKeychain.m; path = Sources/SAMKeychain.m; sourceTree = ""; }; + C90B88C9EFA69E18047CDB0E45105900 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10Tests-umbrella.h"; sourceTree = ""; }; + CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponse.swift; path = Sources/DVR/URLResponse.swift; sourceTree = ""; }; + D642418547F1E25AB97E15BAEA365CA6 /* Pods-Fakestagram-Xcode10-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Fakestagram-Xcode10-umbrella.h"; sourceTree = ""; }; + D67C9AB84D160BA70063078A4831B7D2 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Fakestagram-Xcode10-acknowledgements.markdown"; sourceTree = ""; }; + D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interaction.swift; path = Sources/DVR/Interaction.swift; sourceTree = ""; }; + E08D35AC1BA4D8EB4520D9E7A0363FB2 /* SAMKeychain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SAMKeychain-prefix.pch"; sourceTree = ""; }; + E96E855D25BDAB602D5D6FC1D6FF4980 /* SAMKeychain-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SAMKeychain-Info.plist"; sourceTree = ""; }; + EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SAMKeychain.xcconfig; sourceTree = ""; }; + EFDDB898AA206C2F8D650BA213D7A97E /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Fakestagram-Xcode10Tests-acknowledgements.plist"; sourceTree = ""; }; + F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SAMKeychain-umbrella.h"; sourceTree = ""; }; + F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SAMKeychainQuery.m; path = Sources/SAMKeychainQuery.m; sourceTree = ""; }; + FD0429D3D8416DC13AE06064AD1A268D /* SAMKeychain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SAMKeychain.modulemap; sourceTree = ""; }; + FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/DVR/SessionDataTask.swift; sourceTree = ""; }; FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Fakestagram_Xcode10Tests.framework; path = "Pods-Fakestagram-Xcode10Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 70CEC7E0B447096C76695136D758B625 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 71EA169002FBB20CD1A9D4B393A050E4 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B3D5D6B487B493B2D48298B3DED84BD9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -93,147 +131,196 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA9F33D189901C166C02A7C18FAC7466 /* Frameworks */ = { + C92F66CC4A5F2F7CEBEF011807241DFE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */, + C050181AF88C681D976640BD1FCC41BB /* Foundation.framework in Frameworks */, + 1F76FE48BAE3021631A8C0EC47758EA0 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FA9E0D5BACAFD58B67D414EA701EAA82 /* Frameworks */ = { + DA9F33D189901C166C02A7C18FAC7466 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 02A29FF79F344740883667E0806F5A66 /* Foundation.framework in Frameworks */, + A0F2DB289FF45870B97452FB7283A5FB /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 153D7E5401CB82D6E057DE5F5C753FBD /* Support Files */ = { + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { isa = PBXGroup; children = ( - 7A2E79AE26D80027B271646CE62614F0 /* DVR.modulemap */, - B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */, - 6B13A57D7460FA4465DCA1833EBAD0FF /* DVR-dummy.m */, - FB417FE726419C01C14DAE6C94F18C73 /* DVR-Info.plist */, - 78E93B5D323ACF8A3EDDA867EF458AC1 /* DVR-prefix.pch */, - 64D5A084F8FCFB2A37E585681CDD3FF5 /* DVR-umbrella.h */, + 6B475D44F9DE8B3EB70D1C14FDE147B9 /* iOS */, ); - name = "Support Files"; - path = "../Target Support Files/DVR"; + name = Frameworks; sourceTree = ""; }; - 36CBA0BB6D8786CAE4A2A3F7AC8AF6B1 /* Targets Support Files */ = { + 23FC5D5FCCEFDF054462B86E2E45F18E /* Resources */ = { isa = PBXGroup; children = ( - BBAD649145958055D0FAC8C8AD1EC327 /* Pods-Fakestagram-Xcode10 */, - F87451C24581D6C2794E73A4015226BF /* Pods-Fakestagram-Xcode10Tests */, + 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */, ); - name = "Targets Support Files"; + name = Resources; sourceTree = ""; }; - 394E61C0DEC893C865B8E14A3A5E1E80 /* DVR */ = { + 6B475D44F9DE8B3EB70D1C14FDE147B9 /* iOS */ = { isa = PBXGroup; children = ( - 2189BFED34308C79D81438EC3480FF8A /* Cassette.swift */, - BC9F5FFC07839BB4C3CF5E905E4CA644 /* HTTPURLResponse.swift */, - A022F23ACF40A182C85364BA96CC8AC9 /* Interaction.swift */, - D1DFF92BBD69ABA8A52B54FE19BE11F5 /* Session.swift */, - 8FB43091C79BB824D162D31EB598188F /* SessionDataTask.swift */, - 8476762A027AA6D0DED753B4A09AFB26 /* SessionDownloadTask.swift */, - 2528513396F0EFF90998B579F7114FFB /* SessionUploadTask.swift */, - 84F33873721DDA744DAD13D005B388C0 /* URLRequest.swift */, - 018DA2CBC6A3F9DC8B9C4571999BDAFC /* URLResponse.swift */, - 153D7E5401CB82D6E057DE5F5C753FBD /* Support Files */, + EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */, + 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */, ); - name = DVR; - path = DVR; + name = iOS; sourceTree = ""; }; - A55FDBB22AC8C6AC62EC0C7D4CB7EDFB /* Pods */ = { + 7FAAF75322C60EEC429FE19549CAFE8B /* Support Files */ = { isa = PBXGroup; children = ( - 394E61C0DEC893C865B8E14A3A5E1E80 /* DVR */, + 694C3B279742AA9A8DD64C3F11CC8EDA /* DVR.modulemap */, + A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */, + 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */, + 85425238E1D910A19C2AFDA001348B9C /* DVR-Info.plist */, + 6864987775489E2B6D4C815D5311D86F /* DVR-prefix.pch */, + 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/DVR"; sourceTree = ""; }; - A9BA6E45284AE5B3734522F7A83C6715 /* Products */ = { + 85DA3DDB235A1DE9CA1A752BFB53C319 /* Pods-Fakestagram-Xcode10 */ = { isa = PBXGroup; children = ( - 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */, - B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */, - FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */, + 22FAE02B8CF68D49C0FB33094920A653 /* Pods-Fakestagram-Xcode10.modulemap */, + D67C9AB84D160BA70063078A4831B7D2 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */, + 42D6DB83792C3550E949DB39A5936AB3 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */, + 37A9358D21C8C6C66788978D173A1975 /* Pods-Fakestagram-Xcode10-dummy.m */, + 91226FDA22617E1E41BFFEFC84B44F4B /* Pods-Fakestagram-Xcode10-frameworks.sh */, + 23C9EBF11AA3083FF6FFA0659AF80300 /* Pods-Fakestagram-Xcode10-Info.plist */, + D642418547F1E25AB97E15BAEA365CA6 /* Pods-Fakestagram-Xcode10-umbrella.h */, + 186820FE521F1AC79A450839CC93FE96 /* Pods-Fakestagram-Xcode10.debug.xcconfig */, + 2FD1A57AEDEAA0A1E3C799FD74B62D6E /* Pods-Fakestagram-Xcode10.release.xcconfig */, ); - name = Products; + name = "Pods-Fakestagram-Xcode10"; + path = "Target Support Files/Pods-Fakestagram-Xcode10"; sourceTree = ""; }; - BBAD649145958055D0FAC8C8AD1EC327 /* Pods-Fakestagram-Xcode10 */ = { + 92D95B49133DFC1C864296A8A7B17B11 /* SAMKeychain */ = { isa = PBXGroup; children = ( - 3E73890292273903A2176A9E1993FA2E /* Pods-Fakestagram-Xcode10.modulemap */, - 61E01DA29E9020DE311127CA7A730B93 /* Pods-Fakestagram-Xcode10-acknowledgements.markdown */, - F027AE4687C335032B7ED5CCEB007836 /* Pods-Fakestagram-Xcode10-acknowledgements.plist */, - 0DA5E826BD54A94CB4D313BEBC670A53 /* Pods-Fakestagram-Xcode10-dummy.m */, - 72A73F46FAE3A8FDFFD2828F8B064232 /* Pods-Fakestagram-Xcode10-Info.plist */, - A5DC8300597669E695ED2507A02D49F2 /* Pods-Fakestagram-Xcode10-umbrella.h */, - B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */, - E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */, + B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */, + B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */, + 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */, + F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */, + 23FC5D5FCCEFDF054462B86E2E45F18E /* Resources */, + A6A92A0E14AEDCFF0D413455369BA437 /* Support Files */, ); - name = "Pods-Fakestagram-Xcode10"; - path = "Target Support Files/Pods-Fakestagram-Xcode10"; + name = SAMKeychain; + path = SAMKeychain; sourceTree = ""; }; - C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { + A6A92A0E14AEDCFF0D413455369BA437 /* Support Files */ = { isa = PBXGroup; children = ( - 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, + FD0429D3D8416DC13AE06064AD1A268D /* SAMKeychain.modulemap */, + EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */, + B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */, + E96E855D25BDAB602D5D6FC1D6FF4980 /* SAMKeychain-Info.plist */, + E08D35AC1BA4D8EB4520D9E7A0363FB2 /* SAMKeychain-prefix.pch */, + F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */, ); - name = iOS; + name = "Support Files"; + path = "../Target Support Files/SAMKeychain"; + sourceTree = ""; + }; + A8BB40B0F89AAD0C99A5BD2FB49605DA /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 85DA3DDB235A1DE9CA1A752BFB53C319 /* Pods-Fakestagram-Xcode10 */, + DAB222D317E371F04730B4361DEEF132 /* Pods-Fakestagram-Xcode10Tests */, + ); + name = "Targets Support Files"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, - A55FDBB22AC8C6AC62EC0C7D4CB7EDFB /* Pods */, - A9BA6E45284AE5B3734522F7A83C6715 /* Products */, - 36CBA0BB6D8786CAE4A2A3F7AC8AF6B1 /* Targets Support Files */, + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, + D83AA71E53446D48D21689E6E794CCF4 /* Pods */, + EF34106FBE2BD5B71538202367C88D81 /* Products */, + A8BB40B0F89AAD0C99A5BD2FB49605DA /* Targets Support Files */, ); sourceTree = ""; }; - D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { + D83AA71E53446D48D21689E6E794CCF4 /* Pods */ = { isa = PBXGroup; children = ( - C0834CEBB1379A84116EF29F93051C60 /* iOS */, + ED840B56367C1B27CC3CA5DAF7B3580A /* DVR */, + 92D95B49133DFC1C864296A8A7B17B11 /* SAMKeychain */, ); - name = Frameworks; + name = Pods; sourceTree = ""; }; - F87451C24581D6C2794E73A4015226BF /* Pods-Fakestagram-Xcode10Tests */ = { + DAB222D317E371F04730B4361DEEF132 /* Pods-Fakestagram-Xcode10Tests */ = { isa = PBXGroup; children = ( - 0FE82AE6B1697F13FF38C3D02C494D58 /* Pods-Fakestagram-Xcode10Tests.modulemap */, - D9A1861BF91A580DF65644ABCAFAFFEA /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */, - A4F826DEC7FCAE4942E2ADCF65CD658C /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */, - EBA25BE0546720D50D2C6DA568AA62B9 /* Pods-Fakestagram-Xcode10Tests-dummy.m */, - DA889D455206483CFD98C8295C76C2B3 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */, - 843E8C88B16D9093ABFC408353516BF6 /* Pods-Fakestagram-Xcode10Tests-Info.plist */, - 1852EA766B45931F53D1EA9FA1C72A04 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */, - 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */, - 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */, + 532E89693817782682084FC581911A02 /* Pods-Fakestagram-Xcode10Tests.modulemap */, + 559CE0CDBD1D6CA5803D0C77D21EFACD /* Pods-Fakestagram-Xcode10Tests-acknowledgements.markdown */, + EFDDB898AA206C2F8D650BA213D7A97E /* Pods-Fakestagram-Xcode10Tests-acknowledgements.plist */, + 0B189510E689CA0C7A3FF8B515544ED1 /* Pods-Fakestagram-Xcode10Tests-dummy.m */, + 641ABD908D7856E45E7BE1E8EF78B3F0 /* Pods-Fakestagram-Xcode10Tests-frameworks.sh */, + 94BD5EEDA78EAD67F828B04D0213DEC0 /* Pods-Fakestagram-Xcode10Tests-Info.plist */, + C90B88C9EFA69E18047CDB0E45105900 /* Pods-Fakestagram-Xcode10Tests-umbrella.h */, + 7B571BCB215465E5A7D7DD4D86B132E8 /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */, + 9CCA8E8CDDF99B2C1E1CCB9C8F6072AD /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */, ); name = "Pods-Fakestagram-Xcode10Tests"; path = "Target Support Files/Pods-Fakestagram-Xcode10Tests"; sourceTree = ""; }; + ED840B56367C1B27CC3CA5DAF7B3580A /* DVR */ = { + isa = PBXGroup; + children = ( + B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */, + 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */, + D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */, + 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */, + FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */, + 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */, + 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */, + 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */, + CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */, + 7FAAF75322C60EEC429FE19549CAFE8B /* Support Files */, + ); + name = DVR; + path = DVR; + sourceTree = ""; + }; + EF34106FBE2BD5B71538202367C88D81 /* Products */ = { + isa = PBXGroup; + children = ( + 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */, + B5AB5161C2334BD729C320C8A5617D09 /* Pods_Fakestagram_Xcode10.framework */, + FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */, + 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */, + ); + name = Products; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 2095C654147B4379035015545816D3FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ACD09716CA671314C4697B49D295D786 /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 784080E16476341D20781AF2902317C5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -242,11 +329,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EAF9C510A1C08A72B5FE636D0A09237D /* Headers */ = { + ADEF261B253DB102D68EBF8E235DA9FF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4F1DADB02773B24E58D1777329F68A7E /* Pods-Fakestagram-Xcode10-umbrella.h in Headers */, + CCC0CABB1AADB1E1751D6FC4F8CC4DAC /* SAMKeychain-umbrella.h in Headers */, + 2550EA80C45F86FEFB6B484590C3127B /* SAMKeychain.h in Headers */, + 0E740145DC8569F11C3D23161F42A3F3 /* SAMKeychainQuery.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -299,18 +388,37 @@ productReference = FDFE8C9E714AA4E1C903BC13FC4956C6 /* Pods_Fakestagram_Xcode10Tests.framework */; productType = "com.apple.product-type.framework"; }; + 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D0BF722BE8E60C7D236665B49E830FF /* Build configuration list for PBXNativeTarget "SAMKeychain" */; + buildPhases = ( + ADEF261B253DB102D68EBF8E235DA9FF /* Headers */, + A63338510D2B653EDCDA5C95CBFCA292 /* Sources */, + C92F66CC4A5F2F7CEBEF011807241DFE /* Frameworks */, + E057DD10B33CF59170DCD03B6F66E50E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SAMKeychain; + productName = SAMKeychain; + productReference = 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */; + productType = "com.apple.product-type.framework"; + }; 66AF31B015059ACCE3B6BCF38BA4BBDC /* Pods-Fakestagram-Xcode10 */ = { isa = PBXNativeTarget; - buildConfigurationList = EFCDC3E6A99E3966874A0D544F316C37 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */; + buildConfigurationList = A82CD9CDC45A8D2E7DCAD4E51ADCA842 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */; buildPhases = ( - EAF9C510A1C08A72B5FE636D0A09237D /* Headers */, - 748948DD1D0E198314D8CED7CFE0514E /* Sources */, - FA9E0D5BACAFD58B67D414EA701EAA82 /* Frameworks */, - 093120623B4C625AA9B7F398B7C81B36 /* Resources */, + 2095C654147B4379035015545816D3FE /* Headers */, + 0A84C5A9ED26A60D532DFF6A7A6074C2 /* Sources */, + 70CEC7E0B447096C76695136D758B625 /* Frameworks */, + 669A8EB9B6E39A6811C4DE004225616A /* Resources */, ); buildRules = ( ); dependencies = ( + 259A05B539CB3E241E9E5F34AF5BA461 /* PBXTargetDependency */, ); name = "Pods-Fakestagram-Xcode10"; productName = "Pods-Fakestagram-Xcode10"; @@ -332,28 +440,30 @@ hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = A9BA6E45284AE5B3734522F7A83C6715 /* Products */; + productRefGroup = EF34106FBE2BD5B71538202367C88D81 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 26F44590B017B9CF61B71B978A6C48A9 /* DVR */, 66AF31B015059ACCE3B6BCF38BA4BBDC /* Pods-Fakestagram-Xcode10 */, 3570D5B3E89889A7109D1B524F6AB0EC /* Pods-Fakestagram-Xcode10Tests */, + 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 093120623B4C625AA9B7F398B7C81B36 /* Resources */ = { + 4FA729235662E8B6828CBE4854ED78D7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 4FA729235662E8B6828CBE4854ED78D7 /* Resources */ = { + 669A8EB9B6E39A6811C4DE004225616A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -367,14 +477,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E057DD10B33CF59170DCD03B6F66E50E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48749968F49ABC19B218B6A650DA2EFA /* SAMKeychain.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 748948DD1D0E198314D8CED7CFE0514E /* Sources */ = { + 0A84C5A9ED26A60D532DFF6A7A6074C2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FBCAF059EFD6C703D776FBB362E17481 /* Pods-Fakestagram-Xcode10-dummy.m in Sources */, + BFA984829A93206FAD5A7EE73D02CECB /* Pods-Fakestagram-Xcode10-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -386,6 +504,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A63338510D2B653EDCDA5C95CBFCA292 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A44705A450B7BC75180A9FC266CCFB3D /* SAMKeychain-dummy.m in Sources */, + 180B0BC996F28420A22940BB965F2687 /* SAMKeychain.m in Sources */, + 06807C205FE8C18B68229A21B79F2C0A /* SAMKeychainQuery.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A9F19AE051CBB89DAFBD44FD2E39980F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -406,6 +534,12 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 259A05B539CB3E241E9E5F34AF5BA461 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SAMKeychain; + target = 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */; + targetProxy = AA7DCFBA1FD37FF25FA4EAB49C3B7A04 /* PBXContainerItemProxy */; + }; 458665E3B29C6665346B49FD95514DD9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DVR; @@ -421,6 +555,44 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 1ECE822843CEBC6077F188C8359A5456 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 186820FE521F1AC79A450839CC93FE96 /* Pods-Fakestagram-Xcode10.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 6410F571BA8C1AEC6A19403F1B61B0B5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -487,7 +659,7 @@ }; 73EC3C52C273E4901BFAF8AE282930B4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 53E241319F5084CF8ED47D054ADB558D /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */; + baseConfigurationReference = 7B571BCB215465E5A7D7DD4D86B132E8 /* Pods-Fakestagram-Xcode10Tests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -523,9 +695,44 @@ }; name = Debug; }; + 80B8E3CCEC8B37739AF5D737CD55445B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SAMKeychain/SAMKeychain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SAMKeychain/SAMKeychain-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SAMKeychain/SAMKeychain.modulemap"; + PRODUCT_MODULE_NAME = SAMKeychain; + PRODUCT_NAME = SAMKeychain; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 839064C9546E914A832C0168D8321EFA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 75A7A389C77C72DD1641253C87995C5A /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */; + baseConfigurationReference = 9CCA8E8CDDF99B2C1E1CCB9C8F6072AD /* Pods-Fakestagram-Xcode10Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -562,9 +769,48 @@ }; name = Release; }; + 8391A55BC6996C2BF6CE294EC61E6B16 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2FD1A57AEDEAA0A1E3C799FD74B62D6E /* Pods-Fakestagram-Xcode10.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */; + baseConfigurationReference = A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -600,7 +846,7 @@ }; 97172E77B9DF71E94D334322B5D9A612 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B3C60A1FE187FA5F0650211CD0F3C7E1 /* DVR.xcconfig */; + baseConfigurationReference = A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -693,12 +939,10 @@ }; name = Release; }; - BA88BD2F4198BB1D08331F6928972BFA /* Release */ = { + A7E6A10383C96330489D1B81BEC6B474 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E2329942E626F035F5F1695DF25786D6 /* Pods-Fakestagram-Xcode10.release.xcconfig */; + baseConfigurationReference = EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -708,23 +952,22 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SAMKeychain/SAMKeychain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SAMKeychain/SAMKeychain-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/SAMKeychain/SAMKeychain.modulemap"; + PRODUCT_MODULE_NAME = SAMKeychain; + PRODUCT_NAME = SAMKeychain; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -732,44 +975,6 @@ }; name = Release; }; - BE400BEFB2E8635541EDB53740DCF0F5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B71F50A79DD2153B40CDD972C25C575B /* Pods-Fakestagram-Xcode10.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -782,29 +987,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */ = { + 6D0BF722BE8E60C7D236665B49E830FF /* Build configuration list for PBXNativeTarget "SAMKeychain" */ = { isa = XCConfigurationList; buildConfigurations = ( - 97172E77B9DF71E94D334322B5D9A612 /* Debug */, - 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */, + 80B8E3CCEC8B37739AF5D737CD55445B /* Debug */, + A7E6A10383C96330489D1B81BEC6B474 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BBF9A8603F243163C5056107ADFE3BE6 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10Tests" */ = { + A82CD9CDC45A8D2E7DCAD4E51ADCA842 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */ = { isa = XCConfigurationList; buildConfigurations = ( - 73EC3C52C273E4901BFAF8AE282930B4 /* Debug */, - 839064C9546E914A832C0168D8321EFA /* Release */, + 1ECE822843CEBC6077F188C8359A5456 /* Debug */, + 8391A55BC6996C2BF6CE294EC61E6B16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97172E77B9DF71E94D334322B5D9A612 /* Debug */, + 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EFCDC3E6A99E3966874A0D544F316C37 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10" */ = { + BBF9A8603F243163C5056107ADFE3BE6 /* Build configuration list for PBXNativeTarget "Pods-Fakestagram-Xcode10Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - BE400BEFB2E8635541EDB53740DCF0F5 /* Debug */, - BA88BD2F4198BB1D08331F6928972BFA /* Release */, + 73EC3C52C273E4901BFAF8AE282930B4 /* Debug */, + 839064C9546E914A832C0168D8321EFA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/SAMKeychain.xcscheme b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/SAMKeychain.xcscheme new file mode 100644 index 0000000..8cb3dd4 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/SAMKeychain.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist index d62400a..a4a0818 100644 --- a/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Fakestagram-Xcode10/Pods/Pods.xcodeproj/xcuserdata/carlosmn.xcuserdatad/xcschemes/xcschememanagement.plist @@ -25,6 +25,13 @@ orderHint 2 + SAMKeychain.xcscheme + + isShown + + orderHint + 3 + SuppressBuildableAutocreation diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/LICENSE b/Fakestagram-Xcode10/Pods/SAMKeychain/LICENSE new file mode 100644 index 0000000..21fe4ef --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Readme.markdown b/Fakestagram-Xcode10/Pods/SAMKeychain/Readme.markdown new file mode 100644 index 0000000..fbd8d96 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/Readme.markdown @@ -0,0 +1,87 @@ +# SAMKeychain + +[![Version](https://img.shields.io/github/release/soffes/SAMKeychain.svg)](https://github.com/soffes/SAMKeychain/releases) +[![CocoaPods](https://img.shields.io/cocoapods/v/SAMKeychain.svg)](https://cocoapods.org/pods/SAMKeychain) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +SAMKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keychain on Mac OS X and iOS. + +## Adding to Your Project + +Simply add the following to your Podfile if you're using CocoaPods: + +``` ruby +pod 'SAMKeychain' +``` + +or Cartfile if you're using Carthage: + +``` +github "soffes/SAMKeychain" +``` + +To manually add to your project: + +1. Add `Security.framework` to your target +2. Add `SAMKeychain.h`, `SAMKeychain.m`, `SAMKeychainQuery.h`, and `SAMKeychainQuery.m` to your project. + +SAMKeychain requires ARC. + +Note: Currently SAMKeychain does not support Mac OS 10.6. + +## Working with the Keychain + +SAMKeychain has the following class methods for working with the system keychain: + +```objective-c ++ (NSArray *)allAccounts; ++ (NSArray *)accountsForService:(NSString *)serviceName; ++ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account; ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType; ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account; +``` + +Easy as that. (See [SAMKeychain.h](https://github.com/soffes/samkeychain/blob/master/Sources/SAMKeychain.h) and [SAMKeychainQuery.h](https://github.com/soffes/samkeychain/blob/master/Sources/SAMKeychainQuery.h) for all of the methods.) + + +## Documentation + +### Use prepared documentation + +Read the [online documentation](http://cocoadocs.org/docsets/SAMKeychain). + +## Debugging + +If your saving to the keychain fails, use the NSError object to handle it. You can invoke `[error code]` to get the numeric error code. A few values are defined in SAMKeychain.h, and the rest in SecBase.h. + +```objective-c +NSError *error = nil; +SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; +query.service = @"MyService"; +query.account = @"soffes"; +[query fetch:&error]; + +if ([error code] == errSecItemNotFound) { + NSLog(@"Password not found"); +} else if (error != nil) { + NSLog(@"Some other error occurred: %@", [error localizedDescription]); +} +``` + +Obviously, you should do something more sophisticated. You can just call `[error localizedDescription]` if all you need is the error message. + +## Disclaimer + +Working with the keychain is pretty sucky. You should really check for errors and failures. This library doesn't make it any more stable, it just wraps up all of the annoying C APIs. + +You also really should not use the default but set the `accessibilityType`. +`kSecAttrAccessibleWhenUnlocked` should work for most applications. See +[Apple Documentation](https://developer.apple.com/library/ios/DOCUMENTATION/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants) +for other options. + +## Thanks + +This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. SAMKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](https://github.com/soffes/sstoolkit). + +A huge thanks to [Caleb Davenport](https://github.com/calebd) for leading the way on version 1.0 of SAMKeychain. diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.h b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.h new file mode 100644 index 0000000..2af305d --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.h @@ -0,0 +1,203 @@ +// +// SAMKeychain.h +// SAMKeychain +// +// Created by Sam Soffes on 5/19/10. +// Copyright (c) 2010-2014 Sam Soffes. All rights reserved. +// + +#if __has_feature(modules) + @import Foundation; +#else + #import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + Error code specific to SAMKeychain that can be returned in NSError objects. + For codes returned by the operating system, refer to SecBase.h for your + platform. + */ +typedef NS_ENUM(OSStatus, SAMKeychainErrorCode) { + /** Some of the arguments were invalid. */ + SAMKeychainErrorBadArguments = -1001, +}; + +/** SAMKeychain error domain */ +extern NSString *const kSAMKeychainErrorDomain; + +/** Account name. */ +extern NSString *const kSAMKeychainAccountKey; + +/** + Time the item was created. + + The value will be a string. + */ +extern NSString *const kSAMKeychainCreatedAtKey; + +/** Item class. */ +extern NSString *const kSAMKeychainClassKey; + +/** Item description. */ +extern NSString *const kSAMKeychainDescriptionKey; + +/** Item label. */ +extern NSString *const kSAMKeychainLabelKey; + +/** Time the item was last modified. + + The value will be a string. + */ +extern NSString *const kSAMKeychainLastModifiedKey; + +/** Where the item was created. */ +extern NSString *const kSAMKeychainWhereKey; + +/** + Simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system + Keychain on Mac OS X and iOS. + + This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. + SAMKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it). + */ +@interface SAMKeychain : NSObject + +#pragma mark - Classic methods + +/** + Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't have a + password for the given parameters. + + @param serviceName The service for which to return the corresponding password. + + @param account The account for which to return the corresponding password. + + @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't + have a password for the given parameters. + */ ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account; ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't have a + password for the given parameters. + + @param serviceName The service for which to return the corresponding password. + + @param account The account for which to return the corresponding password. + + @return Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't + have a password for the given parameters. + */ ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account; ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + + +/** + Deletes a password from the Keychain. + + @param serviceName The service for which to delete the corresponding password. + + @param account The account for which to delete the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + + +/** + Sets a password in the Keychain. + + @param password The password to store in the Keychain. + + @param serviceName The service for which to set the corresponding password. + + @param account The account for which to set the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Sets a password in the Keychain. + + @param password The password to store in the Keychain. + + @param serviceName The service for which to set the corresponding password. + + @param account The account for which to set the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Returns an array containing the Keychain's accounts, or `nil` if the Keychain has no accounts. + + See the `NSString` constants declared in SAMKeychain.h for a list of keys that can be used when accessing the + dictionaries returned by this method. + + @return An array of dictionaries containing the Keychain's accounts, or `nil` if the Keychain doesn't have any + accounts. The order of the objects in the array isn't defined. + */ ++ (nullable NSArray *> *)allAccounts; ++ (nullable NSArray *> *)allAccounts:(NSError *__autoreleasing *)error __attribute__((swift_error(none))); + + +/** + Returns an array containing the Keychain's accounts for a given service, or `nil` if the Keychain doesn't have any + accounts for the given service. + + See the `NSString` constants declared in SAMKeychain.h for a list of keys that can be used when accessing the + dictionaries returned by this method. + + @param serviceName The service for which to return the corresponding accounts. + + @return An array of dictionaries containing the Keychain's accounts for a given `serviceName`, or `nil` if the Keychain + doesn't have any accounts for the given `serviceName`. The order of the objects in the array isn't defined. + */ ++ (nullable NSArray *> *)accountsForService:(nullable NSString *)serviceName; ++ (nullable NSArray *> *)accountsForService:(nullable NSString *)serviceName error:(NSError *__autoreleasing *)error __attribute__((swift_error(none))); + + +#pragma mark - Configuration + +#if __IPHONE_4_0 && TARGET_OS_IPHONE +/** + Returns the accessibility type for all future passwords saved to the Keychain. + + @return Returns the accessibility type. + + The return value will be `NULL` or one of the "Keychain Item Accessibility + Constants" used for determining when a keychain item should be readable. + + @see setAccessibilityType + */ ++ (CFTypeRef)accessibilityType; + +/** + Sets the accessibility type for all future passwords saved to the Keychain. + + @param accessibilityType One of the "Keychain Item Accessibility Constants" + used for determining when a keychain item should be readable. + + If the value is `NULL` (the default), the Keychain default will be used which + is highly insecure. You really should use at least `kSecAttrAccessibleAfterFirstUnlock` + for background applications or `kSecAttrAccessibleWhenUnlocked` for all + other applications. + + @see accessibilityType + */ ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType; +#endif + +@end + +NS_ASSUME_NONNULL_END + +#import diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.m b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.m new file mode 100644 index 0000000..6d01d3d --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychain.m @@ -0,0 +1,130 @@ +// +// SAMKeychain.m +// SAMKeychain +// +// Created by Sam Soffes on 5/19/10. +// Copyright (c) 2010-2014 Sam Soffes. All rights reserved. +// + +#import "SAMKeychain.h" +#import "SAMKeychainQuery.h" + +NSString *const kSAMKeychainErrorDomain = @"com.samsoffes.samkeychain"; +NSString *const kSAMKeychainAccountKey = @"acct"; +NSString *const kSAMKeychainCreatedAtKey = @"cdat"; +NSString *const kSAMKeychainClassKey = @"labl"; +NSString *const kSAMKeychainDescriptionKey = @"desc"; +NSString *const kSAMKeychainLabelKey = @"labl"; +NSString *const kSAMKeychainLastModifiedKey = @"mdat"; +NSString *const kSAMKeychainWhereKey = @"svce"; + +#if __IPHONE_4_0 && TARGET_OS_IPHONE + static CFTypeRef SAMKeychainAccessibilityType = NULL; +#endif + +@implementation SAMKeychain + ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account { + return [self passwordForService:serviceName account:account error:nil]; +} + + ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + [query fetch:error]; + return query.password; +} + ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account { + return [self passwordDataForService:serviceName account:account error:nil]; +} + ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + [query fetch:error]; + + return query.passwordData; +} + + ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account { + return [self deletePasswordForService:serviceName account:account error:nil]; +} + + ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + return [query deleteItem:error]; +} + + ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account { + return [self setPassword:password forService:serviceName account:account error:nil]; +} + + ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + query.password = password; + return [query save:error]; +} + ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account { + return [self setPasswordData:password forService:serviceName account:account error:nil]; +} + + ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + query.passwordData = password; + return [query save:error]; +} + ++ (nullable NSArray *)allAccounts { + return [self allAccounts:nil]; +} + + ++ (nullable NSArray *)allAccounts:(NSError *__autoreleasing *)error { + return [self accountsForService:nil error:error]; +} + + ++ (nullable NSArray *)accountsForService:(nullable NSString *)serviceName { + return [self accountsForService:serviceName error:nil]; +} + + ++ (nullable NSArray *)accountsForService:(nullable NSString *)serviceName error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + return [query fetchAll:error]; +} + + +#if __IPHONE_4_0 && TARGET_OS_IPHONE ++ (CFTypeRef)accessibilityType { + return SAMKeychainAccessibilityType; +} + + ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType { + CFRetain(accessibilityType); + if (SAMKeychainAccessibilityType) { + CFRelease(SAMKeychainAccessibilityType); + } + SAMKeychainAccessibilityType = accessibilityType; +} +#endif + +@end diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.h b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.h new file mode 100644 index 0000000..84658e2 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.h @@ -0,0 +1,147 @@ +// +// SAMKeychainQuery.h +// SAMKeychain +// +// Created by Caleb Davenport on 3/19/13. +// Copyright (c) 2013-2014 Sam Soffes. All rights reserved. +// + +#if __has_feature(modules) + @import Foundation; + @import Security; +#else + #import + #import +#endif + +NS_ASSUME_NONNULL_BEGIN + +#if __IPHONE_7_0 || __MAC_10_9 + // Keychain synchronization available at compile time + #define SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE 1 +#endif + +#if __IPHONE_3_0 || __MAC_10_9 + // Keychain access group available at compile time + #define SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE 1 +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +typedef NS_ENUM(NSUInteger, SAMKeychainQuerySynchronizationMode) { + SAMKeychainQuerySynchronizationModeAny, + SAMKeychainQuerySynchronizationModeNo, + SAMKeychainQuerySynchronizationModeYes +}; +#endif + +/** + Simple interface for querying or modifying keychain items. + */ +@interface SAMKeychainQuery : NSObject + +/** kSecAttrAccount */ +@property (nonatomic, copy, nullable) NSString *account; + +/** kSecAttrService */ +@property (nonatomic, copy, nullable) NSString *service; + +/** kSecAttrLabel */ +@property (nonatomic, copy, nullable) NSString *label; + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +/** kSecAttrAccessGroup (only used on iOS) */ +@property (nonatomic, copy, nullable) NSString *accessGroup; +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +/** kSecAttrSynchronizable */ +@property (nonatomic) SAMKeychainQuerySynchronizationMode synchronizationMode; +#endif + +/** Root storage for password information */ +@property (nonatomic, copy, nullable) NSData *passwordData; + +/** + This property automatically transitions between an object and the value of + `passwordData` using NSKeyedArchiver and NSKeyedUnarchiver. + */ +@property (nonatomic, copy, nullable) id passwordObject; + +/** + Convenience accessor for setting and getting a password string. Passes through + to `passwordData` using UTF-8 string encoding. + */ +@property (nonatomic, copy, nullable) NSString *password; + + +///------------------------ +/// @name Saving & Deleting +///------------------------ + +/** + Save the receiver's attributes as a keychain item. Existing items with the + given account, service, and access group will first be deleted. + + @param error Populated should an error occur. + + @return `YES` if saving was successful, `NO` otherwise. + */ +- (BOOL)save:(NSError **)error; + +/** + Delete keychain items that match the given account, service, and access group. + + @param error Populated should an error occur. + + @return `YES` if saving was successful, `NO` otherwise. + */ +- (BOOL)deleteItem:(NSError **)error; + + +///--------------- +/// @name Fetching +///--------------- + +/** + Fetch all keychain items that match the given account, service, and access + group. The values of `password` and `passwordData` are ignored when fetching. + + @param error Populated should an error occur. + + @return An array of dictionaries that represent all matching keychain items or + `nil` should an error occur. + The order of the items is not determined. + */ +- (nullable NSArray *> *)fetchAll:(NSError **)error; + +/** + Fetch the keychain item that matches the given account, service, and access + group. The `password` and `passwordData` properties will be populated unless + an error occurs. The values of `password` and `passwordData` are ignored when + fetching. + + @param error Populated should an error occur. + + @return `YES` if fetching was successful, `NO` otherwise. + */ +- (BOOL)fetch:(NSError **)error; + + +///----------------------------- +/// @name Synchronization Status +///----------------------------- + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +/** + Returns a boolean indicating if keychain synchronization is available on the device at runtime. The #define + SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE is only for compile time. If you are checking for the presence of synchronization, + you should use this method. + + @return A value indicating if keychain synchronization is available + */ ++ (BOOL)isSynchronizationAvailable; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.m b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.m new file mode 100644 index 0000000..00ecb80 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/SAMKeychain/Sources/SAMKeychainQuery.m @@ -0,0 +1,316 @@ +// +// SAMKeychainQuery.m +// SAMKeychain +// +// Created by Caleb Davenport on 3/19/13. +// Copyright (c) 2013-2014 Sam Soffes. All rights reserved. +// + +#import "SAMKeychainQuery.h" +#import "SAMKeychain.h" + +@implementation SAMKeychainQuery + +@synthesize account = _account; +@synthesize service = _service; +@synthesize label = _label; +@synthesize passwordData = _passwordData; + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +@synthesize accessGroup = _accessGroup; +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +@synthesize synchronizationMode = _synchronizationMode; +#endif + +#pragma mark - Public + +- (BOOL)save:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account || !self.passwordData) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + NSMutableDictionary *query = nil; + NSMutableDictionary * searchQuery = [self query]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)searchQuery, nil); + if (status == errSecSuccess) {//item already exists, update it! + query = [[NSMutableDictionary alloc]init]; + [query setObject:self.passwordData forKey:(__bridge id)kSecValueData]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + status = SecItemUpdate((__bridge CFDictionaryRef)(searchQuery), (__bridge CFDictionaryRef)(query)); + }else if(status == errSecItemNotFound){//item not found, create it! + query = [self query]; + if (self.label) { + [query setObject:self.label forKey:(__bridge id)kSecAttrLabel]; + } + [query setObject:self.passwordData forKey:(__bridge id)kSecValueData]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + status = SecItemAdd((__bridge CFDictionaryRef)query, NULL); + } + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + } + return (status == errSecSuccess);} + + +- (BOOL)deleteItem:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + NSMutableDictionary *query = [self query]; +#if TARGET_OS_IPHONE + status = SecItemDelete((__bridge CFDictionaryRef)query); +#else + // On Mac OS, SecItemDelete will not delete a key created in a different + // app, nor in a different version of the same app. + // + // To replicate the issue, save a password, change to the code and + // rebuild the app, and then attempt to delete that password. + // + // This was true in OS X 10.6 and probably later versions as well. + // + // Work around it by using SecItemCopyMatching and SecKeychainItemDelete. + CFTypeRef result = NULL; + [query setObject:@YES forKey:(__bridge id)kSecReturnRef]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + if (status == errSecSuccess) { + status = SecKeychainItemDelete((SecKeychainItemRef)result); + CFRelease(result); + } +#endif + + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + } + + return (status == errSecSuccess); +} + + +- (nullable NSArray *)fetchAll:(NSError *__autoreleasing *)error { + NSMutableDictionary *query = [self query]; + [query setObject:@YES forKey:(__bridge id)kSecReturnAttributes]; + [query setObject:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + + CFTypeRef result = NULL; + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + return nil; + } + + return (__bridge_transfer NSArray *)result; +} + + +- (BOOL)fetch:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + CFTypeRef result = NULL; + NSMutableDictionary *query = [self query]; + [query setObject:@YES forKey:(__bridge id)kSecReturnData]; + [query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + + if (status != errSecSuccess) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + self.passwordData = (__bridge_transfer NSData *)result; + return YES; +} + + +#pragma mark - Accessors + +- (void)setPasswordObject:(id)object { + self.passwordData = [NSKeyedArchiver archivedDataWithRootObject:object]; +} + + +- (id)passwordObject { + if ([self.passwordData length]) { + return [NSKeyedUnarchiver unarchiveObjectWithData:self.passwordData]; + } + return nil; +} + + +- (void)setPassword:(NSString *)password { + self.passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; +} + + +- (NSString *)password { + if ([self.passwordData length]) { + return [[NSString alloc] initWithData:self.passwordData encoding:NSUTF8StringEncoding]; + } + return nil; +} + + +#pragma mark - Synchronization Status + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE ++ (BOOL)isSynchronizationAvailable { +#if TARGET_OS_IPHONE + // Apple suggested way to check for 7.0 at runtime + // https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/SupportingEarlieriOS.html + return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1; +#else + return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4; +#endif +} +#endif + + +#pragma mark - Private + +- (NSMutableDictionary *)query { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:3]; + [dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; + + if (self.service) { + [dictionary setObject:self.service forKey:(__bridge id)kSecAttrService]; + } + + if (self.account) { + [dictionary setObject:self.account forKey:(__bridge id)kSecAttrAccount]; + } + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +#if !TARGET_IPHONE_SIMULATOR + if (self.accessGroup) { + [dictionary setObject:self.accessGroup forKey:(__bridge id)kSecAttrAccessGroup]; + } +#endif +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE + if ([[self class] isSynchronizationAvailable]) { + id value; + + switch (self.synchronizationMode) { + case SAMKeychainQuerySynchronizationModeNo: { + value = @NO; + break; + } + case SAMKeychainQuerySynchronizationModeYes: { + value = @YES; + break; + } + case SAMKeychainQuerySynchronizationModeAny: { + value = (__bridge id)(kSecAttrSynchronizableAny); + break; + } + } + + [dictionary setObject:value forKey:(__bridge id)(kSecAttrSynchronizable)]; + } +#endif + + return dictionary; +} + + ++ (NSError *)errorWithCode:(OSStatus) code { + static dispatch_once_t onceToken; + static NSBundle *resourcesBundle = nil; + dispatch_once(&onceToken, ^{ + NSURL *url = [[NSBundle bundleForClass:[SAMKeychainQuery class]] URLForResource:@"SAMKeychain" withExtension:@"bundle"]; + resourcesBundle = [NSBundle bundleWithURL:url]; + }); + + NSString *message = nil; + switch (code) { + case errSecSuccess: return nil; + case SAMKeychainErrorBadArguments: message = NSLocalizedStringFromTableInBundle(@"SAMKeychainErrorBadArguments", @"SAMKeychain", resourcesBundle, nil); break; + +#if TARGET_OS_IPHONE + case errSecUnimplemented: { + message = NSLocalizedStringFromTableInBundle(@"errSecUnimplemented", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecParam: { + message = NSLocalizedStringFromTableInBundle(@"errSecParam", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecAllocate: { + message = NSLocalizedStringFromTableInBundle(@"errSecAllocate", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecNotAvailable: { + message = NSLocalizedStringFromTableInBundle(@"errSecNotAvailable", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecDuplicateItem: { + message = NSLocalizedStringFromTableInBundle(@"errSecDuplicateItem", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecItemNotFound: { + message = NSLocalizedStringFromTableInBundle(@"errSecItemNotFound", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecInteractionNotAllowed: { + message = NSLocalizedStringFromTableInBundle(@"errSecInteractionNotAllowed", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecDecode: { + message = NSLocalizedStringFromTableInBundle(@"errSecDecode", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecAuthFailed: { + message = NSLocalizedStringFromTableInBundle(@"errSecAuthFailed", @"SAMKeychain", resourcesBundle, nil); + break; + } + default: { + message = NSLocalizedStringFromTableInBundle(@"errSecDefault", @"SAMKeychain", resourcesBundle, nil); + } +#else + default: + message = (__bridge_transfer NSString *)SecCopyErrorMessageString(code, NULL); +#endif + } + + NSDictionary *userInfo = nil; + if (message) { + userInfo = @{ NSLocalizedDescriptionKey : message }; + } + return [NSError errorWithDomain:kSAMKeychainErrorDomain code:code userInfo:userInfo]; +} + +@end diff --git a/Fakestagram-Xcode10/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings b/Fakestagram-Xcode10/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings new file mode 100644 index 0000000000000000000000000000000000000000..5c0f174aee47798dd598314b400c798a9cafa9db GIT binary patch literal 1580 zcmbW1&5qMR5QO{8Q&=21>^=bE5VS->h~;+=9KDINYi(j%{sHpxz*jx#*ozH99GscV z)O6QWSI^HMm-fsu`(!J7Yj3QuqiyWoax1N}4>qvUvX+6mv?uoT56D-bTC4e9a&}9! z*6uic;CyAhb)3xX1)n0+zMe7eSn0`EFy^x}nSJy8+7+L#VD`+mM0xIP#I7Y`0qYwO zC6OC2#W{1~=*Yc>Qw6pMSu+!d)_)t%luvdl_Il5}9COa#z26}x_jucPWD)=>m}4FxGJ7ER)MKiwZl2FhUaRJXxz+b(jxVpnb{&#Jt3^t67TPwwnM%4H?BC{G;96I$%|Fen(e&a<%ZelIyc zd3W^r?+Pq=Id~*h*M6(&k(2+8msA+wrpks-Zs93MX-6^tkDt0)uFcUTx+y%6yd#II zQ=|88+}Em&dU<|2oDe*vsT><|=KXd>2HkMWIL%YRD!DIuNQgj=m1y8!<2$`5$yHlU z%1ui(S-F?)ZQ3tm)~LsDzNJ{`{fpjL$E&v+93|b<<>AK}bwl?pA=YpHiy3@%`k+#rN>=*ZEcNkg3UN+vaa0nW@5_W%F@ literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown index 102af75..11044cb 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.markdown @@ -1,3 +1,27 @@ # Acknowledgements This application makes use of the following third party libraries: + +## SAMKeychain + +Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Generated by CocoaPods - https://cocoapods.org diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist index 7acbad1..3783cd2 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-acknowledgements.plist @@ -12,6 +12,36 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + SAMKeychain + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-input-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..adddadc --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh +${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-output-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..2211fcb --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SAMKeychain.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-input-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..adddadc --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh +${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-output-files.xcfilelist b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..2211fcb --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SAMKeychain.framework \ No newline at end of file diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh new file mode 100755 index 0000000..ac7abfe --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10-frameworks.sh @@ -0,0 +1,171 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig index b52088a..40bcc85 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.debug.xcconfig @@ -1,4 +1,8 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "SAMKeychain" -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig index b52088a..40bcc85 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10/Pods-Fakestagram-Xcode10.release.xcconfig @@ -1,4 +1,8 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "SAMKeychain" -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig index b9acfae..fec5fc6 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.debug.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "DVR" +OTHER_LDFLAGS = $(inherited) -framework "DVR" -framework "Foundation" -framework "SAMKeychain" -framework "Security" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig index b9acfae..fec5fc6 100644 --- a/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig +++ b/Fakestagram-Xcode10/Pods/Target Support Files/Pods-Fakestagram-Xcode10Tests/Pods-Fakestagram-Xcode10Tests.release.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "DVR" +OTHER_LDFLAGS = $(inherited) -framework "DVR" -framework "Foundation" -framework "SAMKeychain" -framework "Security" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist new file mode 100644 index 0000000..d24e508 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m new file mode 100644 index 0000000..7bb8fc3 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SAMKeychain : NSObject +@end +@implementation PodsDummy_SAMKeychain +@end diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h new file mode 100644 index 0000000..6577879 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "SAMKeychain.h" +#import "SAMKeychainQuery.h" + +FOUNDATION_EXPORT double SAMKeychainVersionNumber; +FOUNDATION_EXPORT const unsigned char SAMKeychainVersionString[]; + diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap new file mode 100644 index 0000000..47b7948 --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap @@ -0,0 +1,6 @@ +framework module SAMKeychain { + umbrella header "SAMKeychain-umbrella.h" + + export * + module * { export * } +} diff --git a/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig new file mode 100644 index 0000000..a72668c --- /dev/null +++ b/Fakestagram-Xcode10/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SAMKeychain +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES From 1e165ea192283ff44d9186596fdb54507eac8a3e Mon Sep 17 00:00:00 2001 From: Pedro Carlos Monzalvo Navarro Date: Fri, 6 Dec 2019 14:31:21 -0600 Subject: [PATCH 15/18] added photos with iphone's camera and added keychain --- .../UserInterfaceState.xcuserstate | Bin 73035 -> 71278 bytes .../Base.lproj/Main.storyboard | 37 ++++++++++-------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 97a6edec8965dd1451d07aaf1432d2c54ded8df8..94195c935afec9be7a67657c225b909effc718b4 100644 GIT binary patch delta 26521 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 delta 27749 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 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard index 7f74dc4..7d9488b 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard @@ -99,29 +99,32 @@ - - + + + + + + + + + - - - - - - - - + + + + From 4519b824c1dfb8963323d5af64603c77de35c408 Mon Sep 17 00:00:00 2001 From: CarlosMonzalvoN Date: Fri, 17 Jan 2020 15:39:48 -0600 Subject: [PATCH 16/18] added likes service with animated button like and template to service comment --- .../project.pbxproj | 32 +++- .../UserInterfaceState.xcuserstate | Bin 71278 -> 129048 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../love.imageset/Contents.json | 21 +++ .../Assets.xcassets/love.imageset/love.png | Bin 0 -> 11050 bytes .../person.imageset/Contents.json | 2 +- .../person.imageset/icons8-user-90.png | Bin 0 -> 1784 bytes .../person.imageset/person.png | Bin 1787 -> 0 bytes .../Base.lproj/Main.storyboard | 118 ++++++++++++-- .../Fakestagram-Xcode10/Models/Comment.swift | 9 ++ .../Fakestagram-Xcode10/Models/Like.swift | 7 + .../Fakestagram-Xcode10/Models/Post.swift | 1 - .../Fakestagram-Xcode10/Network/Client.swift | 4 +- .../Services/CommentService.swift | 51 ++++++ .../Services/LikeService.swift | 62 ++++++++ .../CommentViewController.swift | 47 ++++++ .../ViewControllers/PostsViewController.swift | 24 +++ .../Views/AuthorView.swift | 20 +-- .../Views/CommentTableViewCell.swift | 29 ++++ .../Views/CommentTableViewCell.xib | 68 ++++++++ .../Views/PostCollectionViewCell.swift | 87 ++++++++-- .../Views/PostCollectionViewCell.xib | 148 ++++++++++++------ .../Views/ShutterButton.swift | 41 +++++ 23 files changed, 682 insertions(+), 95 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/love.png create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/icons8-user-90.png delete mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/person.png create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CommentService.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Services/LikeService.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CommentViewController.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Views/CommentTableViewCell.swift create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Views/CommentTableViewCell.xib create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShutterButton.swift diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index 34ddcbb..f09b82b 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -33,8 +33,14 @@ 6C5656552358DB9D00460C1E /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656542358DB9D00460C1E /* Author.swift */; }; 6C5656572358DBAB00460C1E /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656562358DBAB00460C1E /* Comment.swift */; }; 6C5656592358DBB800460C1E /* Like.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5656582358DBB800460C1E /* Like.swift */; }; + 6C57E1A823A9936A00AB050C /* CommentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C57E1A723A9936A00AB050C /* CommentViewController.swift */; }; + 6C57E1AA23A9986F00AB050C /* CommentTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6C57E1A923A9986F00AB050C /* CommentTableViewCell.xib */; }; + 6C57E1AC23A9989100AB050C /* CommentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C57E1AB23A9989100AB050C /* CommentTableViewCell.swift */; }; 6C5F57952348203100488E96 /* Credentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F57942348203100488E96 /* Credentials.swift */; }; - 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5F5799234827B200488E96 /* PostViewController.swift */; }; + 6C6C3ABD23A600BB00D044AA /* PostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6C3ABC23A600BA00D044AA /* PostViewController.swift */; }; + 6C6C3AC123A7FF3500D044AA /* LikeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6C3AC023A7FF3500D044AA /* LikeService.swift */; }; + 6C6C3AC323A8001200D044AA /* CommentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6C3AC223A8001200D044AA /* CommentService.swift */; }; + 6C6C3AC523A8406800D044AA /* ShutterButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6C3AC423A8406800D044AA /* ShutterButton.swift */; }; 6C89EB1923772E6500CC903B /* CacheImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1823772E6500CC903B /* CacheImage.swift */; }; 6C89EB1B23772E8200CC903B /* DataContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1A23772E8200CC903B /* DataContainer.swift */; }; 6C89EB1D23772EB700CC903B /* ImageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1C23772EB700CC903B /* ImageStore.swift */; }; @@ -91,8 +97,14 @@ 6C5656542358DB9D00460C1E /* Author.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = ""; }; 6C5656562358DBAB00460C1E /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; }; 6C5656582358DBB800460C1E /* Like.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Like.swift; sourceTree = ""; }; + 6C57E1A723A9936A00AB050C /* CommentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentViewController.swift; sourceTree = ""; }; + 6C57E1A923A9986F00AB050C /* CommentTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommentTableViewCell.xib; sourceTree = ""; }; + 6C57E1AB23A9989100AB050C /* CommentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentTableViewCell.swift; sourceTree = ""; }; 6C5F57942348203100488E96 /* Credentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Credentials.swift; sourceTree = ""; }; - 6C5F5799234827B200488E96 /* PostViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; + 6C6C3ABC23A600BA00D044AA /* PostViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostViewController.swift; sourceTree = ""; }; + 6C6C3AC023A7FF3500D044AA /* LikeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LikeService.swift; sourceTree = ""; }; + 6C6C3AC223A8001200D044AA /* CommentService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentService.swift; sourceTree = ""; }; + 6C6C3AC423A8406800D044AA /* ShutterButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShutterButton.swift; sourceTree = ""; }; 6C89EB1823772E6500CC903B /* CacheImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheImage.swift; sourceTree = ""; }; 6C89EB1A23772E8200CC903B /* DataContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataContainer.swift; sourceTree = ""; }; 6C89EB1C23772EB700CC903B /* ImageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageStore.swift; sourceTree = ""; }; @@ -147,8 +159,9 @@ isa = PBXGroup; children = ( 6C307326235A78350063C3C5 /* PostsViewController.swift */, - 6C5F5799234827B200488E96 /* PostViewController.swift */, + 6C6C3ABC23A600BA00D044AA /* PostViewController.swift */, 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */, + 6C57E1A723A9936A00AB050C /* CommentViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -205,6 +218,9 @@ 6C1DC82A23523BB9001E8065 /* ShowPostViewController.swift */, 6C1DC82B23523BB9001E8065 /* ShowPostViewController.xib */, 6C1DC82E23524732001E8065 /* AuthorView.swift */, + 6C6C3AC423A8406800D044AA /* ShutterButton.swift */, + 6C57E1A923A9986F00AB050C /* CommentTableViewCell.xib */, + 6C57E1AB23A9989100AB050C /* CommentTableViewCell.swift */, ); path = Views; sourceTree = ""; @@ -227,6 +243,8 @@ children = ( 6CD0F05B23771FD000D5874B /* CreatePostService.swift */, 6C1151B023899CF40047F423 /* IndexService.swift */, + 6C6C3AC223A8001200D044AA /* CommentService.swift */, + 6C6C3AC023A7FF3500D044AA /* LikeService.swift */, ); path = Services; sourceTree = ""; @@ -382,6 +400,7 @@ buildActionMask = 2147483647; files = ( 6C1DC82D23523BB9001E8065 /* ShowPostViewController.xib in Resources */, + 6C57E1AA23A9986F00AB050C /* CommentTableViewCell.xib in Resources */, 7701BEBB233F1B1C0004C30D /* LaunchScreen.storyboard in Resources */, 7701BEB8233F1B1C0004C30D /* Assets.xcassets in Resources */, 7701BEB6233F1B1B0004C30D /* Main.storyboard in Resources */, @@ -496,6 +515,7 @@ 6C5656592358DBB800460C1E /* Like.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, 6C1151B323899F090047F423 /* PreviewView.swift in Sources */, + 6C6C3AC123A7FF3500D044AA /* LikeService.swift in Sources */, 6C89EB1923772E6500CC903B /* CacheImage.swift in Sources */, 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */, 6C1DC81723516603001E8065 /* RequestBuilder.swift in Sources */, @@ -504,16 +524,20 @@ 6C5656552358DB9D00460C1E /* Author.swift in Sources */, 6C1151B52389A2530047F423 /* NotificationKeys.swift in Sources */, 6C1DC82F23524732001E8065 /* AuthorView.swift in Sources */, + 6C6C3AC323A8001200D044AA /* CommentService.swift in Sources */, 6C1151B82389A2940047F423 /* CheckSum.m in Sources */, 6C307327235A78350063C3C5 /* PostsViewController.swift in Sources */, + 6C57E1A823A9936A00AB050C /* CommentViewController.swift in Sources */, 6C5656572358DBAB00460C1E /* Comment.swift in Sources */, 6C89EB1F23772EEC00CC903B /* StorageType.swift in Sources */, + 6C6C3AC523A8406800D044AA /* ShutterButton.swift in Sources */, 6C30732A235A83A40063C3C5 /* PostCollectionViewCell.swift in Sources */, 6C89EB1D23772EB700CC903B /* ImageStore.swift in Sources */, + 6C6C3ABD23A600BB00D044AA /* PostViewController.swift in Sources */, 6C1DC815235165E8001E8065 /* HttpResponse.swift in Sources */, 6C1DC811235165A8001E8065 /* Client.swift in Sources */, 6C1DC81B23516649001E8065 /* RestClient.swift in Sources */, - 6C5F579A234827B200488E96 /* PostViewController.swift in Sources */, + 6C57E1AC23A9989100AB050C /* CommentTableViewCell.swift in Sources */, 6C112495235B742900D8FAA4 /* UIImage+Base64.swift in Sources */, 6CD0F05C23771FD000D5874B /* CreatePostService.swift in Sources */, ); diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index 94195c935afec9be7a67657c225b909effc718b4..bbed0fe8b9f70e10b2246975d45d158b9fbd1fd1 100644 GIT binary patch literal 129048 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

~ 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 z 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

xFaw)G&3MoF&0uB% zXF_JeXHLwVnmIj_Fq1laaQ5&lWY%%^$Si8seb#H%cQ#-)Y&LQ>YBqZI%xv6j{Oq~e zVqms?_OX7Aev5vO-cWC>x6&i@j(T6czdl$Wq7TzY=;QSSeUd&!pQfkiY5E*}u0BuC z(--SY^cDJ6y;k3$@6z|^`}J4!BlpSPQLn13|?YW~f<*SqMmG7(LuR>pizdG@M|11|T{=d1=;{Ugj{(roB{XfYrLc0I} diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..0171e11 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/Contents.json b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/Contents.json new file mode 100644 index 0000000..cd8cfe8 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "love.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/love.png b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/love.imageset/love.png new file mode 100644 index 0000000000000000000000000000000000000000..3068a1316d5889eef47d8be4467f403f913cb183 GIT binary patch literal 11050 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 literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/person.png b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/person.imageset/person.png deleted file mode 100644 index 0cbe762f89d40eb4e83418647645e50cec39b11c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmVHjk`|12#3^Yj1I)c={8|H;Y!VPXH1 zlmACY|5Q}}u(1CP4gcEO|8jEw%gg_|y8mo!|HQ=q<>mj3jQ=?~|DT`#s;d81R{u*& z|0N~=XlVbWr2j51|2H@PK|%ksv;P?x|A2u1TwMRVyZ?B2aT*JM000IiNkl z4ZE>S5P(Y`k`$#PA{;#A=>Pw_m-8Hte1vMo&U*L$1>INKnVp>-k|Yoa1OkCTAP@)y z0s^R-ZgwaAb}Hvc+g>koqtMh9*3VZL)AqBeT+GJphC1tqtd8FGdk^e>X*Z%!W&Nm? zF#Un`-0z3JJLJ!?ll0Q(YX6vKUDi)rlE^FLcf`tgT6FX*DCu{ky=DE}ucAh;{{F5R zn5>`uB|1(;zXLs+_0zwAKB+D!%if;#^FKw;>Ilm67xf>bHmE0fP#m*%c!=7pD|iTv zL)I3LNUB7MYrK%PMlpWbFn^yV*<3vAg9yrjLo`d(YQ>2>Q=+Sl(SkCRmn4%L9q1eV z!Ke70`hbG6M{%)fLmJ96);hO_6a!4c1PVI1nlKC7YPFR32>vE-0s@0*39u8`AnreYlkL%r~Xvv_^TY7>`ilt<%6T zTpO&t&X@=bjV!l()?R1gZwy0u#oFskxIi&M@tOz3R%$5juT zxG@B*LFH-EIWrZ8!cZ8pM;Ho2`iA4Lk2l20X+GbOP}bI6f4boiz8?JlFeJ1;L^7nb z$A8qy{Sk&XP8B0z?R5sFs87ofr`GoQ)kI2$a}2@Y^9>0dAjU6TjVVt`>D&UvkkrWx zd?$uXtK}Q#bnPo*?RCbi-M@a1HKCgcb*~`Yr%mV#7{`!Or*LP7Vo2y(f`($aA=HbZ zg7vWHSx~xn;eNbff?+tP)Veo=Z%riD^@Y;cw(PLh%3)wMV+`n&OOXmSJJwctVvH>? zp@J|@k1(a};Q@fVqt~Yn-ObPAqe*o|FZc)3R z7enW5Bi2SYK;9rdLTLN@3-IN&Hfx_-RM>ctu=cqF=q@;=v~xNULasGCI?Y07Aam1z z*!9X^3^+rY69*u-P_(uc|4?U8f_+L=wme`>CoZM>MIIF>U~K5+Gbg$*y-_==uTYW{ zkTWQY(5c!Ddx%!r9>r*XLIG%52&ip+FWJ^l-8OW8g+J5}7_?vE;g?ufkl@Dfin;-V zPyKi>WD<|0FAzizqTvsjS8Qz7IxrEW;?MHY(HHRgJxUJox$b_?C1rW8>IKaOPj#BXHjyBb7M8nVeLFmArLfRYC`6Udtmk$@|g(+rgP- z@(j;;&n_}_aOQlx!Xm*hshSRSyK^am`3iT;p6=r)jiI%q_S*~&fv5m z%8ZsueB1E3oMtyzf1i1RrVab8sW%~42#wvD)k% zv%XR6vVJ6Rt~#nqH`;N)#al!epu?X07$&5DXk^WKETJ~xXD3*S<|#{!J|ocIa%y>u zKPeDi^0#djZWIDRl4Bt*{M2vsNN{|KDF4SyhKVZapOS9hCom0&zn>(;;C|zYKp+qZ1OkCT dAP@*H`45|VnE^y~*a-jt002ovPDHLkV1l_tgoXeB diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard index 7d9488b..fbd2789 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard @@ -5,9 +5,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -17,7 +82,7 @@ - + @@ -26,13 +91,13 @@ - + - - + + - + @@ -46,14 +111,14 @@ - + - + @@ -66,7 +131,7 @@ - + @@ -89,7 +154,7 @@ - + @@ -102,10 +167,13 @@ - - - - + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + + + - + + + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShutterButton.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShutterButton.swift new file mode 100644 index 0000000..86f72e5 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Views/ShutterButton.swift @@ -0,0 +1,41 @@ +// +// ShutterButton.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 16/12/19. +// Copyright © 2019 unam. All rights reserved. +// + +import UIKit + +class ShutterButton: UIButton { + + var centerView = UIView() + + override init(frame: CGRect) { + super.init(frame: frame) + self.backgroundColor = .clear + self.layer.borderWidth = 5 + self.layer.borderColor = UIColor.lightGray.cgColor + self.layer.cornerRadius = self.frame.height / 2 + + centerView.frame = frame + centerView.transform = CGAffineTransform.init(scaleX: 0.8, y: 0.8) + centerView.backgroundColor = .lightGray + self.addSubview(centerView) + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + self.backgroundColor = .clear + self.layer.borderWidth = 5 + self.layer.borderColor = UIColor.lightGray.cgColor + self.layer.cornerRadius = self.frame.height / 2 + + centerView.frame = frame + centerView.transform = CGAffineTransform.init(scaleX: 0.8, y: 0.8) + centerView.backgroundColor = .lightGray + self.addSubview(centerView) + } + +} From 5946882b937cf8b1e98662b73ee0305897444824 Mon Sep 17 00:00:00 2001 From: CarlosMonzalvoN Date: Mon, 20 Jan 2020 16:52:52 -0600 Subject: [PATCH 17/18] new preview camera --- .DS_Store | Bin 8196 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 8196 -> 8196 bytes .../project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 129048 -> 131372 bytes .../Base.lproj/Main.storyboard | 70 +++++++++++++++++- .../Services/CommentService.swift | 2 +- .../CameraViewController.swift | 7 +- .../PreviewCameraViewController.swift | 46 ++++++++++++ 8 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PreviewCameraViewController.swift diff --git a/.DS_Store b/.DS_Store index 2d8955382bfcf5b5c212027fbde9a0fd1d87ce0b..574b36db37cddf5ee7f7b9ec4efffb302796d860 100644 GIT binary patch delta 50 ycmZp1XmQw(Da2u9X`!QFWNf&(P$-g#nSp^}GQX(tBvBp^b2Go_Uv?*N^eR delta 90 zcmZp1XmQx^LXau*)8sxOyU7|tJZ!Jy&LiZ@@=7Y%nT`hlY4~y gn75QjPQEJ~45i&CSBda4F-(~JQPgzvJ`p!=05q8)<^TWy diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj index f09b82b..a70d7fd 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcodeproj/project.pbxproj @@ -45,6 +45,7 @@ 6C89EB1B23772E8200CC903B /* DataContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1A23772E8200CC903B /* DataContainer.swift */; }; 6C89EB1D23772EB700CC903B /* ImageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1C23772EB700CC903B /* ImageStore.swift */; }; 6C89EB1F23772EEC00CC903B /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C89EB1E23772EEC00CC903B /* StorageType.swift */; }; + 6CA7005123D637BB006B49A8 /* PreviewCameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7005023D637BB006B49A8 /* PreviewCameraViewController.swift */; }; 6CB97272235B6B5D0052BDB2 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */; }; 6CD0F05C23771FD000D5874B /* CreatePostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD0F05B23771FD000D5874B /* CreatePostService.swift */; }; 7701BEB1233F1B1B0004C30D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7701BEB0233F1B1B0004C30D /* AppDelegate.swift */; }; @@ -109,6 +110,7 @@ 6C89EB1A23772E8200CC903B /* DataContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataContainer.swift; sourceTree = ""; }; 6C89EB1C23772EB700CC903B /* ImageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageStore.swift; sourceTree = ""; }; 6C89EB1E23772EEC00CC903B /* StorageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageType.swift; sourceTree = ""; }; + 6CA7005023D637BB006B49A8 /* PreviewCameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewCameraViewController.swift; sourceTree = ""; }; 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; 6CD0F05B23771FD000D5874B /* CreatePostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatePostService.swift; sourceTree = ""; }; 7701BEAD233F1B1B0004C30D /* Fakestagram-Xcode10.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Fakestagram-Xcode10.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -162,6 +164,7 @@ 6C6C3ABC23A600BA00D044AA /* PostViewController.swift */, 6CB97271235B6B5D0052BDB2 /* CameraViewController.swift */, 6C57E1A723A9936A00AB050C /* CommentViewController.swift */, + 6CA7005023D637BB006B49A8 /* PreviewCameraViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -511,6 +514,7 @@ 6C1DC81D2351666C001E8065 /* CodableSerializer.swift in Sources */, 6C5F57952348203100488E96 /* Credentials.swift in Sources */, 6C1DC82C23523BB9001E8065 /* ShowPostViewController.swift in Sources */, + 6CA7005123D637BB006B49A8 /* PreviewCameraViewController.swift in Sources */, 6C1151B123899CF40047F423 /* IndexService.swift in Sources */, 6C5656592358DBB800460C1E /* Like.swift in Sources */, 6C1DC80E2351656A001E8065 /* Post.swift in Sources */, diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate b/Fakestagram-Xcode10/Fakestagram-Xcode10.xcworkspace/xcuserdata/carlosmn.xcuserdatad/UserInterfaceState.xcuserstate index bbed0fe8b9f70e10b2246975d45d158b9fbd1fd1..cac3fbe27174873ae5735dcc02e713ecaf95b234 100644 GIT binary patch literal 131372 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 B9Mu2- literal 129048 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

~ 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 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -195,7 +261,7 @@ - + @@ -225,6 +291,8 @@ + + diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CommentService.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CommentService.swift index 43713d5..62143a0 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CommentService.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Services/CommentService.swift @@ -16,7 +16,7 @@ var postID = "" class CommentService{ - func call(success: @escaping (Any?) -> Void, withAction action: LikeServiceAction){ + func call(success: @escaping (Any?) -> Void, withAction action: CommentServiceAction){ guard !postID.isEmpty else { success(nil) return diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift index d00e044..c3dc2e0 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/CameraViewController.swift @@ -123,10 +123,9 @@ extension CameraViewController: AVCapturePhotoCaptureDelegate { debugPrint(photo.metadata) guard let data = photo.fileDataRepresentation(), let img = UIImage(data: data) else { return } - service.call(image: img, title: UUID().uuidString) { postId in - print("Successful!") - print(postId ?? -1) - } + let previewController = PreviewCameraViewController.get() + previewController.image = img + present(previewController, animated: true, completion: nil) } } diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PreviewCameraViewController.swift b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PreviewCameraViewController.swift new file mode 100644 index 0000000..a081606 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/ViewControllers/PreviewCameraViewController.swift @@ -0,0 +1,46 @@ +// +// PreviewCameraViewController.swift +// Fakestagram-Xcode10 +// +// Created by Pedro Carlos Monzalvo Navarro on 20/01/20. +// Copyright © 2020 unam. All rights reserved. +// + +import UIKit + +class PreviewCameraViewController: UIViewController { + + var image: UIImage? + let service = CreatePostService() + + @IBOutlet weak var previewImage: UIImageView! { + didSet { + previewImage.image = image + } + } + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + @IBAction func accept(_ sender: UIButton) { + guard let image = image else {return} + service.call(image: image, title: UUID().uuidString) { postId in + print("Successful!") + print(postId ?? -1) + } + self.dismiss(animated: true, completion: nil) + } + + @IBAction func cancel(_ sender: UIButton) { + self.dismiss(animated: true, completion: nil) + } + + static func get() -> PreviewCameraViewController { + let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) + let viewController = storyBoard.instantiateViewController(withIdentifier: "PreviewCameraViewController") as! PreviewCameraViewController + viewController.modalPresentationStyle = .fullScreen + return viewController + } +} From 67dc861bc0e6422618e10e95252c38e434277f3d Mon Sep 17 00:00:00 2001 From: CarlosMonzalvoN Date: Thu, 30 Jan 2020 01:13:41 -0600 Subject: [PATCH 18/18] added Comments Service (list and create) and LikeService Test --- .DS_Store | Bin 8196 -> 8196 bytes Fakestagram-Xcode10/.DS_Store | Bin 8196 -> 8196 bytes .../project.pbxproj | 8 ++- .../UserInterfaceState.xcuserstate | Bin 131372 -> 33324 bytes .../icons8-cancel-40.imageset/Contents.json | 21 ++++++ .../icons8-cancel-40.png | Bin 0 -> 1439 bytes .../icons8-checked-40.imageset/Contents.json | 21 ++++++ .../icons8-checked-40.png | Bin 0 -> 1452 bytes .../Base.lproj/Main.storyboard | 20 +++--- .../Fakestagram-Xcode10/Models/Comment.swift | 5 +- .../Fakestagram-Xcode10/Models/Post.swift | 1 + .../Services/CommentService.swift | 23 ++++--- .../CommentViewController.swift | 61 +++++++++++++++--- .../ViewControllers/PostsViewController.swift | 14 +++- .../Views/CommentTableViewCell.swift | 5 ++ .../LikeServiceTest.swift | 19 ++++++ .../Pods-Fakestagram-Xcode10.xcscheme | 13 ---- .../Pods-Fakestagram-Xcode10Tests.xcscheme | 13 ---- 18 files changed, 164 insertions(+), 60 deletions(-) create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/icons8-cancel-40.png create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/Contents.json create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/icons8-checked-40.png create mode 100644 Fakestagram-Xcode10/Fakestagram-Xcode10Tests/LikeServiceTest.swift diff --git a/.DS_Store b/.DS_Store index 574b36db37cddf5ee7f7b9ec4efffb302796d860..69a8f2033b686bd2e44349714605f48659ea3456 100644 GIT binary patch delta 21 ccmZp1XmQw(Da2uHY^tMRY;3T(P-rqQ07ljZ4*&oF delta 21 ccmZp1XmQw(Da2u9X`!QFWNf&(P-rqQ07oze7XSbN diff --git a/Fakestagram-Xcode10/.DS_Store b/Fakestagram-Xcode10/.DS_Store index d10c48ce01390658806d993087733a0b1ceb4940..4da3083201543b049227be5dcbbaff05b05fb6ab 100644 GIT binary patch delta 53 zcmV-50LuS_K!iZB=n(>sUz3g!K9eXC3=e^lZ+BTvw9K_0RjMolZzAl0sz31 L@f9_*z7$3a7sC^b delta 53 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 literal 131372 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 B9Mu2- diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/Contents.json b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/Contents.json new file mode 100644 index 0000000..4f525d0 --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-cancel-40.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/icons8-cancel-40.png b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-cancel-40.imageset/icons8-cancel-40.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f6c8f5be3dcceaa03e0bdf279421899c802e53 GIT binary patch literal 1439 zcmV;Q1z`G#P)kpLkS zA&}bAq~D-VRVAn@MQQsL+9IkVgb*qZTp|QXDE0%Y)J9N};tM1a32kC*LgKaK%dYL+ zK45PgC$`s)Q}LH9?aZ9n`R$oAXT}5YmJ4aL7kjnwsW{v>tQ+0#&8^ik!00AIZ=c}G|IXfR!tqNaW`I{>RC9eDH%icLEIqK00w?U>nB`x7+Pj z1Zg;2HP5Do_C5|PN)@7}s~xsn}Lso}4aC%-URt;1%U&C+Z*000C*fHs*}NtQqQ z++q=a42Aww4fyEz@y}YV)*;ibUFN2fl}TqX=ww+waHhRId_EMKDsNxsnu-4YE@Nx! zZHvQU-Do0lT?llW> z4IpbU40SjhuC0iTCV^;=;@(#EPF~-DnXDpKh>kFvu~kkLTfOb z_PX8rb%0D;+c~q%)~RMNqOT7Kk4H5m(c25eks|;oTGQ6t*}2kw*t*7P= zQGmnjcBLwN?;e0GSB5)u2(Z0-SMBfK1(2kQ_M}#ekXr3w05}U!@Zf~Uvu_*6*{Z?; zyaCB(l_KVJR`p~#9AvXqKc*006{vS`t#J@nTtl@w(l5%g&t-tuEK@s&4>T^@7@|Yhm)5WQ z<9=ag=G9E8nuOBN()|5igr zpFfW*zIgH7{+l;1Y}8)yZsw;@=#K%jIV_}7-L%QXHvRHQl3*ban2UwOU+%wgo4taI$bR^O*8{8!}H>NATXIprw0y8IEJ| zT35h=0DLqWOGKkHnN(^#wzTwp)31Ox(nMch7opRgAxLr$uF)6~6lDNGGynh~%Nbdc t;<-#_DJzOoVk&j{;OMBo(XrlY{Rbh3W`qMshl~IK002ovPDHLkV1j~OuLuAD literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/Contents.json b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/Contents.json new file mode 100644 index 0000000..943fe2f --- /dev/null +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icons8-checked-40.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/icons8-checked-40.png b/Fakestagram-Xcode10/Fakestagram-Xcode10/Assets.xcassets/icons8-checked-40.imageset/icons8-checked-40.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3bb61dad2f561dfa0c9c369d71645b0e725834 GIT binary patch literal 1452 zcmV;d1ylNoP)=ekPwqV>=4`{pgnK^Au6?( zDn0NBEmSHJ65Ie)q1jX*QEru>5-Ow(Eqw*rUMtZMRq7#X14@F(!+8TKi5Fsf?W~{c z9>A+OvE#%z5$b>P?#!+~&CJg34DgDF%J;(hmNT_QTK#^8W;Sb-bP-V~3=~B)0FX>d zVmy%$qS4s27?1T#i^31r4_~;q?7$<}P8p0kV}o9+-EFs7Hxw7KMzu<{;5Ct06pwg5 z@W?wg7!pIb1Hs_A=A##df&zDO99>gIH?byTUG=*14LY?tua*ym#pM0b;X&T-YwhZl z8rwN8{?fo>SGj7FMbqMTRJzPMJ)IA1ZhS!@-su_W@`YyVuN>qaEL2yqP~nN6nhuv1 z+pg`Xa#m^>h7NONBL=b%7bdy>ZWu-~ayg4nMmrZCvf*IND^??&! zWoyO8*9>~)x4Sql?LkZf)>M%ux1-WUNa4p^t`LgA?WlA)H>$0`pY+Ne5$RjRg ze$&~lwz7{}K5@xFi&}S}xQI2b6mBdqj)CdHtk;yVtl6N}?3aORhN;T+RkBhz08pz` zP^uWG3{=rd_Eo{jNF{BNfeJzluM!RbXa#MMfrOAn^)IWjV2jNKLS_H3DFhAx2t_e6 zaIv@=s}oiYi!Ij7$V|A=JaB1H0FWdpnyaEwWsp%8O%Yty>NI2~+=zb^o;-0+N?^NYgwGVuE03-=yB^$slMCUY@`!U4cT-aGWo zhoAQVFUBAMghHV|LSfOZQ)?FeMUxtn!1JyzM1rE242t6I)UiBI_=Cdv`=i54o)d`6=Hco*xp#ncEY5;@s?cuAso#`QYo*&Q*H-0ftt& z7!|WhL5NX7h#CMAk`zuzQXm|OOowC9ZvRa1M(W-AzsrBz)GM}Ac(ICW literal 0 HcmV?d00001 diff --git a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard index 13c0ecf..ac5f745 100644 --- a/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard +++ b/Fakestagram-Xcode10/Fakestagram-Xcode10/Base.lproj/Main.storyboard @@ -141,23 +141,23 @@