Skip to content

Commit

Permalink
QR Code Scanner MVP (#575)
Browse files Browse the repository at this point in the history
* Transferred work to this branch

* added in mentor scanner

* fix swiftlint error

* fixed endpoint so staff buttons show up

* fixed appearance of staff buttons

* make it so qr code view controller isnt dismissed after scanning, need to extensively test

* fixed some ui for ipad and changed home countdown time

* fixed which staff events show up in staff button view controller

* added itemName in return value of points shop scanner to display to user

* fixed qr code scanner alerts, need to test

* fixed self check in

* misc fix: added pro attribute to event

* added staff shifts to schedule page

* changed error message for attendee scan

* finished staff shifts schedule view

* Wrap up QR scanner + UI fixes

* Updated food wave

* add dietary restrictions to alert message

* fixed up size of home button and centered profile img more on the card
  • Loading branch information
s0phialiu authored Feb 18, 2024
1 parent 7bd4881 commit b94905b
Show file tree
Hide file tree
Showing 83 changed files with 1,513 additions and 138 deletions.
8 changes: 8 additions & 0 deletions HIAPI/Models/Event.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public struct StaffEvent: Codable {
case isAsync
case isPrivate
case displayOnStaffCheckin
case isStaff
case mapImageUrl
}

public var id: String
Expand All @@ -61,6 +63,8 @@ public struct StaffEvent: Codable {
public let isAsync: Bool
public let isPrivate: Bool?
public let displayOnStaffCheckin: Bool?
public let isStaff: Bool
public let mapImageUrl: String?
}


Expand All @@ -77,6 +81,8 @@ public struct Event: Codable {
case points
case isAsync
case mapImageUrl
case displayOnStaffCheckIn
case isPro
}

public let id: String
Expand All @@ -91,6 +97,8 @@ public struct Event: Codable {
public let points: Int
public let isAsync: Bool
public let mapImageUrl: String?
public let displayOnStaffCheckIn: Bool?
public let isPro: Bool?
}

public struct Location: Codable {
Expand Down
6 changes: 6 additions & 0 deletions HIAPI/Models/Item.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,9 @@ public struct Item: Codable {
public let imageURL: String

}

public struct RedeemItem: Codable, APIReturnable {
public let itemName: String? // Return itemName upon success
public let success: Bool
public let error: String?
}
2 changes: 1 addition & 1 deletion HIAPI/Models/Mentor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ import Foundation
import APIManager

public struct MentorAttendanceContainer: Codable, APIReturnable {
public let status: String
public let status: String?
}
4 changes: 2 additions & 2 deletions HIAPI/Models/Profile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public struct Profile: Codable, APIReturnable {
case userId
case displayName
case points
//case foodWave
case foodWave
case discordTag
case avatarUrl
case coins
Expand All @@ -37,7 +37,7 @@ public struct Profile: Codable, APIReturnable {
public let userId: String
public let displayName: String
public let points: Int
//public let foodWave: Int
public let foodWave: Int
public let discordTag: String
public let avatarUrl: String
public let coins: Int
Expand Down
13 changes: 8 additions & 5 deletions HIAPI/Models/Staff.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ public struct Staff: Codable {
case isPrivate
case displayOnStaffCheckIn
}
public let isPro: String
public let isPro: Bool
public let eventId: String
public let isStaff: Bool
public let name: Int
public let name: String
public let description: String
public let startTime: Date
public let endTime: Date
Expand All @@ -55,14 +55,17 @@ public struct Staff: Codable {
public let isPrivate: Bool
public let displayOnStaffCheckIn: Bool


}

public struct UserAttendanceContainer: Codable, APIReturnable {
internal enum CodingKeys: String, CodingKey {
case sucess
case success
case error
case dietaryRestrictions
}
public let sucess: Bool
public let success: Bool
public let error: String?
public let dietaryRestrictions: [String]?
}

public struct StaffAttendanceContainer: Codable, APIReturnable {
Expand Down
5 changes: 5 additions & 0 deletions HIAPI/Models/User.swift
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,8 @@ public struct FollowStatus: Codable, APIReturnable {
public let userId: String
public let following: [String]
}

public struct UserCheckInStatus: Codable, APIReturnable {
public let status: String?
public let points: Int?
}
4 changes: 2 additions & 2 deletions HIAPI/Services/EventService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ public class EventService: BaseService {
return APIRequest<Attendance>(service: self, endpoint: "staff/attendance/", body: body, headers: headers, method: .POST)
}

public static func getStaffCheckInEvents(authToken: String) -> APIRequest<StaffEventContainer> {
public static func getStaffCheckInEvents(authToken: String) -> APIRequest<EventContainer> {
var header = HTTPHeaders()
header["Authorization"] = authToken
return APIRequest<StaffEventContainer>(service: self, endpoint: "event/filter/?displayOnStaffCheckin=true", headers: header, method: .GET)
return APIRequest<EventContainer>(service: self, endpoint: "event/", headers: header, method: .GET)
}

public static func create(event: Event) -> APIRequest<EventContainer> {
Expand Down
10 changes: 10 additions & 0 deletions HIAPI/Services/ShopService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,14 @@ public final class ShopService: BaseService {
public static func getAllItems() -> APIRequest<ItemContainer> {
return APIRequest<ItemContainer>(service: self, endpoint: "shop/", headers: headers, method: .GET)
}

public static func redeemPrize(itemId: String, itemInstance: String, userToken: String) -> APIRequest<RedeemItem> {
let jsonBody: [String: Any] = [
"itemId": itemId,
"instance": itemInstance
]
let headers: HTTPParameters = ["Authorization": userToken]

return APIRequest<RedeemItem>(service: self, endpoint: "shop/item/buy/", body: jsonBody, headers: headers, method: .POST)
}
}
4 changes: 2 additions & 2 deletions HIAPI/Services/StaffService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ public final class StaffService: BaseService {
return APIRequest<StaffAttendanceContainer>(service: self, endpoint: "attendance/", body: body, headers: headers, method: .POST)
}

public static func recordUserAttendance(userToken: String, userId: String, eventId: String) -> APIRequest<UserAttendanceContainer> {
public static func recordUserAttendance(userToken: String, staffToken: String, eventId: String) -> APIRequest<UserAttendanceContainer> {
var body = HTTPBody()
body["userId"] = userId
body["attendeeJWT"] = userToken
body["eventId"] = eventId
var headers = HTTPHeaders()
headers["Authorization"] = userToken
Expand Down
8 changes: 8 additions & 0 deletions HIAPI/Services/UserService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,12 @@ public final class UserService: BaseService {
body["eventId"] = eventID
return APIRequest<FollowStatus>(service: self, endpoint: "unfollow/", body: body, headers: authorizationHeaders, method: .PUT)
}

public static func userScanEvent(userToken: String, eventID: String) -> APIRequest<UserCheckInStatus> {
var authorizationHeaders = HTTPHeaders()
authorizationHeaders["Authorization"] = userToken
var body = HTTPBody()
body["eventId"] = eventID
return APIRequest<UserCheckInStatus>(service: self, endpoint: "scan-event/", body: body, headers: authorizationHeaders, method: .PUT)
}
}
20 changes: 16 additions & 4 deletions HackIllinois.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,14 @@
D12B40FF2AC0B0BD001BCB05 /* HIScanAttendanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12B40FE2AC0B0BD001BCB05 /* HIScanAttendanceViewController.swift */; };
D134D30F296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D134D30E296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf */; };
D14D3AE3295FBDA200EB7995 /* HIBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */; };
D158EC312B5A2D440003D799 /* HIQRAttendeeScannerSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D158EC302B5A2D440003D799 /* HIQRAttendeeScannerSelection.swift */; };
D158EC332B5A2DFE0003D799 /* HIScanPointsShopViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D158EC322B5A2DFE0003D799 /* HIScanPointsShopViewController.swift */; };
D187BF582B781A1100AD7356 /* HIShiftCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D187BF572B781A1100AD7356 /* HIShiftCell.swift */; };
D1BBA5682B70AB940017BD13 /* Staff.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BBA5672B70AB940017BD13 /* Staff.swift */; };
D1BBA56A2B70ACCC0017BD13 /* StaffService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BBA5692B70ACCC0017BD13 /* StaffService.swift */; };
D187BF5A2B78317600AD7356 /* Mentor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D187BF592B78317600AD7356 /* Mentor.swift */; };
D187BF5C2B78318000AD7356 /* MentorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D187BF5B2B78318000AD7356 /* MentorService.swift */; };
D19D4C932B794F9100376E1B /* HIScanMentorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19D4C922B794F9100376E1B /* HIScanMentorViewController.swift */; };
D1BBA5682B70AB940017BD13 /* Staff.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BBA5672B70AB940017BD13 /* Staff.swift */; };
D1BBA56A2B70ACCC0017BD13 /* StaffService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BBA5692B70ACCC0017BD13 /* StaffService.swift */; };
D1BE81172AC8FC680042C078 /* HIAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95E3142A21FAD5B30092C22E /* HIAPI.framework */; };
D1BE81182AC8FC690042C078 /* HIAPI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 95E3142A21FAD5B30092C22E /* HIAPI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D1C5B6582B732E44000E766D /* refresh.json in Resources */ = {isa = PBXBuildFile; fileRef = D1C5B6572B732E44000E766D /* refresh.json */; };
Expand Down Expand Up @@ -352,11 +355,14 @@
D12B40FE2AC0B0BD001BCB05 /* HIScanAttendanceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIScanAttendanceViewController.swift; sourceTree = "<group>"; };
D134D30E296B3F56006EA589 /* Montserrat-VariableFont_wght.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-VariableFont_wght.ttf"; sourceTree = "<group>"; };
D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIBannerViewController.swift; sourceTree = "<group>"; };
D158EC302B5A2D440003D799 /* HIQRAttendeeScannerSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIQRAttendeeScannerSelection.swift; sourceTree = "<group>"; };
D158EC322B5A2DFE0003D799 /* HIScanPointsShopViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIScanPointsShopViewController.swift; sourceTree = "<group>"; };
D187BF572B781A1100AD7356 /* HIShiftCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIShiftCell.swift; sourceTree = "<group>"; };
D1BBA5672B70AB940017BD13 /* Staff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Staff.swift; sourceTree = "<group>"; };
D1BBA5692B70ACCC0017BD13 /* StaffService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaffService.swift; sourceTree = "<group>"; };
D187BF592B78317600AD7356 /* Mentor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mentor.swift; sourceTree = "<group>"; };
D187BF5B2B78318000AD7356 /* MentorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MentorService.swift; sourceTree = "<group>"; };
D19D4C922B794F9100376E1B /* HIScanMentorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HIScanMentorViewController.swift; sourceTree = "<group>"; };
D1BBA5672B70AB940017BD13 /* Staff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Staff.swift; sourceTree = "<group>"; };
D1BBA5692B70ACCC0017BD13 /* StaffService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaffService.swift; sourceTree = "<group>"; };
D1C5B6572B732E44000E766D /* refresh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = refresh.json; sourceTree = "<group>"; };
D1F146392B605C57004E7FC9 /* Hack_Mushroom_Loading.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Hack_Mushroom_Loading.json; sourceTree = "<group>"; };
D3A309BA221116A600CBA351 /* HackIllinois.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HackIllinois.entitlements; sourceTree = "<group>"; };
Expand Down Expand Up @@ -587,6 +593,7 @@
95C3BE2F2008B99C0008ED79 /* HIBaseViewController.swift */,
35240BD0201408DB00E0C0D8 /* HICountdownViewController.swift */,
D14D3AE2295FBDA100EB7995 /* HIBannerViewController.swift */,
D158EC302B5A2D440003D799 /* HIQRAttendeeScannerSelection.swift */,
95C18DC720096539004784B5 /* HIEventDetailViewController.swift */,
95C18DC920096539004784B5 /* HIEventListViewController.swift */,
9515E43622093E1300BCAF92 /* HIEventScannerViewController.swift */,
Expand All @@ -601,6 +608,8 @@
60EAF98A273B1AC4002CD205 /* HIScanQRCodeViewController.swift */,
D12B40FE2AC0B0BD001BCB05 /* HIScanAttendanceViewController.swift */,
E1BF5E79298B462F00A98390 /* HIStaffButtonView.swift */,
D158EC322B5A2DFE0003D799 /* HIScanPointsShopViewController.swift */,
D19D4C922B794F9100376E1B /* HIScanMentorViewController.swift */,
D128F2942ABFF93B0016D8CB /* HIQRScannerSelection.swift */,
1C9045D3274F065F00DDA74E /* HIOnboardingViewController.swift */,
3FBFA7AA27335554001FFF28 /* HILeaderboardListViewController.swift */,
Expand Down Expand Up @@ -1063,6 +1072,7 @@
95838AC921FDCB5C00BD8F71 /* Location+CoreDataProperties.swift in Sources */,
95838ACA21FDCB5C00BD8F71 /* Location+CoreDataClass.swift in Sources */,
9521A6AA20191737009059C6 /* HIAnnouncementDataSource.swift in Sources */,
D19D4C932B794F9100376E1B /* HIScanMentorViewController.swift in Sources */,
95C18DCB20096539004784B5 /* HIScheduleViewController.swift in Sources */,
ACCB199D25F56DF100F88379 /* HIInterestCell.swift in Sources */,
95CCEA1F203D6B3600E3E28C /* HINavigationController.swift in Sources */,
Expand Down Expand Up @@ -1092,6 +1102,7 @@
95A7D28A203D4F54005EAEAF /* HIButton.swift in Sources */,
95A7D28E203D4F54005EAEAF /* HIView.swift in Sources */,
3CF8DB1323B419980035ECAE /* HIProjectCell.swift in Sources */,
D158EC332B5A2DFE0003D799 /* HIScanPointsShopViewController.swift in Sources */,
ACBFE29A25EB2C9700C94732 /* HIInterest.swift in Sources */,
35B4A44F21E091BA001B3AF0 /* Logger.swift in Sources */,
9544799C200C39870005408B /* HIUser.swift in Sources */,
Expand All @@ -1102,6 +1113,7 @@
95A7D28C203D4F54005EAEAF /* HITextField.swift in Sources */,
D12B40FF2AC0B0BD001BCB05 /* HIScanAttendanceViewController.swift in Sources */,
95C18DCA20096539004784B5 /* HIEventDetailViewController.swift in Sources */,
D158EC312B5A2D440003D799 /* HIQRAttendeeScannerSelection.swift in Sources */,
9523A2902218BA2600341EBD /* HIImageView.swift in Sources */,
2FF0F9322B58D5A200017D08 /* HIPointsShopSwiftUIView.swift in Sources */,
95C18DC52009618C004784B5 /* HIHomeViewController.swift in Sources */,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions HackIllinois/Assets.xcassets/Attendee.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "Attendee.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Attendee2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Attendee3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "BookmarkSelected1x.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "BookmarkSelected2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "BookmarkSelected3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "BookmarkUnselected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "BookmarkUnselected2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "BookmarkUnselected3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
23 changes: 23 additions & 0 deletions HackIllinois/Assets.xcassets/GrayPotion.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "GrayPotion1x.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "GrayPotion2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "GrayPotion3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions HackIllinois/Assets.xcassets/GreenPotion.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "greenPotion.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "greenPotion2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "greenPotion3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "Question Mark.png",
"filename" : "Question Mark@1x.png",
"idiom" : "universal",
"scale" : "1x"
},
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions HackIllinois/Assets.xcassets/Prize Bag Sad.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "Prize Bag Sad.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Prize Bag Sad2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Prize Bag Sad3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit b94905b

Please sign in to comment.