diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2bb8fda31..795226514 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,7 +20,6 @@ jobs:
script:
- test:ios
- test:macos
- - test:parseui:all
- test:parse_live_query:all
- build:starters
- xcode15 # runs build:starters on XCode 15
diff --git a/.gitignore b/.gitignore
index c21100b94..c0e10a65a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,7 +37,6 @@ docs/
## AppCode
.idea/
-ParseUI/Vendor
# VSC
.project
diff --git a/Package.swift b/Package.swift
index 517395cc4..a90168d5b 100644
--- a/Package.swift
+++ b/Package.swift
@@ -13,7 +13,6 @@ let package = Package(
],
products: [
.library(name: "ParseObjC", targets: ["ParseCore"]),
- .library(name: "ParseUI", targets: ["ParseUI"]),
.library(name: "ParseLiveQuery", targets: ["ParseLiveQuery"])
],
dependencies: [
@@ -32,17 +31,6 @@ let package = Package(
publicHeadersPath: "Source",
cSettings: [.headerSearchPath("Internal/**")]
),
- .target(
- name: "ParseUI",
- dependencies: [
- "ParseCore"
- ],
- path: "ParseUI/ParseUI",
- exclude: ["Resources/Info-iOS.plist"],
- resources: [.process("Resources")],
- publicHeadersPath: "Source",
- cSettings: [.headerSearchPath("Internal/**")]
- ),
.target(
name: "ParseLiveQuery",
dependencies: [
diff --git a/Parse.xcworkspace/contents.xcworkspacedata b/Parse.xcworkspace/contents.xcworkspacedata
index b8be39c51..7ac2a7e28 100644
--- a/Parse.xcworkspace/contents.xcworkspacedata
+++ b/Parse.xcworkspace/contents.xcworkspacedata
@@ -7,9 +7,6 @@
-
-
diff --git a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
index 5ffabbe1b..041502135 100644
--- a/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
+++ b/ParseStarterProject/iOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
@@ -12,9 +12,6 @@ import UserNotifications
import ParseCore
-// If you want to use any of the UI components, uncomment this line
-// import ParseUI
-
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
diff --git a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject/ParseStarterProjectAppDelegate.m b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject/ParseStarterProjectAppDelegate.m
index f3bb506a7..2c4eeee6e 100644
--- a/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject/ParseStarterProjectAppDelegate.m
+++ b/ParseStarterProject/iOS/ParseStarterProject/ParseStarterProject/ParseStarterProjectAppDelegate.m
@@ -9,9 +9,6 @@
@import ParseCore;
-// If you want to use any of the UI components, uncomment this line
-// #import
-
#import "ParseStarterProjectAppDelegate.h"
#import "ParseStarterProjectViewController.h"
diff --git a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
index a3c01de2c..d05431cf9 100644
--- a/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
+++ b/ParseStarterProject/watchOS/ParseStarterProject-Swift/ParseStarterProject/AppDelegate.swift
@@ -11,9 +11,6 @@ import UIKit
import ParseCore
-// If you want to use any of the UI components, uncomment this line
-// import ParseUI
-
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
diff --git a/ParseUI/.gitignore b/ParseUI/.gitignore
deleted file mode 100644
index f4096fee4..000000000
--- a/ParseUI/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-Package.resolved
diff --git a/ParseUI/Configurations/ParseUI-iOS-Dynamic.xcconfig b/ParseUI/Configurations/ParseUI-iOS-Dynamic.xcconfig
deleted file mode 100644
index 751d6532b..000000000
--- a/ParseUI/Configurations/ParseUI-iOS-Dynamic.xcconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Copyright (c) 2015-present, Parse, LLC.
-// All rights reserved.
-//
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
-//
-
-#include "Shared/Platform/iOS.xcconfig"
-#include "Shared/Product/DynamicFramework.xcconfig"
-
-PRODUCT_NAME = ParseUI
-PRODUCT_BUNDLE_IDENTIFIER = com.parse.parseui
-
-INFOPLIST_FILE = $(SRCROOT)/ParseUI/Resources/Info-iOS.plist
diff --git a/ParseUI/Configurations/ParseUI-iOS.xcconfig b/ParseUI/Configurations/ParseUI-iOS.xcconfig
deleted file mode 100644
index 2bfaced2e..000000000
--- a/ParseUI/Configurations/ParseUI-iOS.xcconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Copyright (c) 2015-present, Parse, LLC.
-// All rights reserved.
-//
-// This source code is licensed under the BSD-style license found in the
-// LICENSE file in the root directory of this source tree. An additional grant
-// of patent rights can be found in the PATENTS file in the same directory.
-//
-
-#include "Shared/Platform/iOS.xcconfig"
-#include "Shared/Product/StaticFramework.xcconfig"
-
-PRODUCT_NAME = ParseUI
-PRODUCT_BUNDLE_IDENTIFIER = com.parse.parseui
-
-INFOPLIST_FILE = $(SRCROOT)/ParseUI/Resources/Info-iOS.plist
diff --git a/ParseUI/Configurations/Shared b/ParseUI/Configurations/Shared
deleted file mode 120000
index 657caabf0..000000000
--- a/ParseUI/Configurations/Shared
+++ /dev/null
@@ -1 +0,0 @@
-../../Vendor/xctoolchain/Configurations
\ No newline at end of file
diff --git a/ParseUI/ParseUI.xcodeproj/project.pbxproj b/ParseUI/ParseUI.xcodeproj/project.pbxproj
deleted file mode 100644
index 95eaad508..000000000
--- a/ParseUI/ParseUI.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,2111 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 54;
- objects = {
-
-/* Begin PBXBuildFile section */
- 39452DEC2AD8FC110066C2AE /* ParseObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 39452DEB2AD8FC110066C2AE /* ParseObjC */; };
- 39452DF82AD9121D0066C2AE /* ParseObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 39452DF72AD9121D0066C2AE /* ParseObjC */; };
- 39452DFA2AD9121D0066C2AE /* ParseUI in Frameworks */ = {isa = PBXBuildFile; productRef = 39452DF92AD9121D0066C2AE /* ParseUI */; };
- 39452DFD2AD914110066C2AE /* BoltsSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 39452DFC2AD914110066C2AE /* BoltsSwift */; };
- 39E22AD72AD0676700D9AE5C /* OCMock in Frameworks */ = {isa = PBXBuildFile; productRef = 39E22AD62AD0676700D9AE5C /* OCMock */; };
- 39E249A52AD1DD2E0014357C /* ParseObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 39E249A42AD1DD2E0014357C /* ParseObjC */; };
- 6B63F1602BC34E4A00F89DEE /* ParseObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 6B63F15F2BC34E4A00F89DEE /* ParseObjC */; };
- 6B63F1662BC3508200F89DEE /* ParseObjC in Frameworks */ = {isa = PBXBuildFile; productRef = 6B63F1652BC3508200F89DEE /* ParseObjC */; };
- 7C77D109292A509000C4D90E /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0C9292A507500C4D90E /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D10A292A509000C4D90E /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0CB292A507500C4D90E /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D10B292A509000C4D90E /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0CD292A507500C4D90E /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D10C292A509000C4D90E /* PFAppleUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D0292A507500C4D90E /* PFAppleUtils.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 7C77D10D292A509000C4D90E /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D3292A507500C4D90E /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D10E292A509000C4D90E /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D6292A507500C4D90E /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D10F292A509000C4D90E /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D8292A507500C4D90E /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D110292A509000C4D90E /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D9292A507500C4D90E /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D111292A509000C4D90E /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DB292A507500C4D90E /* PFResources.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D112292A509000C4D90E /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DD292A507500C4D90E /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D113292A509000C4D90E /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DE292A507500C4D90E /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D114292A509000C4D90E /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E1292A507500C4D90E /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D115292A509000C4D90E /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E2292A507500C4D90E /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D116292A509000C4D90E /* PFAppleAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E4292A507500C4D90E /* PFAppleAuthenticationProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 7C77D117292A509000C4D90E /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E6292A507500C4D90E /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D118292A509000C4D90E /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E7292A507500C4D90E /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D119292A509000C4D90E /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E8292A507500C4D90E /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D11A292A509000C4D90E /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E9292A507500C4D90E /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D11C292A509D00C4D90E /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0ED292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.h */; };
- 7C77D11D292A509D00C4D90E /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0EE292A507500C4D90E /* PFActivityIndicatorTableViewCell.h */; };
- 7C77D11E292A509D00C4D90E /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F0292A507500C4D90E /* PFImageCache.h */; };
- 7C77D11F292A509D00C4D90E /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F3292A507500C4D90E /* PFColor.h */; };
- 7C77D120292A509D00C4D90E /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F5292A507500C4D90E /* PFUIAlertView.h */; };
- 7C77D121292A509D00C4D90E /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F6292A507500C4D90E /* PFRect.h */; };
- 7C77D122292A509D00C4D90E /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F8292A507500C4D90E /* PFImage.h */; };
- 7C77D123292A509D00C4D90E /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0FB292A507500C4D90E /* PFLocalization.h */; };
- 7C77D124292A509D00C4D90E /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0FF292A507500C4D90E /* PFDismissButton.h */; };
- 7C77D125292A509D00C4D90E /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D103292A507500C4D90E /* PFTextButton.h */; };
- 7C77D126292A509D00C4D90E /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D105292A507500C4D90E /* PFPrimaryButton.h */; };
- 7C77D127292A509D00C4D90E /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D106292A507500C4D90E /* PFActionButton.h */; };
- 7C77D128292A509D00C4D90E /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D107292A507500C4D90E /* PFLoadingView.h */; };
- 7C77D150292A510400C4D90E /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0C9292A507500C4D90E /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D151292A510400C4D90E /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0CB292A507500C4D90E /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D152292A510400C4D90E /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0CD292A507500C4D90E /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D153292A510400C4D90E /* PFAppleUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D0292A507500C4D90E /* PFAppleUtils.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 7C77D154292A510400C4D90E /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D3292A507500C4D90E /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D155292A510400C4D90E /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D6292A507500C4D90E /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D156292A510400C4D90E /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D8292A507500C4D90E /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D157292A510400C4D90E /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0D9292A507500C4D90E /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D158292A510400C4D90E /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DB292A507500C4D90E /* PFResources.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D159292A510400C4D90E /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DD292A507500C4D90E /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D15A292A510400C4D90E /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0DE292A507500C4D90E /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D15B292A510400C4D90E /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E1292A507500C4D90E /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D15C292A510400C4D90E /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E2292A507500C4D90E /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D15D292A510400C4D90E /* PFAppleAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E4292A507500C4D90E /* PFAppleAuthenticationProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 7C77D15E292A510400C4D90E /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E6292A507500C4D90E /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D15F292A510400C4D90E /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E7292A507500C4D90E /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D160292A510400C4D90E /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E8292A507500C4D90E /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D161292A510400C4D90E /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0E9292A507500C4D90E /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7C77D163292A511000C4D90E /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0ED292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.h */; };
- 7C77D164292A511000C4D90E /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0EE292A507500C4D90E /* PFActivityIndicatorTableViewCell.h */; };
- 7C77D165292A511000C4D90E /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F0292A507500C4D90E /* PFImageCache.h */; };
- 7C77D166292A511000C4D90E /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F3292A507500C4D90E /* PFColor.h */; };
- 7C77D167292A511000C4D90E /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F5292A507500C4D90E /* PFUIAlertView.h */; };
- 7C77D168292A511000C4D90E /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F6292A507500C4D90E /* PFRect.h */; };
- 7C77D169292A511000C4D90E /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0F8292A507500C4D90E /* PFImage.h */; };
- 7C77D16A292A511000C4D90E /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0FB292A507500C4D90E /* PFLocalization.h */; };
- 7C77D16B292A511000C4D90E /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D0FF292A507500C4D90E /* PFDismissButton.h */; };
- 7C77D16C292A511000C4D90E /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D103292A507500C4D90E /* PFTextButton.h */; };
- 7C77D16D292A511000C4D90E /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D105292A507500C4D90E /* PFPrimaryButton.h */; };
- 7C77D16E292A511000C4D90E /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D106292A507500C4D90E /* PFActionButton.h */; };
- 7C77D16F292A511000C4D90E /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C77D107292A507500C4D90E /* PFLoadingView.h */; };
- 7C77D170292A511C00C4D90E /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CA292A507500C4D90E /* PFLogInViewController.m */; };
- 7C77D171292A511C00C4D90E /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CC292A507500C4D90E /* PFResources.m */; };
- 7C77D172292A511C00C4D90E /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CE292A507500C4D90E /* PFLogInView.m */; };
- 7C77D173292A511C00C4D90E /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CF292A507500C4D90E /* PFProductTableViewController.m */; };
- 7C77D174292A511C00C4D90E /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D1292A507500C4D90E /* PFSignUpViewController.m */; };
- 7C77D175292A511C00C4D90E /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D2292A507500C4D90E /* PFImageView.m */; };
- 7C77D176292A511C00C4D90E /* PFAppleAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D4292A507500C4D90E /* PFAppleAuthenticationProvider.m */; };
- 7C77D177292A511C00C4D90E /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D5292A507500C4D90E /* PFCollectionViewCell.m */; };
- 7C77D178292A511C00C4D90E /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D7292A507500C4D90E /* PFQueryCollectionViewController.m */; };
- 7C77D179292A511C00C4D90E /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DA292A507500C4D90E /* PFQueryTableViewController.m */; };
- 7C77D17A292A511C00C4D90E /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DC292A507500C4D90E /* PFTextField.m */; };
- 7C77D17B292A511C00C4D90E /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DF292A507500C4D90E /* PFPurchaseTableViewCell.m */; };
- 7C77D17C292A511C00C4D90E /* PFAppleUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E0292A507500C4D90E /* PFAppleUtils.m */; };
- 7C77D17D292A511C00C4D90E /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E3292A507500C4D90E /* PFTableViewCell.m */; };
- 7C77D17E292A511C00C4D90E /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E5292A507500C4D90E /* PFSignUpView.m */; };
- 7C77D17F292A511C00C4D90E /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0EC292A507500C4D90E /* PFActivityIndicatorTableViewCell.m */; };
- 7C77D180292A511C00C4D90E /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0EF292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.m */; };
- 7C77D181292A511C00C4D90E /* PFLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F1292A507500C4D90E /* PFLocalization.m */; };
- 7C77D182292A511C00C4D90E /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F4292A507500C4D90E /* PFImage.m */; };
- 7C77D183292A511C00C4D90E /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F7292A507500C4D90E /* PFUIAlertView.m */; };
- 7C77D184292A511C00C4D90E /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F9292A507500C4D90E /* PFColor.m */; };
- 7C77D185292A511C00C4D90E /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0FA292A507500C4D90E /* PFRect.m */; };
- 7C77D186292A511C00C4D90E /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0FC292A507500C4D90E /* PFImageCache.m */; };
- 7C77D187292A511C00C4D90E /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D100292A507500C4D90E /* PFTextButton.m */; };
- 7C77D188292A511C00C4D90E /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D101292A507500C4D90E /* PFPrimaryButton.m */; };
- 7C77D189292A511C00C4D90E /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D102292A507500C4D90E /* PFActionButton.m */; };
- 7C77D18A292A511C00C4D90E /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D104292A507500C4D90E /* PFDismissButton.m */; };
- 7C77D18B292A511C00C4D90E /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D108292A507500C4D90E /* PFLoadingView.m */; };
- 7C77D18C292A512300C4D90E /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CA292A507500C4D90E /* PFLogInViewController.m */; };
- 7C77D18D292A512300C4D90E /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CC292A507500C4D90E /* PFResources.m */; };
- 7C77D18E292A512300C4D90E /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CE292A507500C4D90E /* PFLogInView.m */; };
- 7C77D18F292A512300C4D90E /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0CF292A507500C4D90E /* PFProductTableViewController.m */; };
- 7C77D190292A512300C4D90E /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D1292A507500C4D90E /* PFSignUpViewController.m */; };
- 7C77D191292A512300C4D90E /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D2292A507500C4D90E /* PFImageView.m */; };
- 7C77D192292A512300C4D90E /* PFAppleAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D4292A507500C4D90E /* PFAppleAuthenticationProvider.m */; };
- 7C77D193292A512300C4D90E /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D5292A507500C4D90E /* PFCollectionViewCell.m */; };
- 7C77D194292A512300C4D90E /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0D7292A507500C4D90E /* PFQueryCollectionViewController.m */; };
- 7C77D195292A512300C4D90E /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DA292A507500C4D90E /* PFQueryTableViewController.m */; };
- 7C77D196292A512300C4D90E /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DC292A507500C4D90E /* PFTextField.m */; };
- 7C77D197292A512300C4D90E /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0DF292A507500C4D90E /* PFPurchaseTableViewCell.m */; };
- 7C77D198292A512300C4D90E /* PFAppleUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E0292A507500C4D90E /* PFAppleUtils.m */; };
- 7C77D199292A512300C4D90E /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E3292A507500C4D90E /* PFTableViewCell.m */; };
- 7C77D19A292A512300C4D90E /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0E5292A507500C4D90E /* PFSignUpView.m */; };
- 7C77D19B292A512300C4D90E /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0EC292A507500C4D90E /* PFActivityIndicatorTableViewCell.m */; };
- 7C77D19C292A512300C4D90E /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0EF292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.m */; };
- 7C77D19D292A512300C4D90E /* PFLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F1292A507500C4D90E /* PFLocalization.m */; };
- 7C77D19E292A512300C4D90E /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F4292A507500C4D90E /* PFImage.m */; };
- 7C77D19F292A512300C4D90E /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F7292A507500C4D90E /* PFUIAlertView.m */; };
- 7C77D1A0292A512300C4D90E /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0F9292A507500C4D90E /* PFColor.m */; };
- 7C77D1A1292A512300C4D90E /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0FA292A507500C4D90E /* PFRect.m */; };
- 7C77D1A2292A512300C4D90E /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D0FC292A507500C4D90E /* PFImageCache.m */; };
- 7C77D1A3292A512300C4D90E /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D100292A507500C4D90E /* PFTextButton.m */; };
- 7C77D1A4292A512300C4D90E /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D101292A507500C4D90E /* PFPrimaryButton.m */; };
- 7C77D1A5292A512300C4D90E /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D102292A507500C4D90E /* PFActionButton.m */; };
- 7C77D1A6292A512300C4D90E /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D104292A507500C4D90E /* PFDismissButton.m */; };
- 7C77D1A7292A512300C4D90E /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C77D108292A507500C4D90E /* PFLoadingView.m */; };
- 7C77D221292A575B00C4D90E /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C77D220292A575B00C4D90E /* Social.framework */; };
- 7C77D222292A580800C4D90E /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C77D220292A575B00C4D90E /* Social.framework */; };
- 8129E5F51A9CB067006752BC /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA71A1AB37500FD6EED /* Images.xcassets */; };
- 8129E5F71A9CB067006752BC /* 0.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA91A1AB37500FD6EED /* 0.png */; };
- 8129E5F81A9CB067006752BC /* 1.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FAA1A1AB37500FD6EED /* 1.png */; };
- 8129E5F91A9CB067006752BC /* 2.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FAB1A1AB37500FD6EED /* 2.png */; };
- 8129E5FA1A9CB067006752BC /* SimpleQueryCollectionStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 812E5C001A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard */; };
- 8129E5FB1A9CB067006752BC /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA81A1AB37500FD6EED /* Icon.png */; };
- 8129E6091A9CB1BE006752BC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8129E6081A9CB1BE006752BC /* AppDelegate.swift */; };
- 8129E63A1A9CB320006752BC /* UIDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8129E6391A9CB320006752BC /* UIDemoViewController.swift */; };
- 812E5C011A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 812E5C001A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard */; };
- 812E5C041A7A8EFB000FBDE1 /* StoryboardCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 812E5C031A7A8EFB000FBDE1 /* StoryboardCollectionViewController.m */; };
- 814155B11A9CD9CA002D9683 /* SimpleQueryTableStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 814155B01A9CD9CA002D9683 /* SimpleQueryTableStoryboard.storyboard */; };
- 81472FB11A1AB37500FD6EED /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F8E1A1AB37500FD6EED /* AppDelegate.m */; };
- 81472FB21A1AB37500FD6EED /* PFUIDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F901A1AB37500FD6EED /* PFUIDemoViewController.m */; };
- 81472FB31A1AB37500FD6EED /* CustomSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F921A1AB37500FD6EED /* CustomSignUpViewController.m */; };
- 81472FB41A1AB37500FD6EED /* CustomLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F951A1AB37500FD6EED /* CustomLogInViewController.m */; };
- 81472FB51A1AB37500FD6EED /* SimpleTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F981A1AB37500FD6EED /* SimpleTableViewController.m */; };
- 81472FB61A1AB37500FD6EED /* PaginatedTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F9A1A1AB37500FD6EED /* PaginatedTableViewController.m */; };
- 81472FB71A1AB37500FD6EED /* SectionedTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F9C1A1AB37500FD6EED /* SectionedTableViewController.m */; };
- 81472FB81A1AB37500FD6EED /* SubtitleImageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472F9E1A1AB37500FD6EED /* SubtitleImageTableViewController.m */; };
- 81472FB91A1AB37500FD6EED /* CustomProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472FA01A1AB37500FD6EED /* CustomProductTableViewController.m */; };
- 81472FBB1A1AB37500FD6EED /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 81472FA51A1AB37500FD6EED /* main.m */; };
- 81472FBC1A1AB37500FD6EED /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA71A1AB37500FD6EED /* Images.xcassets */; };
- 81472FBD1A1AB37500FD6EED /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA81A1AB37500FD6EED /* Icon.png */; };
- 81472FBE1A1AB37500FD6EED /* 0.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FA91A1AB37500FD6EED /* 0.png */; };
- 81472FBF1A1AB37500FD6EED /* 1.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FAA1A1AB37500FD6EED /* 1.png */; };
- 81472FC01A1AB37500FD6EED /* 2.png in Resources */ = {isa = PBXBuildFile; fileRef = 81472FAB1A1AB37500FD6EED /* 2.png */; };
- 819A4B3A1A6808EA00D01241 /* SubtitleImageCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 819A4B391A6808EA00D01241 /* SubtitleImageCollectionViewController.m */; };
- 81C5993F1A64346000F574E8 /* SimpleCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C5993E1A64346000F574E8 /* SimpleCollectionViewController.m */; };
- 81C599421A6454C900F574E8 /* PaginatedCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C599411A6454C900F574E8 /* PaginatedCollectionViewController.m */; };
- 81C599491A64636200F574E8 /* SectionedCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C599481A64636200F574E8 /* SectionedCollectionViewController.m */; };
- 81C8D9BD1A890BCA007B8DCF /* StoryboardTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C8D9BC1A890BCA007B8DCF /* StoryboardTableViewController.m */; };
- 81FC6B4A1A9D1ADB00104E45 /* CustomLogInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B3A1A9D1ADB00104E45 /* CustomLogInViewController.swift */; };
- 81FC6B561A9D1ADB00104E45 /* CustomSignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B491A9D1ADB00104E45 /* CustomSignUpViewController.swift */; };
- 81FC6B5F1A9D1BFC00104E45 /* PaginatedTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B591A9D1BFC00104E45 /* PaginatedTableViewController.swift */; };
- 81FC6B601A9D1BFC00104E45 /* SectionedTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B5A1A9D1BFC00104E45 /* SectionedTableViewController.swift */; };
- 81FC6B611A9D1BFC00104E45 /* SimpleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B5B1A9D1BFC00104E45 /* SimpleTableViewController.swift */; };
- 81FC6B621A9D1BFC00104E45 /* StoryboardTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B5C1A9D1BFC00104E45 /* StoryboardTableViewController.swift */; };
- 81FC6B631A9D1BFC00104E45 /* SubtitleImageTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B5D1A9D1BFC00104E45 /* SubtitleImageTableViewController.swift */; };
- 81FC6B651A9D1C2000104E45 /* SimpleQueryTableStoryboard-Swift.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81FC6B641A9D1C2000104E45 /* SimpleQueryTableStoryboard-Swift.storyboard */; };
- 81FC6B6C1A9D1CE900104E45 /* PaginatedCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B671A9D1CE900104E45 /* PaginatedCollectionViewController.swift */; };
- 81FC6B6D1A9D1CE900104E45 /* SectionedCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B681A9D1CE900104E45 /* SectionedCollectionViewController.swift */; };
- 81FC6B6E1A9D1CE900104E45 /* SimpleCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B691A9D1CE900104E45 /* SimpleCollectionViewController.swift */; };
- 81FC6B6F1A9D1CE900104E45 /* StoryboardCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B6A1A9D1CE900104E45 /* StoryboardCollectionViewController.swift */; };
- 81FC6B701A9D1CE900104E45 /* SubtitleImageCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B6B1A9D1CE900104E45 /* SubtitleImageCollectionViewController.swift */; };
- 81FC6B721A9D1CFD00104E45 /* SimpleQueryCollectionStoryboard-Swift.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81FC6B711A9D1CFD00104E45 /* SimpleQueryCollectionStoryboard-Swift.storyboard */; };
- 81FC6B751A9D1D4700104E45 /* CustomProductTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FC6B741A9D1D4700104E45 /* CustomProductTableViewController.swift */; };
- BCA5CC8523BFCFB8003BC0A0 /* SignInWithAppleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCBE8CB23BFB89D0044A79C /* SignInWithAppleTests.m */; };
- F57F3D231B0C03D40087F60B /* DeletionCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F57F3D201B0C03C90087F60B /* DeletionCollectionViewController.m */; };
- F57F3D241B0C03DB0087F60B /* DeletionTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F57F3D1C1B0C03BA0087F60B /* DeletionTableViewController.m */; };
- F57F3D271B0C050C0087F60B /* DeletionTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F57F3D251B0C04EF0087F60B /* DeletionTableViewController.swift */; };
- F57F3D291B0C05280087F60B /* DeletionCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F57F3D281B0C05280087F60B /* DeletionCollectionViewController.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 39452DF12AD910490066C2AE /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 81472F661A1AB33800FD6EED;
- remoteInfo = ParseUIDemo;
- };
- 39452DF52AD911740066C2AE /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4A9A9496200D0329005D8F4B;
- remoteInfo = ParseUI;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 39E2499F2AD1DD160014357C /* Parse-SDK-iOS-OSX */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "Parse-SDK-iOS-OSX"; path = ..; sourceTree = ""; };
- 4A9A947E200D0226005D8F4B /* convert_images.rb */ = {isa = PBXFileReference; lastKnownFileType = text.script.ruby; path = convert_images.rb; sourceTree = ""; };
- 4A9A9480200D02CE005D8F4B /* ParseUI-iOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "ParseUI-iOS.xcconfig"; sourceTree = ""; };
- 4A9A9482200D02CE005D8F4B /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; };
- 4A9A9484200D02CE005D8F4B /* macOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = macOS.xcconfig; sourceTree = ""; };
- 4A9A9485200D02CE005D8F4B /* tvOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = tvOS.xcconfig; sourceTree = ""; };
- 4A9A9486200D02CE005D8F4B /* iOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iOS.xcconfig; sourceTree = ""; };
- 4A9A9487200D02CE005D8F4B /* watchOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = watchOS.xcconfig; sourceTree = ""; };
- 4A9A9489200D02CE005D8F4B /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = ""; };
- 4A9A948A200D02CE005D8F4B /* DynamicFramework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DynamicFramework.xcconfig; sourceTree = ""; };
- 4A9A948B200D02CE005D8F4B /* StaticFramework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticFramework.xcconfig; sourceTree = ""; };
- 4A9A948C200D02CE005D8F4B /* LogicTests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = LogicTests.xcconfig; sourceTree = ""; };
- 4A9A948E200D02CE005D8F4B /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
- 4A9A948F200D02CE005D8F4B /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
- 4A9A9490200D02CE005D8F4B /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
- 4A9A9491200D02CE005D8F4B /* ParseUI-iOS-Dynamic.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "ParseUI-iOS-Dynamic.xcconfig"; sourceTree = ""; };
- 7C77D0B4292A507500C4D90E /* apple_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apple_icon@3x.png"; sourceTree = ""; };
- 7C77D0B6292A507500C4D90E /* parse_logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = parse_logo.png; sourceTree = ""; };
- 7C77D0B8292A507500C4D90E /* apple_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apple_icon@2x.png"; sourceTree = ""; };
- 7C77D0BA292A507500C4D90E /* parse_logo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "parse_logo@2x.png"; sourceTree = ""; };
- 7C77D0BB292A507500C4D90E /* parse_logo@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "parse_logo@3x.png"; sourceTree = ""; };
- 7C77D0BC292A507500C4D90E /* apple_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = apple_icon.png; sourceTree = ""; };
- 7C77D0BF292A507500C4D90E /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = ""; };
- 7C77D0C2292A507500C4D90E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/ParseUI.strings; sourceTree = ""; };
- 7C77D0C3292A507500C4D90E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/ParseUI.strings; sourceTree = ""; };
- 7C77D0C4292A507500C4D90E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ParseUI.strings; sourceTree = ""; };
- 7C77D0C5292A507500C4D90E /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/ParseUI.strings; sourceTree = ""; };
- 7C77D0C6292A507500C4D90E /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/ParseUI.strings"; sourceTree = ""; };
- 7C77D0C7292A507500C4D90E /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ParseUI.strings; sourceTree = ""; };
- 7C77D0C9292A507500C4D90E /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFPurchaseTableViewCell.h; sourceTree = ""; };
- 7C77D0CA292A507500C4D90E /* PFLogInViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFLogInViewController.m; sourceTree = ""; };
- 7C77D0CB292A507500C4D90E /* PFTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFTextField.h; sourceTree = ""; };
- 7C77D0CC292A507500C4D90E /* PFResources.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFResources.m; sourceTree = ""; };
- 7C77D0CD292A507500C4D90E /* PFQueryTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFQueryTableViewController.h; sourceTree = ""; };
- 7C77D0CE292A507500C4D90E /* PFLogInView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFLogInView.m; sourceTree = ""; };
- 7C77D0CF292A507500C4D90E /* PFProductTableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFProductTableViewController.m; sourceTree = ""; };
- 7C77D0D0292A507500C4D90E /* PFAppleUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFAppleUtils.h; sourceTree = ""; };
- 7C77D0D1292A507500C4D90E /* PFSignUpViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFSignUpViewController.m; sourceTree = ""; };
- 7C77D0D2292A507500C4D90E /* PFImageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFImageView.m; sourceTree = ""; };
- 7C77D0D3292A507500C4D90E /* PFSignUpView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFSignUpView.h; sourceTree = ""; };
- 7C77D0D4292A507500C4D90E /* PFAppleAuthenticationProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFAppleAuthenticationProvider.m; sourceTree = ""; };
- 7C77D0D5292A507500C4D90E /* PFCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFCollectionViewCell.m; sourceTree = ""; };
- 7C77D0D6292A507500C4D90E /* PFTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFTableViewCell.h; sourceTree = ""; };
- 7C77D0D7292A507500C4D90E /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFQueryCollectionViewController.m; sourceTree = ""; };
- 7C77D0D8292A507500C4D90E /* ParseUIConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ParseUIConstants.h; sourceTree = ""; };
- 7C77D0D9292A507500C4D90E /* PFLogInView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFLogInView.h; sourceTree = ""; };
- 7C77D0DA292A507500C4D90E /* PFQueryTableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFQueryTableViewController.m; sourceTree = ""; };
- 7C77D0DB292A507500C4D90E /* PFResources.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFResources.h; sourceTree = ""; };
- 7C77D0DC292A507500C4D90E /* PFTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFTextField.m; sourceTree = ""; };
- 7C77D0DD292A507500C4D90E /* PFLogInViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFLogInViewController.h; sourceTree = ""; };
- 7C77D0DE292A507500C4D90E /* ParseUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ParseUI.h; sourceTree = ""; };
- 7C77D0DF292A507500C4D90E /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFPurchaseTableViewCell.m; sourceTree = ""; };
- 7C77D0E0292A507500C4D90E /* PFAppleUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFAppleUtils.m; sourceTree = ""; };
- 7C77D0E1292A507500C4D90E /* PFProductTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFProductTableViewController.h; sourceTree = ""; };
- 7C77D0E2292A507500C4D90E /* PFCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFCollectionViewCell.h; sourceTree = ""; };
- 7C77D0E3292A507500C4D90E /* PFTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFTableViewCell.m; sourceTree = ""; };
- 7C77D0E4292A507500C4D90E /* PFAppleAuthenticationProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFAppleAuthenticationProvider.h; sourceTree = ""; };
- 7C77D0E5292A507500C4D90E /* PFSignUpView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFSignUpView.m; sourceTree = ""; };
- 7C77D0E6292A507500C4D90E /* PFImageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFImageView.h; sourceTree = ""; };
- 7C77D0E7292A507500C4D90E /* PFSignUpViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFSignUpViewController.h; sourceTree = ""; };
- 7C77D0E8292A507500C4D90E /* PFLogInView_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFLogInView_Private.h; sourceTree = ""; };
- 7C77D0E9292A507500C4D90E /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFQueryCollectionViewController.h; sourceTree = ""; };
- 7C77D0EC292A507500C4D90E /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFActivityIndicatorTableViewCell.m; sourceTree = ""; };
- 7C77D0ED292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; };
- 7C77D0EE292A507500C4D90E /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFActivityIndicatorTableViewCell.h; sourceTree = ""; };
- 7C77D0EF292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; };
- 7C77D0F0292A507500C4D90E /* PFImageCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFImageCache.h; sourceTree = ""; };
- 7C77D0F1292A507500C4D90E /* PFLocalization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFLocalization.m; sourceTree = ""; };
- 7C77D0F3292A507500C4D90E /* PFColor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFColor.h; sourceTree = ""; };
- 7C77D0F4292A507500C4D90E /* PFImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFImage.m; sourceTree = ""; };
- 7C77D0F5292A507500C4D90E /* PFUIAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFUIAlertView.h; sourceTree = ""; };
- 7C77D0F6292A507500C4D90E /* PFRect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFRect.h; sourceTree = ""; };
- 7C77D0F7292A507500C4D90E /* PFUIAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFUIAlertView.m; sourceTree = ""; };
- 7C77D0F8292A507500C4D90E /* PFImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFImage.h; sourceTree = ""; };
- 7C77D0F9292A507500C4D90E /* PFColor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFColor.m; sourceTree = ""; };
- 7C77D0FA292A507500C4D90E /* PFRect.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFRect.m; sourceTree = ""; };
- 7C77D0FB292A507500C4D90E /* PFLocalization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFLocalization.h; sourceTree = ""; };
- 7C77D0FC292A507500C4D90E /* PFImageCache.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFImageCache.m; sourceTree = ""; };
- 7C77D0FF292A507500C4D90E /* PFDismissButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFDismissButton.h; sourceTree = ""; };
- 7C77D100292A507500C4D90E /* PFTextButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFTextButton.m; sourceTree = ""; };
- 7C77D101292A507500C4D90E /* PFPrimaryButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFPrimaryButton.m; sourceTree = ""; };
- 7C77D102292A507500C4D90E /* PFActionButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFActionButton.m; sourceTree = ""; };
- 7C77D103292A507500C4D90E /* PFTextButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFTextButton.h; sourceTree = ""; };
- 7C77D104292A507500C4D90E /* PFDismissButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFDismissButton.m; sourceTree = ""; };
- 7C77D105292A507500C4D90E /* PFPrimaryButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFPrimaryButton.h; sourceTree = ""; };
- 7C77D106292A507500C4D90E /* PFActionButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFActionButton.h; sourceTree = ""; };
- 7C77D107292A507500C4D90E /* PFLoadingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PFLoadingView.h; sourceTree = ""; };
- 7C77D108292A507500C4D90E /* PFLoadingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PFLoadingView.m; sourceTree = ""; };
- 7C77D162292A510400C4D90E /* ParseUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 7C77D21F292A56F600C4D90E /* ParseUIDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ParseUIDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 7C77D220292A575B00C4D90E /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };
- 7C77D22D292A604700C4D90E /* ParseUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 7C77D22F292A604700C4D90E /* ParseUIDemo-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ParseUIDemo-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 7C77D230292A604700C4D90E /* SignInWithAppleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SignInWithAppleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 8129E6081A9CB1BE006752BC /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 8129E6391A9CB320006752BC /* UIDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIDemoViewController.swift; sourceTree = ""; };
- 812E5C001A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SimpleQueryCollectionStoryboard.storyboard; path = ../../../Resources/SimpleQueryCollectionStoryboard.storyboard; sourceTree = ""; };
- 812E5C021A7A8EFB000FBDE1 /* StoryboardCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StoryboardCollectionViewController.h; sourceTree = ""; };
- 812E5C031A7A8EFB000FBDE1 /* StoryboardCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StoryboardCollectionViewController.m; sourceTree = ""; };
- 814155B01A9CD9CA002D9683 /* SimpleQueryTableStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SimpleQueryTableStoryboard.storyboard; path = ParseUIDemo/Resources/SimpleQueryTableStoryboard.storyboard; sourceTree = SOURCE_ROOT; };
- 81472F8D1A1AB37500FD6EED /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
- 81472F8E1A1AB37500FD6EED /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
- 81472F8F1A1AB37500FD6EED /* PFUIDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PFUIDemoViewController.h; sourceTree = ""; };
- 81472F901A1AB37500FD6EED /* PFUIDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PFUIDemoViewController.m; sourceTree = ""; };
- 81472F911A1AB37500FD6EED /* CustomSignUpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomSignUpViewController.h; sourceTree = ""; };
- 81472F921A1AB37500FD6EED /* CustomSignUpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomSignUpViewController.m; sourceTree = ""; };
- 81472F941A1AB37500FD6EED /* CustomLogInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomLogInViewController.h; sourceTree = ""; };
- 81472F951A1AB37500FD6EED /* CustomLogInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomLogInViewController.m; sourceTree = ""; };
- 81472F971A1AB37500FD6EED /* SimpleTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleTableViewController.h; sourceTree = ""; };
- 81472F981A1AB37500FD6EED /* SimpleTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleTableViewController.m; sourceTree = ""; };
- 81472F991A1AB37500FD6EED /* PaginatedTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaginatedTableViewController.h; sourceTree = ""; };
- 81472F9A1A1AB37500FD6EED /* PaginatedTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaginatedTableViewController.m; sourceTree = ""; };
- 81472F9B1A1AB37500FD6EED /* SectionedTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SectionedTableViewController.h; sourceTree = ""; };
- 81472F9C1A1AB37500FD6EED /* SectionedTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SectionedTableViewController.m; sourceTree = ""; };
- 81472F9D1A1AB37500FD6EED /* SubtitleImageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubtitleImageTableViewController.h; sourceTree = ""; };
- 81472F9E1A1AB37500FD6EED /* SubtitleImageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubtitleImageTableViewController.m; sourceTree = ""; };
- 81472F9F1A1AB37500FD6EED /* CustomProductTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomProductTableViewController.h; sourceTree = ""; };
- 81472FA01A1AB37500FD6EED /* CustomProductTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomProductTableViewController.m; sourceTree = ""; };
- 81472FA41A1AB37500FD6EED /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 81472FA51A1AB37500FD6EED /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
- 81472FA71A1AB37500FD6EED /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../Images.xcassets; sourceTree = ""; };
- 81472FA81A1AB37500FD6EED /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; };
- 81472FA91A1AB37500FD6EED /* 0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 0.png; sourceTree = ""; };
- 81472FAA1A1AB37500FD6EED /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; };
- 81472FAB1A1AB37500FD6EED /* 2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 2.png; sourceTree = ""; };
- 819A4B381A6808EA00D01241 /* SubtitleImageCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubtitleImageCollectionViewController.h; sourceTree = ""; };
- 819A4B391A6808EA00D01241 /* SubtitleImageCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubtitleImageCollectionViewController.m; sourceTree = ""; };
- 81C5993D1A64346000F574E8 /* SimpleCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCollectionViewController.h; sourceTree = ""; };
- 81C5993E1A64346000F574E8 /* SimpleCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCollectionViewController.m; sourceTree = ""; };
- 81C599401A6454C900F574E8 /* PaginatedCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaginatedCollectionViewController.h; sourceTree = ""; };
- 81C599411A6454C900F574E8 /* PaginatedCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaginatedCollectionViewController.m; sourceTree = ""; };
- 81C599471A64636200F574E8 /* SectionedCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SectionedCollectionViewController.h; sourceTree = ""; };
- 81C599481A64636200F574E8 /* SectionedCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SectionedCollectionViewController.m; sourceTree = ""; };
- 81C8D9BB1A890BCA007B8DCF /* StoryboardTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StoryboardTableViewController.h; sourceTree = ""; };
- 81C8D9BC1A890BCA007B8DCF /* StoryboardTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StoryboardTableViewController.m; sourceTree = ""; };
- 81FC6B3A1A9D1ADB00104E45 /* CustomLogInViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomLogInViewController.swift; sourceTree = ""; };
- 81FC6B491A9D1ADB00104E45 /* CustomSignUpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomSignUpViewController.swift; sourceTree = ""; };
- 81FC6B591A9D1BFC00104E45 /* PaginatedTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaginatedTableViewController.swift; sourceTree = ""; };
- 81FC6B5A1A9D1BFC00104E45 /* SectionedTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionedTableViewController.swift; sourceTree = ""; };
- 81FC6B5B1A9D1BFC00104E45 /* SimpleTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleTableViewController.swift; sourceTree = ""; };
- 81FC6B5C1A9D1BFC00104E45 /* StoryboardTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardTableViewController.swift; sourceTree = ""; };
- 81FC6B5D1A9D1BFC00104E45 /* SubtitleImageTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubtitleImageTableViewController.swift; sourceTree = ""; };
- 81FC6B641A9D1C2000104E45 /* SimpleQueryTableStoryboard-Swift.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = "SimpleQueryTableStoryboard-Swift.storyboard"; path = "ParseUIDemo/Swift/Resources/SimpleQueryTableStoryboard-Swift.storyboard"; sourceTree = SOURCE_ROOT; };
- 81FC6B671A9D1CE900104E45 /* PaginatedCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaginatedCollectionViewController.swift; sourceTree = ""; };
- 81FC6B681A9D1CE900104E45 /* SectionedCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionedCollectionViewController.swift; sourceTree = ""; };
- 81FC6B691A9D1CE900104E45 /* SimpleCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleCollectionViewController.swift; sourceTree = ""; };
- 81FC6B6A1A9D1CE900104E45 /* StoryboardCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardCollectionViewController.swift; sourceTree = ""; };
- 81FC6B6B1A9D1CE900104E45 /* SubtitleImageCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubtitleImageCollectionViewController.swift; sourceTree = ""; };
- 81FC6B711A9D1CFD00104E45 /* SimpleQueryCollectionStoryboard-Swift.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = "SimpleQueryCollectionStoryboard-Swift.storyboard"; path = "ParseUIDemo/Swift/Resources/SimpleQueryCollectionStoryboard-Swift.storyboard"; sourceTree = SOURCE_ROOT; };
- 81FC6B741A9D1D4700104E45 /* CustomProductTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomProductTableViewController.swift; sourceTree = ""; };
- BC32E14523ABAE04009BDFCD /* ParseUIDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = ParseUIDemo.entitlements; path = ParseUIDemo/ParseUIDemo.entitlements; sourceTree = ""; };
- BCCBE8CB23BFB89D0044A79C /* SignInWithAppleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SignInWithAppleTests.m; sourceTree = ""; };
- BCCBE8CD23BFB89D0044A79C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- F57F3D1B1B0C03BA0087F60B /* DeletionTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeletionTableViewController.h; sourceTree = ""; };
- F57F3D1C1B0C03BA0087F60B /* DeletionTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeletionTableViewController.m; sourceTree = ""; };
- F57F3D1F1B0C03C90087F60B /* DeletionCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeletionCollectionViewController.h; sourceTree = ""; };
- F57F3D201B0C03C90087F60B /* DeletionCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeletionCollectionViewController.m; sourceTree = ""; };
- F57F3D251B0C04EF0087F60B /* DeletionTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeletionTableViewController.swift; sourceTree = ""; };
- F57F3D281B0C05280087F60B /* DeletionCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeletionCollectionViewController.swift; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 4A0ECC00200D8C0200BA84A3 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 6B63F1602BC34E4A00F89DEE /* ParseObjC in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4A9A9493200D0329005D8F4B /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 39E249A52AD1DD2E0014357C /* ParseObjC in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 8129E5F11A9CB067006752BC /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 39452DFA2AD9121D0066C2AE /* ParseUI in Frameworks */,
- 39452DF82AD9121D0066C2AE /* ParseObjC in Frameworks */,
- 7C77D221292A575B00C4D90E /* Social.framework in Frameworks */,
- 39452DFD2AD914110066C2AE /* BoltsSwift in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 81472F641A1AB33800FD6EED /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 6B63F1662BC3508200F89DEE /* ParseObjC in Frameworks */,
- 7C77D222292A580800C4D90E /* Social.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- BCCBE8C623BFB89D0044A79C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 39452DEC2AD8FC110066C2AE /* ParseObjC in Frameworks */,
- 39E22AD72AD0676700D9AE5C /* OCMock in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 0867D691FE84028FC02AAC07 /* Breakpad */ = {
- isa = PBXGroup;
- children = (
- 39E2499E2AD1DD160014357C /* Packages */,
- 4A9A9422200D0226005D8F4B /* ParseUI */,
- 81472F621A1AB31F00FD6EED /* ParseUIDemo */,
- BCCBE8CA23BFB89D0044A79C /* SignInWithAppleTests */,
- 3F5307328F84566C90FBCF25 /* Frameworks */,
- 7C77D162292A510400C4D90E /* ParseUI.framework */,
- 7C77D21F292A56F600C4D90E /* ParseUIDemo.app */,
- 7C77D22D292A604700C4D90E /* ParseUI.framework */,
- 7C77D22F292A604700C4D90E /* ParseUIDemo-Swift.app */,
- 7C77D230292A604700C4D90E /* SignInWithAppleTests.xctest */,
- );
- name = Breakpad;
- sourceTree = "";
- };
- 39E2499E2AD1DD160014357C /* Packages */ = {
- isa = PBXGroup;
- children = (
- 39E2499F2AD1DD160014357C /* Parse-SDK-iOS-OSX */,
- );
- name = Packages;
- sourceTree = "";
- };
- 3F5307328F84566C90FBCF25 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 7C77D220292A575B00C4D90E /* Social.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 4A9A9422200D0226005D8F4B /* ParseUI */ = {
- isa = PBXGroup;
- children = (
- 7C77D0B0292A507500C4D90E /* ParseUI */,
- 4A9A947F200D02CE005D8F4B /* Configurations */,
- 4A9A947D200D0226005D8F4B /* Scripts */,
- );
- name = ParseUI;
- sourceTree = "";
- };
- 4A9A947D200D0226005D8F4B /* Scripts */ = {
- isa = PBXGroup;
- children = (
- 4A9A947E200D0226005D8F4B /* convert_images.rb */,
- );
- path = Scripts;
- sourceTree = "";
- };
- 4A9A947F200D02CE005D8F4B /* Configurations */ = {
- isa = PBXGroup;
- children = (
- 4A9A9491200D02CE005D8F4B /* ParseUI-iOS-Dynamic.xcconfig */,
- 4A9A9480200D02CE005D8F4B /* ParseUI-iOS.xcconfig */,
- 4A9A9481200D02CE005D8F4B /* Shared */,
- );
- path = Configurations;
- sourceTree = "";
- };
- 4A9A9481200D02CE005D8F4B /* Shared */ = {
- isa = PBXGroup;
- children = (
- 4A9A9482200D02CE005D8F4B /* Common.xcconfig */,
- 4A9A9483200D02CE005D8F4B /* Platform */,
- 4A9A9488200D02CE005D8F4B /* Product */,
- 4A9A948D200D02CE005D8F4B /* Project */,
- 4A9A9490200D02CE005D8F4B /* Warnings.xcconfig */,
- );
- path = Shared;
- sourceTree = "";
- };
- 4A9A9483200D02CE005D8F4B /* Platform */ = {
- isa = PBXGroup;
- children = (
- 4A9A9484200D02CE005D8F4B /* macOS.xcconfig */,
- 4A9A9485200D02CE005D8F4B /* tvOS.xcconfig */,
- 4A9A9486200D02CE005D8F4B /* iOS.xcconfig */,
- 4A9A9487200D02CE005D8F4B /* watchOS.xcconfig */,
- );
- path = Platform;
- sourceTree = "";
- };
- 4A9A9488200D02CE005D8F4B /* Product */ = {
- isa = PBXGroup;
- children = (
- 4A9A9489200D02CE005D8F4B /* Application.xcconfig */,
- 4A9A948A200D02CE005D8F4B /* DynamicFramework.xcconfig */,
- 4A9A948B200D02CE005D8F4B /* StaticFramework.xcconfig */,
- 4A9A948C200D02CE005D8F4B /* LogicTests.xcconfig */,
- );
- path = Product;
- sourceTree = "";
- };
- 4A9A948D200D02CE005D8F4B /* Project */ = {
- isa = PBXGroup;
- children = (
- 4A9A948E200D02CE005D8F4B /* Debug.xcconfig */,
- 4A9A948F200D02CE005D8F4B /* Release.xcconfig */,
- );
- path = Project;
- sourceTree = "";
- };
- 7C77D0B0292A507500C4D90E /* ParseUI */ = {
- isa = PBXGroup;
- children = (
- 7C77D0B1292A507500C4D90E /* Resources */,
- 7C77D0C8292A507500C4D90E /* Source */,
- 7C77D0EA292A507500C4D90E /* Internal */,
- );
- path = ParseUI;
- sourceTree = "";
- };
- 7C77D0B1292A507500C4D90E /* Resources */ = {
- isa = PBXGroup;
- children = (
- 7C77D0B2292A507500C4D90E /* Images */,
- 7C77D0BF292A507500C4D90E /* Info-iOS.plist */,
- 7C77D0C0292A507500C4D90E /* Localization */,
- );
- path = Resources;
- sourceTree = "";
- };
- 7C77D0B2292A507500C4D90E /* Images */ = {
- isa = PBXGroup;
- children = (
- 7C77D0B4292A507500C4D90E /* apple_icon@3x.png */,
- 7C77D0B6292A507500C4D90E /* parse_logo.png */,
- 7C77D0B8292A507500C4D90E /* apple_icon@2x.png */,
- 7C77D0BA292A507500C4D90E /* parse_logo@2x.png */,
- 7C77D0BB292A507500C4D90E /* parse_logo@3x.png */,
- 7C77D0BC292A507500C4D90E /* apple_icon.png */,
- );
- path = Images;
- sourceTree = "";
- };
- 7C77D0C0292A507500C4D90E /* Localization */ = {
- isa = PBXGroup;
- children = (
- 7C77D0C1292A507500C4D90E /* ParseUI.strings */,
- );
- path = Localization;
- sourceTree = "";
- };
- 7C77D0C8292A507500C4D90E /* Source */ = {
- isa = PBXGroup;
- children = (
- 7C77D0C9292A507500C4D90E /* PFPurchaseTableViewCell.h */,
- 7C77D0CA292A507500C4D90E /* PFLogInViewController.m */,
- 7C77D0CB292A507500C4D90E /* PFTextField.h */,
- 7C77D0CC292A507500C4D90E /* PFResources.m */,
- 7C77D0CD292A507500C4D90E /* PFQueryTableViewController.h */,
- 7C77D0CE292A507500C4D90E /* PFLogInView.m */,
- 7C77D0CF292A507500C4D90E /* PFProductTableViewController.m */,
- 7C77D0D1292A507500C4D90E /* PFSignUpViewController.m */,
- 7C77D0D2292A507500C4D90E /* PFImageView.m */,
- 7C77D0D3292A507500C4D90E /* PFSignUpView.h */,
- 7C77D0D5292A507500C4D90E /* PFCollectionViewCell.m */,
- 7C77D0D6292A507500C4D90E /* PFTableViewCell.h */,
- 7C77D0D7292A507500C4D90E /* PFQueryCollectionViewController.m */,
- 7C77D0D8292A507500C4D90E /* ParseUIConstants.h */,
- 7C77D0D9292A507500C4D90E /* PFLogInView.h */,
- 7C77D0DA292A507500C4D90E /* PFQueryTableViewController.m */,
- 7C77D0DB292A507500C4D90E /* PFResources.h */,
- 7C77D0DC292A507500C4D90E /* PFTextField.m */,
- 7C77D0DD292A507500C4D90E /* PFLogInViewController.h */,
- 7C77D0DE292A507500C4D90E /* ParseUI.h */,
- 7C77D0DF292A507500C4D90E /* PFPurchaseTableViewCell.m */,
- 7C77D0E1292A507500C4D90E /* PFProductTableViewController.h */,
- 7C77D0E2292A507500C4D90E /* PFCollectionViewCell.h */,
- 7C77D0E3292A507500C4D90E /* PFTableViewCell.m */,
- 7C77D0E5292A507500C4D90E /* PFSignUpView.m */,
- 7C77D0E6292A507500C4D90E /* PFImageView.h */,
- 7C77D0E7292A507500C4D90E /* PFSignUpViewController.h */,
- 7C77D0E8292A507500C4D90E /* PFLogInView_Private.h */,
- 7C77D0E9292A507500C4D90E /* PFQueryCollectionViewController.h */,
- );
- path = Source;
- sourceTree = "";
- };
- 7C77D0EA292A507500C4D90E /* Internal */ = {
- isa = PBXGroup;
- children = (
- 7C77D246292A606800C4D90E /* Sign In With Apple */,
- 7C77D0EB292A507500C4D90E /* Cells */,
- 7C77D0F0292A507500C4D90E /* PFImageCache.h */,
- 7C77D0F1292A507500C4D90E /* PFLocalization.m */,
- 7C77D0F2292A507500C4D90E /* Extensions */,
- 7C77D0FB292A507500C4D90E /* PFLocalization.h */,
- 7C77D0FC292A507500C4D90E /* PFImageCache.m */,
- 7C77D0FD292A507500C4D90E /* Views */,
- );
- path = Internal;
- sourceTree = "";
- };
- 7C77D0EB292A507500C4D90E /* Cells */ = {
- isa = PBXGroup;
- children = (
- 7C77D0EC292A507500C4D90E /* PFActivityIndicatorTableViewCell.m */,
- 7C77D0ED292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.h */,
- 7C77D0EE292A507500C4D90E /* PFActivityIndicatorTableViewCell.h */,
- 7C77D0EF292A507500C4D90E /* PFActivityIndicatorCollectionReusableView.m */,
- );
- path = Cells;
- sourceTree = "";
- };
- 7C77D0F2292A507500C4D90E /* Extensions */ = {
- isa = PBXGroup;
- children = (
- 7C77D0F3292A507500C4D90E /* PFColor.h */,
- 7C77D0F4292A507500C4D90E /* PFImage.m */,
- 7C77D0F5292A507500C4D90E /* PFUIAlertView.h */,
- 7C77D0F6292A507500C4D90E /* PFRect.h */,
- 7C77D0F7292A507500C4D90E /* PFUIAlertView.m */,
- 7C77D0F8292A507500C4D90E /* PFImage.h */,
- 7C77D0F9292A507500C4D90E /* PFColor.m */,
- 7C77D0FA292A507500C4D90E /* PFRect.m */,
- );
- path = Extensions;
- sourceTree = "";
- };
- 7C77D0FD292A507500C4D90E /* Views */ = {
- isa = PBXGroup;
- children = (
- 7C77D0FE292A507500C4D90E /* Buttons */,
- 7C77D107292A507500C4D90E /* PFLoadingView.h */,
- 7C77D108292A507500C4D90E /* PFLoadingView.m */,
- );
- path = Views;
- sourceTree = "";
- };
- 7C77D0FE292A507500C4D90E /* Buttons */ = {
- isa = PBXGroup;
- children = (
- 7C77D0FF292A507500C4D90E /* PFDismissButton.h */,
- 7C77D100292A507500C4D90E /* PFTextButton.m */,
- 7C77D101292A507500C4D90E /* PFPrimaryButton.m */,
- 7C77D102292A507500C4D90E /* PFActionButton.m */,
- 7C77D103292A507500C4D90E /* PFTextButton.h */,
- 7C77D104292A507500C4D90E /* PFDismissButton.m */,
- 7C77D105292A507500C4D90E /* PFPrimaryButton.h */,
- 7C77D106292A507500C4D90E /* PFActionButton.h */,
- );
- path = Buttons;
- sourceTree = "";
- };
- 7C77D246292A606800C4D90E /* Sign In With Apple */ = {
- isa = PBXGroup;
- children = (
- 7C77D0D0292A507500C4D90E /* PFAppleUtils.h */,
- 7C77D0D4292A507500C4D90E /* PFAppleAuthenticationProvider.m */,
- 7C77D0E0292A507500C4D90E /* PFAppleUtils.m */,
- 7C77D0E4292A507500C4D90E /* PFAppleAuthenticationProvider.h */,
- );
- path = "Sign In With Apple";
- sourceTree = "";
- };
- 8129E5DD1A9CB052006752BC /* Obj-C */ = {
- isa = PBXGroup;
- children = (
- 81472F8D1A1AB37500FD6EED /* AppDelegate.h */,
- 81472F8E1A1AB37500FD6EED /* AppDelegate.m */,
- 81472F8F1A1AB37500FD6EED /* PFUIDemoViewController.h */,
- 81472F901A1AB37500FD6EED /* PFUIDemoViewController.m */,
- 81472FA21A1AB37500FD6EED /* CustomViewControllers */,
- );
- name = "Obj-C";
- sourceTree = "";
- };
- 8129E6021A9CB14E006752BC /* Swift */ = {
- isa = PBXGroup;
- children = (
- 8129E6081A9CB1BE006752BC /* AppDelegate.swift */,
- 8129E6391A9CB320006752BC /* UIDemoViewController.swift */,
- 81FC6B381A9D1ADB00104E45 /* CustomViewControllers */,
- );
- name = Swift;
- path = ParseUIDemo/Swift;
- sourceTree = SOURCE_ROOT;
- };
- 81472F621A1AB31F00FD6EED /* ParseUIDemo */ = {
- isa = PBXGroup;
- children = (
- BC32E14523ABAE04009BDFCD /* ParseUIDemo.entitlements */,
- 81472FA31A1AB37500FD6EED /* Classes */,
- 81472FA61A1AB37500FD6EED /* Other */,
- 81472FAC1A1AB37500FD6EED /* Resources */,
- );
- name = ParseUIDemo;
- sourceTree = "";
- };
- 81472F931A1AB37500FD6EED /* SignUpViewController */ = {
- isa = PBXGroup;
- children = (
- 81472F911A1AB37500FD6EED /* CustomSignUpViewController.h */,
- 81472F921A1AB37500FD6EED /* CustomSignUpViewController.m */,
- );
- path = SignUpViewController;
- sourceTree = "";
- };
- 81472F961A1AB37500FD6EED /* LogInViewController */ = {
- isa = PBXGroup;
- children = (
- 81472F941A1AB37500FD6EED /* CustomLogInViewController.h */,
- 81472F951A1AB37500FD6EED /* CustomLogInViewController.m */,
- );
- path = LogInViewController;
- sourceTree = "";
- };
- 81472FA11A1AB37500FD6EED /* QueryTableViewController */ = {
- isa = PBXGroup;
- children = (
- F57F3D1B1B0C03BA0087F60B /* DeletionTableViewController.h */,
- F57F3D1C1B0C03BA0087F60B /* DeletionTableViewController.m */,
- 81472F971A1AB37500FD6EED /* SimpleTableViewController.h */,
- 81472F981A1AB37500FD6EED /* SimpleTableViewController.m */,
- 81472F991A1AB37500FD6EED /* PaginatedTableViewController.h */,
- 81472F9A1A1AB37500FD6EED /* PaginatedTableViewController.m */,
- 81472F9B1A1AB37500FD6EED /* SectionedTableViewController.h */,
- 81472F9C1A1AB37500FD6EED /* SectionedTableViewController.m */,
- 81472F9D1A1AB37500FD6EED /* SubtitleImageTableViewController.h */,
- 81472F9E1A1AB37500FD6EED /* SubtitleImageTableViewController.m */,
- 81472F9F1A1AB37500FD6EED /* CustomProductTableViewController.h */,
- 81472FA01A1AB37500FD6EED /* CustomProductTableViewController.m */,
- 81C8D9BB1A890BCA007B8DCF /* StoryboardTableViewController.h */,
- 81C8D9BC1A890BCA007B8DCF /* StoryboardTableViewController.m */,
- 814155B01A9CD9CA002D9683 /* SimpleQueryTableStoryboard.storyboard */,
- );
- path = QueryTableViewController;
- sourceTree = "";
- };
- 81472FA21A1AB37500FD6EED /* CustomViewControllers */ = {
- isa = PBXGroup;
- children = (
- 81472F931A1AB37500FD6EED /* SignUpViewController */,
- 81472F961A1AB37500FD6EED /* LogInViewController */,
- 81472FA11A1AB37500FD6EED /* QueryTableViewController */,
- 81C5993C1A64344800F574E8 /* QueryCollectionViewController */,
- );
- path = CustomViewControllers;
- sourceTree = "";
- };
- 81472FA31A1AB37500FD6EED /* Classes */ = {
- isa = PBXGroup;
- children = (
- 8129E6021A9CB14E006752BC /* Swift */,
- 8129E5DD1A9CB052006752BC /* Obj-C */,
- );
- name = Classes;
- path = ParseUIDemo/Classes;
- sourceTree = "";
- };
- 81472FA61A1AB37500FD6EED /* Other */ = {
- isa = PBXGroup;
- children = (
- 81472FA41A1AB37500FD6EED /* Info.plist */,
- 81472FA51A1AB37500FD6EED /* main.m */,
- );
- name = Other;
- path = ParseUIDemo/Other;
- sourceTree = "";
- };
- 81472FAC1A1AB37500FD6EED /* Resources */ = {
- isa = PBXGroup;
- children = (
- 81472FA71A1AB37500FD6EED /* Images.xcassets */,
- 81472FA81A1AB37500FD6EED /* Icon.png */,
- 81472FA91A1AB37500FD6EED /* 0.png */,
- 81472FAA1A1AB37500FD6EED /* 1.png */,
- 81472FAB1A1AB37500FD6EED /* 2.png */,
- );
- name = Resources;
- path = ParseUIDemo/Resources;
- sourceTree = "";
- };
- 81C5993C1A64344800F574E8 /* QueryCollectionViewController */ = {
- isa = PBXGroup;
- children = (
- F57F3D1F1B0C03C90087F60B /* DeletionCollectionViewController.h */,
- F57F3D201B0C03C90087F60B /* DeletionCollectionViewController.m */,
- 81C5993D1A64346000F574E8 /* SimpleCollectionViewController.h */,
- 81C5993E1A64346000F574E8 /* SimpleCollectionViewController.m */,
- 81C599401A6454C900F574E8 /* PaginatedCollectionViewController.h */,
- 81C599411A6454C900F574E8 /* PaginatedCollectionViewController.m */,
- 81C599471A64636200F574E8 /* SectionedCollectionViewController.h */,
- 81C599481A64636200F574E8 /* SectionedCollectionViewController.m */,
- 819A4B381A6808EA00D01241 /* SubtitleImageCollectionViewController.h */,
- 819A4B391A6808EA00D01241 /* SubtitleImageCollectionViewController.m */,
- 812E5C021A7A8EFB000FBDE1 /* StoryboardCollectionViewController.h */,
- 812E5C031A7A8EFB000FBDE1 /* StoryboardCollectionViewController.m */,
- 812E5C001A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard */,
- );
- path = QueryCollectionViewController;
- sourceTree = "";
- };
- 81FC6B381A9D1ADB00104E45 /* CustomViewControllers */ = {
- isa = PBXGroup;
- children = (
- 81FC6B391A9D1ADB00104E45 /* LogInViewController */,
- 81FC6B481A9D1ADB00104E45 /* SignUpViewController */,
- 81FC6B571A9D1BFC00104E45 /* QueryTableViewController */,
- 81FC6B661A9D1CE900104E45 /* QueryCollectionViewController */,
- 81FC6B731A9D1D4700104E45 /* ProductTableViewController */,
- );
- path = CustomViewControllers;
- sourceTree = "";
- };
- 81FC6B391A9D1ADB00104E45 /* LogInViewController */ = {
- isa = PBXGroup;
- children = (
- 81FC6B3A1A9D1ADB00104E45 /* CustomLogInViewController.swift */,
- );
- path = LogInViewController;
- sourceTree = "";
- };
- 81FC6B481A9D1ADB00104E45 /* SignUpViewController */ = {
- isa = PBXGroup;
- children = (
- 81FC6B491A9D1ADB00104E45 /* CustomSignUpViewController.swift */,
- );
- path = SignUpViewController;
- sourceTree = "";
- };
- 81FC6B571A9D1BFC00104E45 /* QueryTableViewController */ = {
- isa = PBXGroup;
- children = (
- F57F3D251B0C04EF0087F60B /* DeletionTableViewController.swift */,
- 81FC6B5B1A9D1BFC00104E45 /* SimpleTableViewController.swift */,
- 81FC6B591A9D1BFC00104E45 /* PaginatedTableViewController.swift */,
- 81FC6B5A1A9D1BFC00104E45 /* SectionedTableViewController.swift */,
- 81FC6B5C1A9D1BFC00104E45 /* StoryboardTableViewController.swift */,
- 81FC6B5D1A9D1BFC00104E45 /* SubtitleImageTableViewController.swift */,
- 81FC6B641A9D1C2000104E45 /* SimpleQueryTableStoryboard-Swift.storyboard */,
- );
- path = QueryTableViewController;
- sourceTree = "";
- };
- 81FC6B661A9D1CE900104E45 /* QueryCollectionViewController */ = {
- isa = PBXGroup;
- children = (
- F57F3D281B0C05280087F60B /* DeletionCollectionViewController.swift */,
- 81FC6B691A9D1CE900104E45 /* SimpleCollectionViewController.swift */,
- 81FC6B671A9D1CE900104E45 /* PaginatedCollectionViewController.swift */,
- 81FC6B681A9D1CE900104E45 /* SectionedCollectionViewController.swift */,
- 81FC6B6A1A9D1CE900104E45 /* StoryboardCollectionViewController.swift */,
- 81FC6B6B1A9D1CE900104E45 /* SubtitleImageCollectionViewController.swift */,
- 81FC6B711A9D1CFD00104E45 /* SimpleQueryCollectionStoryboard-Swift.storyboard */,
- );
- path = QueryCollectionViewController;
- sourceTree = "";
- };
- 81FC6B731A9D1D4700104E45 /* ProductTableViewController */ = {
- isa = PBXGroup;
- children = (
- 81FC6B741A9D1D4700104E45 /* CustomProductTableViewController.swift */,
- );
- path = ProductTableViewController;
- sourceTree = "";
- };
- BCCBE8CA23BFB89D0044A79C /* SignInWithAppleTests */ = {
- isa = PBXGroup;
- children = (
- BCCBE8CB23BFB89D0044A79C /* SignInWithAppleTests.m */,
- BCCBE8CD23BFB89D0044A79C /* Info.plist */,
- );
- path = SignInWithAppleTests;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 4A0ECC02200D8C0200BA84A3 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7C77D150292A510400C4D90E /* PFPurchaseTableViewCell.h in Headers */,
- 7C77D151292A510400C4D90E /* PFTextField.h in Headers */,
- 7C77D152292A510400C4D90E /* PFQueryTableViewController.h in Headers */,
- 7C77D153292A510400C4D90E /* PFAppleUtils.h in Headers */,
- 7C77D154292A510400C4D90E /* PFSignUpView.h in Headers */,
- 7C77D155292A510400C4D90E /* PFTableViewCell.h in Headers */,
- 7C77D156292A510400C4D90E /* ParseUIConstants.h in Headers */,
- 7C77D157292A510400C4D90E /* PFLogInView.h in Headers */,
- 7C77D158292A510400C4D90E /* PFResources.h in Headers */,
- 7C77D159292A510400C4D90E /* PFLogInViewController.h in Headers */,
- 7C77D15A292A510400C4D90E /* ParseUI.h in Headers */,
- 7C77D15B292A510400C4D90E /* PFProductTableViewController.h in Headers */,
- 7C77D15C292A510400C4D90E /* PFCollectionViewCell.h in Headers */,
- 7C77D15D292A510400C4D90E /* PFAppleAuthenticationProvider.h in Headers */,
- 7C77D15E292A510400C4D90E /* PFImageView.h in Headers */,
- 7C77D15F292A510400C4D90E /* PFSignUpViewController.h in Headers */,
- 7C77D160292A510400C4D90E /* PFLogInView_Private.h in Headers */,
- 7C77D161292A510400C4D90E /* PFQueryCollectionViewController.h in Headers */,
- 7C77D163292A511000C4D90E /* PFActivityIndicatorCollectionReusableView.h in Headers */,
- 7C77D164292A511000C4D90E /* PFActivityIndicatorTableViewCell.h in Headers */,
- 7C77D165292A511000C4D90E /* PFImageCache.h in Headers */,
- 7C77D166292A511000C4D90E /* PFColor.h in Headers */,
- 7C77D167292A511000C4D90E /* PFUIAlertView.h in Headers */,
- 7C77D168292A511000C4D90E /* PFRect.h in Headers */,
- 7C77D169292A511000C4D90E /* PFImage.h in Headers */,
- 7C77D16A292A511000C4D90E /* PFLocalization.h in Headers */,
- 7C77D16B292A511000C4D90E /* PFDismissButton.h in Headers */,
- 7C77D16C292A511000C4D90E /* PFTextButton.h in Headers */,
- 7C77D16D292A511000C4D90E /* PFPrimaryButton.h in Headers */,
- 7C77D16E292A511000C4D90E /* PFActionButton.h in Headers */,
- 7C77D16F292A511000C4D90E /* PFLoadingView.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4A9A9494200D0329005D8F4B /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7C77D109292A509000C4D90E /* PFPurchaseTableViewCell.h in Headers */,
- 7C77D10A292A509000C4D90E /* PFTextField.h in Headers */,
- 7C77D10B292A509000C4D90E /* PFQueryTableViewController.h in Headers */,
- 7C77D10C292A509000C4D90E /* PFAppleUtils.h in Headers */,
- 7C77D10D292A509000C4D90E /* PFSignUpView.h in Headers */,
- 7C77D10E292A509000C4D90E /* PFTableViewCell.h in Headers */,
- 7C77D10F292A509000C4D90E /* ParseUIConstants.h in Headers */,
- 7C77D110292A509000C4D90E /* PFLogInView.h in Headers */,
- 7C77D111292A509000C4D90E /* PFResources.h in Headers */,
- 7C77D112292A509000C4D90E /* PFLogInViewController.h in Headers */,
- 7C77D113292A509000C4D90E /* ParseUI.h in Headers */,
- 7C77D114292A509000C4D90E /* PFProductTableViewController.h in Headers */,
- 7C77D115292A509000C4D90E /* PFCollectionViewCell.h in Headers */,
- 7C77D116292A509000C4D90E /* PFAppleAuthenticationProvider.h in Headers */,
- 7C77D117292A509000C4D90E /* PFImageView.h in Headers */,
- 7C77D118292A509000C4D90E /* PFSignUpViewController.h in Headers */,
- 7C77D119292A509000C4D90E /* PFLogInView_Private.h in Headers */,
- 7C77D11A292A509000C4D90E /* PFQueryCollectionViewController.h in Headers */,
- 7C77D11C292A509D00C4D90E /* PFActivityIndicatorCollectionReusableView.h in Headers */,
- 7C77D11D292A509D00C4D90E /* PFActivityIndicatorTableViewCell.h in Headers */,
- 7C77D11E292A509D00C4D90E /* PFImageCache.h in Headers */,
- 7C77D11F292A509D00C4D90E /* PFColor.h in Headers */,
- 7C77D120292A509D00C4D90E /* PFUIAlertView.h in Headers */,
- 7C77D121292A509D00C4D90E /* PFRect.h in Headers */,
- 7C77D122292A509D00C4D90E /* PFImage.h in Headers */,
- 7C77D123292A509D00C4D90E /* PFLocalization.h in Headers */,
- 7C77D124292A509D00C4D90E /* PFDismissButton.h in Headers */,
- 7C77D125292A509D00C4D90E /* PFTextButton.h in Headers */,
- 7C77D126292A509D00C4D90E /* PFPrimaryButton.h in Headers */,
- 7C77D127292A509D00C4D90E /* PFActionButton.h in Headers */,
- 7C77D128292A509D00C4D90E /* PFLoadingView.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- 4A0ECBE4200D8C0200BA84A3 /* ParseUI-Dynamic */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4A0ECC21200D8C0200BA84A3 /* Build configuration list for PBXNativeTarget "ParseUI-Dynamic" */;
- buildPhases = (
- 4A0ECBE5200D8C0200BA84A3 /* Sources */,
- 4A0ECC00200D8C0200BA84A3 /* Frameworks */,
- 4A0ECC02200D8C0200BA84A3 /* Headers */,
- 4A0ECC20200D8C0200BA84A3 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "ParseUI-Dynamic";
- packageProductDependencies = (
- 6B63F15F2BC34E4A00F89DEE /* ParseObjC */,
- );
- productName = ParseUI;
- productReference = 7C77D162292A510400C4D90E /* ParseUI.framework */;
- productType = "com.apple.product-type.framework";
- };
- 4A9A9496200D0329005D8F4B /* ParseUI */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4A9A949C200D0329005D8F4B /* Build configuration list for PBXNativeTarget "ParseUI" */;
- buildPhases = (
- 4A9A9492200D0329005D8F4B /* Sources */,
- 4A9A9493200D0329005D8F4B /* Frameworks */,
- 4A9A9494200D0329005D8F4B /* Headers */,
- 4A9A9495200D0329005D8F4B /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = ParseUI;
- packageProductDependencies = (
- 39E249A42AD1DD2E0014357C /* ParseObjC */,
- );
- productName = ParseUI;
- productReference = 7C77D22D292A604700C4D90E /* ParseUI.framework */;
- productType = "com.apple.product-type.framework";
- };
- 8129E5DE1A9CB067006752BC /* ParseUIDemo-Swift */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 8129E5FD1A9CB067006752BC /* Build configuration list for PBXNativeTarget "ParseUIDemo-Swift" */;
- buildPhases = (
- 8129E5E01A9CB067006752BC /* Sources */,
- 8129E5F11A9CB067006752BC /* Frameworks */,
- 8129E5F41A9CB067006752BC /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "ParseUIDemo-Swift";
- packageProductDependencies = (
- 39452DF72AD9121D0066C2AE /* ParseObjC */,
- 39452DF92AD9121D0066C2AE /* ParseUI */,
- 39452DFC2AD914110066C2AE /* BoltsSwift */,
- );
- productName = ParseUIDemo;
- productReference = 7C77D22F292A604700C4D90E /* ParseUIDemo-Swift.app */;
- productType = "com.apple.product-type.application";
- };
- 81472F661A1AB33800FD6EED /* ParseUIDemo */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 81472F871A1AB33800FD6EED /* Build configuration list for PBXNativeTarget "ParseUIDemo" */;
- buildPhases = (
- 81472F631A1AB33800FD6EED /* Sources */,
- 81472F641A1AB33800FD6EED /* Frameworks */,
- 81472F651A1AB33800FD6EED /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 39452DF62AD911740066C2AE /* PBXTargetDependency */,
- );
- name = ParseUIDemo;
- packageProductDependencies = (
- 6B63F1652BC3508200F89DEE /* ParseObjC */,
- );
- productName = ParseUIDemo;
- productReference = 7C77D21F292A56F600C4D90E /* ParseUIDemo.app */;
- productType = "com.apple.product-type.application";
- };
- BCCBE8C823BFB89D0044A79C /* SignInWithAppleTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = BCCBE8D123BFB89D0044A79C /* Build configuration list for PBXNativeTarget "SignInWithAppleTests" */;
- buildPhases = (
- BCCBE8C523BFB89D0044A79C /* Sources */,
- BCCBE8C623BFB89D0044A79C /* Frameworks */,
- BCCBE8C723BFB89D0044A79C /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 39452DF22AD910490066C2AE /* PBXTargetDependency */,
- );
- name = SignInWithAppleTests;
- packageProductDependencies = (
- 39E22AD62AD0676700D9AE5C /* OCMock */,
- 39452DEB2AD8FC110066C2AE /* ParseObjC */,
- );
- productName = SignInWithAppleTests;
- productReference = 7C77D230292A604700C4D90E /* SignInWithAppleTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 0867D690FE84028FC02AAC07 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- CLASSPREFIX = PF;
- DefaultBuildSystemTypeForWorkspace = Original;
- LastSwiftUpdateCheck = 0700;
- LastUpgradeCheck = 1130;
- ORGANIZATIONNAME = "Parse Inc.";
- TargetAttributes = {
- 4A0ECBE4200D8C0200BA84A3 = {
- ProvisioningStyle = Automatic;
- };
- 4A9A9496200D0329005D8F4B = {
- CreatedOnToolsVersion = 9.2;
- ProvisioningStyle = Automatic;
- };
- 81472F661A1AB33800FD6EED = {
- CreatedOnToolsVersion = 6.1;
- };
- BCCBE8C823BFB89D0044A79C = {
- CreatedOnToolsVersion = 11.3;
- ProvisioningStyle = Automatic;
- TestTargetID = 81472F661A1AB33800FD6EED;
- };
- };
- };
- buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "ParseUI" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = en;
- hasScannedForEncodings = 1;
- knownRegions = (
- da,
- de,
- es,
- fr,
- it,
- ja,
- nl,
- no,
- sl,
- sv,
- tr,
- en,
- Base,
- he,
- "pt-BR",
- );
- mainGroup = 0867D691FE84028FC02AAC07 /* Breakpad */;
- packageReferences = (
- 39E22AD52AD0676700D9AE5C /* XCRemoteSwiftPackageReference "ocmock" */,
- 39452DFB2AD914110066C2AE /* XCRemoteSwiftPackageReference "Bolts-Swift" */,
- );
- productRefGroup = 0867D691FE84028FC02AAC07 /* Breakpad */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 81472F661A1AB33800FD6EED /* ParseUIDemo */,
- 8129E5DE1A9CB067006752BC /* ParseUIDemo-Swift */,
- 4A9A9496200D0329005D8F4B /* ParseUI */,
- 4A0ECBE4200D8C0200BA84A3 /* ParseUI-Dynamic */,
- BCCBE8C823BFB89D0044A79C /* SignInWithAppleTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 4A0ECC20200D8C0200BA84A3 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4A9A9495200D0329005D8F4B /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 8129E5F41A9CB067006752BC /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 8129E5F51A9CB067006752BC /* Images.xcassets in Resources */,
- 8129E5F71A9CB067006752BC /* 0.png in Resources */,
- 81FC6B651A9D1C2000104E45 /* SimpleQueryTableStoryboard-Swift.storyboard in Resources */,
- 8129E5F81A9CB067006752BC /* 1.png in Resources */,
- 8129E5F91A9CB067006752BC /* 2.png in Resources */,
- 8129E5FA1A9CB067006752BC /* SimpleQueryCollectionStoryboard.storyboard in Resources */,
- 81FC6B721A9D1CFD00104E45 /* SimpleQueryCollectionStoryboard-Swift.storyboard in Resources */,
- 8129E5FB1A9CB067006752BC /* Icon.png in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 81472F651A1AB33800FD6EED /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 81472FBC1A1AB37500FD6EED /* Images.xcassets in Resources */,
- 814155B11A9CD9CA002D9683 /* SimpleQueryTableStoryboard.storyboard in Resources */,
- 81472FBE1A1AB37500FD6EED /* 0.png in Resources */,
- 81472FBF1A1AB37500FD6EED /* 1.png in Resources */,
- 81472FC01A1AB37500FD6EED /* 2.png in Resources */,
- 812E5C011A7A8EB4000FBDE1 /* SimpleQueryCollectionStoryboard.storyboard in Resources */,
- 81472FBD1A1AB37500FD6EED /* Icon.png in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- BCCBE8C723BFB89D0044A79C /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 4A0ECBE5200D8C0200BA84A3 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7C77D170292A511C00C4D90E /* PFLogInViewController.m in Sources */,
- 7C77D171292A511C00C4D90E /* PFResources.m in Sources */,
- 7C77D172292A511C00C4D90E /* PFLogInView.m in Sources */,
- 7C77D173292A511C00C4D90E /* PFProductTableViewController.m in Sources */,
- 7C77D174292A511C00C4D90E /* PFSignUpViewController.m in Sources */,
- 7C77D175292A511C00C4D90E /* PFImageView.m in Sources */,
- 7C77D176292A511C00C4D90E /* PFAppleAuthenticationProvider.m in Sources */,
- 7C77D177292A511C00C4D90E /* PFCollectionViewCell.m in Sources */,
- 7C77D178292A511C00C4D90E /* PFQueryCollectionViewController.m in Sources */,
- 7C77D179292A511C00C4D90E /* PFQueryTableViewController.m in Sources */,
- 7C77D17A292A511C00C4D90E /* PFTextField.m in Sources */,
- 7C77D17B292A511C00C4D90E /* PFPurchaseTableViewCell.m in Sources */,
- 7C77D17C292A511C00C4D90E /* PFAppleUtils.m in Sources */,
- 7C77D17D292A511C00C4D90E /* PFTableViewCell.m in Sources */,
- 7C77D17E292A511C00C4D90E /* PFSignUpView.m in Sources */,
- 7C77D17F292A511C00C4D90E /* PFActivityIndicatorTableViewCell.m in Sources */,
- 7C77D180292A511C00C4D90E /* PFActivityIndicatorCollectionReusableView.m in Sources */,
- 7C77D181292A511C00C4D90E /* PFLocalization.m in Sources */,
- 7C77D182292A511C00C4D90E /* PFImage.m in Sources */,
- 7C77D183292A511C00C4D90E /* PFUIAlertView.m in Sources */,
- 7C77D184292A511C00C4D90E /* PFColor.m in Sources */,
- 7C77D185292A511C00C4D90E /* PFRect.m in Sources */,
- 7C77D186292A511C00C4D90E /* PFImageCache.m in Sources */,
- 7C77D187292A511C00C4D90E /* PFTextButton.m in Sources */,
- 7C77D188292A511C00C4D90E /* PFPrimaryButton.m in Sources */,
- 7C77D189292A511C00C4D90E /* PFActionButton.m in Sources */,
- 7C77D18A292A511C00C4D90E /* PFDismissButton.m in Sources */,
- 7C77D18B292A511C00C4D90E /* PFLoadingView.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4A9A9492200D0329005D8F4B /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7C77D18C292A512300C4D90E /* PFLogInViewController.m in Sources */,
- 7C77D18D292A512300C4D90E /* PFResources.m in Sources */,
- 7C77D18E292A512300C4D90E /* PFLogInView.m in Sources */,
- 7C77D18F292A512300C4D90E /* PFProductTableViewController.m in Sources */,
- 7C77D190292A512300C4D90E /* PFSignUpViewController.m in Sources */,
- 7C77D191292A512300C4D90E /* PFImageView.m in Sources */,
- 7C77D192292A512300C4D90E /* PFAppleAuthenticationProvider.m in Sources */,
- 7C77D193292A512300C4D90E /* PFCollectionViewCell.m in Sources */,
- 7C77D194292A512300C4D90E /* PFQueryCollectionViewController.m in Sources */,
- 7C77D195292A512300C4D90E /* PFQueryTableViewController.m in Sources */,
- 7C77D196292A512300C4D90E /* PFTextField.m in Sources */,
- 7C77D197292A512300C4D90E /* PFPurchaseTableViewCell.m in Sources */,
- 7C77D198292A512300C4D90E /* PFAppleUtils.m in Sources */,
- 7C77D199292A512300C4D90E /* PFTableViewCell.m in Sources */,
- 7C77D19A292A512300C4D90E /* PFSignUpView.m in Sources */,
- 7C77D19B292A512300C4D90E /* PFActivityIndicatorTableViewCell.m in Sources */,
- 7C77D19C292A512300C4D90E /* PFActivityIndicatorCollectionReusableView.m in Sources */,
- 7C77D19D292A512300C4D90E /* PFLocalization.m in Sources */,
- 7C77D19E292A512300C4D90E /* PFImage.m in Sources */,
- 7C77D19F292A512300C4D90E /* PFUIAlertView.m in Sources */,
- 7C77D1A0292A512300C4D90E /* PFColor.m in Sources */,
- 7C77D1A1292A512300C4D90E /* PFRect.m in Sources */,
- 7C77D1A2292A512300C4D90E /* PFImageCache.m in Sources */,
- 7C77D1A3292A512300C4D90E /* PFTextButton.m in Sources */,
- 7C77D1A4292A512300C4D90E /* PFPrimaryButton.m in Sources */,
- 7C77D1A5292A512300C4D90E /* PFActionButton.m in Sources */,
- 7C77D1A6292A512300C4D90E /* PFDismissButton.m in Sources */,
- 7C77D1A7292A512300C4D90E /* PFLoadingView.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 8129E5E01A9CB067006752BC /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 81FC6B4A1A9D1ADB00104E45 /* CustomLogInViewController.swift in Sources */,
- 81FC6B601A9D1BFC00104E45 /* SectionedTableViewController.swift in Sources */,
- 81FC6B5F1A9D1BFC00104E45 /* PaginatedTableViewController.swift in Sources */,
- 81FC6B611A9D1BFC00104E45 /* SimpleTableViewController.swift in Sources */,
- F57F3D291B0C05280087F60B /* DeletionCollectionViewController.swift in Sources */,
- 81FC6B6E1A9D1CE900104E45 /* SimpleCollectionViewController.swift in Sources */,
- F57F3D271B0C050C0087F60B /* DeletionTableViewController.swift in Sources */,
- 81FC6B6D1A9D1CE900104E45 /* SectionedCollectionViewController.swift in Sources */,
- 81FC6B561A9D1ADB00104E45 /* CustomSignUpViewController.swift in Sources */,
- 81FC6B621A9D1BFC00104E45 /* StoryboardTableViewController.swift in Sources */,
- 81FC6B751A9D1D4700104E45 /* CustomProductTableViewController.swift in Sources */,
- 81FC6B6C1A9D1CE900104E45 /* PaginatedCollectionViewController.swift in Sources */,
- 81FC6B6F1A9D1CE900104E45 /* StoryboardCollectionViewController.swift in Sources */,
- 81FC6B701A9D1CE900104E45 /* SubtitleImageCollectionViewController.swift in Sources */,
- 8129E6091A9CB1BE006752BC /* AppDelegate.swift in Sources */,
- 8129E63A1A9CB320006752BC /* UIDemoViewController.swift in Sources */,
- 81FC6B631A9D1BFC00104E45 /* SubtitleImageTableViewController.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 81472F631A1AB33800FD6EED /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 81C5993F1A64346000F574E8 /* SimpleCollectionViewController.m in Sources */,
- 81472FBB1A1AB37500FD6EED /* main.m in Sources */,
- 81C599421A6454C900F574E8 /* PaginatedCollectionViewController.m in Sources */,
- 81472FB31A1AB37500FD6EED /* CustomSignUpViewController.m in Sources */,
- 81472FB41A1AB37500FD6EED /* CustomLogInViewController.m in Sources */,
- 81472FB91A1AB37500FD6EED /* CustomProductTableViewController.m in Sources */,
- 819A4B3A1A6808EA00D01241 /* SubtitleImageCollectionViewController.m in Sources */,
- F57F3D241B0C03DB0087F60B /* DeletionTableViewController.m in Sources */,
- 812E5C041A7A8EFB000FBDE1 /* StoryboardCollectionViewController.m in Sources */,
- 81472FB51A1AB37500FD6EED /* SimpleTableViewController.m in Sources */,
- F57F3D231B0C03D40087F60B /* DeletionCollectionViewController.m in Sources */,
- 81472FB61A1AB37500FD6EED /* PaginatedTableViewController.m in Sources */,
- 81C8D9BD1A890BCA007B8DCF /* StoryboardTableViewController.m in Sources */,
- 81472FB71A1AB37500FD6EED /* SectionedTableViewController.m in Sources */,
- 81472FB11A1AB37500FD6EED /* AppDelegate.m in Sources */,
- 81472FB21A1AB37500FD6EED /* PFUIDemoViewController.m in Sources */,
- 81C599491A64636200F574E8 /* SectionedCollectionViewController.m in Sources */,
- 81472FB81A1AB37500FD6EED /* SubtitleImageTableViewController.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- BCCBE8C523BFB89D0044A79C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BCA5CC8523BFCFB8003BC0A0 /* SignInWithAppleTests.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 39452DF22AD910490066C2AE /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 81472F661A1AB33800FD6EED /* ParseUIDemo */;
- targetProxy = 39452DF12AD910490066C2AE /* PBXContainerItemProxy */;
- };
- 39452DF62AD911740066C2AE /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 4A9A9496200D0329005D8F4B /* ParseUI */;
- targetProxy = 39452DF52AD911740066C2AE /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 7C77D0C1292A507500C4D90E /* ParseUI.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 7C77D0C2292A507500C4D90E /* de */,
- 7C77D0C3292A507500C4D90E /* he */,
- 7C77D0C4292A507500C4D90E /* en */,
- 7C77D0C5292A507500C4D90E /* sv */,
- 7C77D0C6292A507500C4D90E /* pt-BR */,
- 7C77D0C7292A507500C4D90E /* fr */,
- );
- name = ParseUI.strings;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 1DEB922308733DC00010E9CD /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A948E200D02CE005D8F4B /* Debug.xcconfig */;
- buildSettings = {
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ENABLE_CODE_COVERAGE = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_LITERAL_CONVERSION = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_LDFLAGS = (
- "$(value)",
- "$(SANITIZE_FLAGS)",
- "-Wl,-undefined,dynamic_lookup",
- );
- SDKROOT = iphoneos;
- };
- name = Debug;
- };
- 1DEB922408733DC00010E9CD /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A948F200D02CE005D8F4B /* Release.xcconfig */;
- buildSettings = {
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ENABLE_CODE_COVERAGE = NO;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_LITERAL_CONVERSION = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_LABEL = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- };
- name = Release;
- };
- 4A0ECC22200D8C0200BA84A3 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A9491200D02CE005D8F4B /* ParseUI-iOS-Dynamic.xcconfig */;
- 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_MODULES_AUTOLINK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_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;
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "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;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = YES;
- SKIP_INSTALL = YES;
- SUPPORTS_MACCATALYST = NO;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 4A0ECC23200D8C0200BA84A3 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A9491200D02CE005D8F4B /* ParseUI-iOS-Dynamic.xcconfig */;
- 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_MODULES_AUTOLINK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_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;
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = NO;
- ONLY_ACTIVE_ARCH = YES;
- SKIP_INSTALL = YES;
- SUPPORTS_MACCATALYST = NO;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- 4A9A949D200D0329005D8F4B /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A9480200D02CE005D8F4B /* ParseUI-iOS.xcconfig */;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_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;
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "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;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = YES;
- SKIP_INSTALL = YES;
- SUPPORTS_MACCATALYST = NO;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 4A9A949E200D0329005D8F4B /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 4A9A9480200D02CE005D8F4B /* ParseUI-iOS.xcconfig */;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
- 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = 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_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;
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = NO;
- ONLY_ACTIVE_ARCH = YES;
- SKIP_INSTALL = YES;
- SUPPORTS_MACCATALYST = NO;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- 8129E5FE1A9CB067006752BC /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- 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;
- INFOPLIST_FILE = ParseUIDemo/Other/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "ParseUIDemo-Swift";
- SWIFT_INSTALL_OBJC_HEADER = NO;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 8129E5FF1A9CB067006752BC /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Distribution";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- 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;
- INFOPLIST_FILE = ParseUIDemo/Other/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.parse.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "ParseUIDemo-Swift";
- SWIFT_INSTALL_OBJC_HEADER = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 81472F881A1AB33800FD6EED /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = ParseUIDemo/ParseUIDemo.entitlements;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEVELOPMENT_TEAM = "";
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- 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;
- INFOPLIST_FILE = ParseUIDemo/Other/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- /usr/lib/swift,
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.parse.ParseUIDemo;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 81472F891A1AB33800FD6EED /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_ENTITLEMENTS = ParseUIDemo/ParseUIDemo.entitlements;
- CODE_SIGN_IDENTITY = "iPhone Distribution";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(SRCROOT)",
- "$(PROJECT_DIR)",
- );
- 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;
- INFOPLIST_FILE = ParseUIDemo/Other/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- /usr/lib/swift,
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.parse.ParseUIDemo;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- BCCBE8D223BFB89D0044A79C /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- BUNDLE_LOADER = "$(TEST_HOST)";
- 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_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- INFOPLIST_FILE = SignInWithAppleTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = org.parseplatform.SignInWithAppleTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ParseUIDemo.app/ParseUIDemo";
- };
- name = Debug;
- };
- BCCBE8D323BFB89D0044A79C /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- BUNDLE_LOADER = "$(TEST_HOST)";
- 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_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- INFOPLIST_FILE = SignInWithAppleTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = org.parseplatform.SignInWithAppleTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ParseUIDemo.app/ParseUIDemo";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "ParseUI" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 1DEB922308733DC00010E9CD /* Debug */,
- 1DEB922408733DC00010E9CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4A0ECC21200D8C0200BA84A3 /* Build configuration list for PBXNativeTarget "ParseUI-Dynamic" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4A0ECC22200D8C0200BA84A3 /* Debug */,
- 4A0ECC23200D8C0200BA84A3 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4A9A949C200D0329005D8F4B /* Build configuration list for PBXNativeTarget "ParseUI" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4A9A949D200D0329005D8F4B /* Debug */,
- 4A9A949E200D0329005D8F4B /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 8129E5FD1A9CB067006752BC /* Build configuration list for PBXNativeTarget "ParseUIDemo-Swift" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 8129E5FE1A9CB067006752BC /* Debug */,
- 8129E5FF1A9CB067006752BC /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 81472F871A1AB33800FD6EED /* Build configuration list for PBXNativeTarget "ParseUIDemo" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 81472F881A1AB33800FD6EED /* Debug */,
- 81472F891A1AB33800FD6EED /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- BCCBE8D123BFB89D0044A79C /* Build configuration list for PBXNativeTarget "SignInWithAppleTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- BCCBE8D223BFB89D0044A79C /* Debug */,
- BCCBE8D323BFB89D0044A79C /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
- 39452DFB2AD914110066C2AE /* XCRemoteSwiftPackageReference "Bolts-Swift" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/BoltsFramework/Bolts-Swift.git";
- requirement = {
- kind = exactVersion;
- version = 1.5.0;
- };
- };
- 39E22AD52AD0676700D9AE5C /* XCRemoteSwiftPackageReference "ocmock" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/erikdoe/ocmock";
- requirement = {
- kind = revision;
- revision = 67bb9602f0a7541f24dc2d6d0d7389ca3e4c2c89;
- };
- };
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
- 39452DEB2AD8FC110066C2AE /* ParseObjC */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseObjC;
- };
- 39452DF72AD9121D0066C2AE /* ParseObjC */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseObjC;
- };
- 39452DF92AD9121D0066C2AE /* ParseUI */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseUI;
- };
- 39452DFC2AD914110066C2AE /* BoltsSwift */ = {
- isa = XCSwiftPackageProductDependency;
- package = 39452DFB2AD914110066C2AE /* XCRemoteSwiftPackageReference "Bolts-Swift" */;
- productName = BoltsSwift;
- };
- 39E22AD62AD0676700D9AE5C /* OCMock */ = {
- isa = XCSwiftPackageProductDependency;
- package = 39E22AD52AD0676700D9AE5C /* XCRemoteSwiftPackageReference "ocmock" */;
- productName = OCMock;
- };
- 39E249A42AD1DD2E0014357C /* ParseObjC */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseObjC;
- };
- 6B63F15F2BC34E4A00F89DEE /* ParseObjC */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseObjC;
- };
- 6B63F1652BC3508200F89DEE /* ParseObjC */ = {
- isa = XCSwiftPackageProductDependency;
- productName = ParseObjC;
- };
-/* End XCSwiftPackageProductDependency section */
- };
- rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
-}
diff --git a/ParseUI/ParseUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ParseUI/ParseUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a62..000000000
--- a/ParseUI/ParseUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/ParseUI/ParseUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ParseUI/ParseUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/ParseUI/ParseUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI-Dynamic.xcscheme b/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI-Dynamic.xcscheme
deleted file mode 100644
index c75f54261..000000000
--- a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI-Dynamic.xcscheme
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI.xcscheme b/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI.xcscheme
deleted file mode 100644
index a3eb8e73b..000000000
--- a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUI.xcscheme
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo-Swift.xcscheme b/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo-Swift.xcscheme
deleted file mode 100644
index 0daea4b72..000000000
--- a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo-Swift.xcscheme
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo.xcscheme b/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo.xcscheme
deleted file mode 100644
index bbbccb69b..000000000
--- a/ParseUI/ParseUI.xcodeproj/xcshareddata/xcschemes/ParseUIDemo.xcscheme
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.h b/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.h
deleted file mode 100644
index 44004498b..000000000
--- a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-/**
- The `PFActivityIndicatorCollectionReusableView` class represents a collection footer
- that has a simple text label and displays UIActivityIndicatorView if property is set to `YES`.
- An instance of this class is used as a default next page button inside .
- */
-@interface PFActivityIndicatorCollectionReusableView : UICollectionReusableView
-
-@property (nonatomic, strong, readonly) UILabel *textLabel;
-
-@property (nonatomic, assign, getter=isAnimating) BOOL animating;
-
-- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
-- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.m b/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.m
deleted file mode 100644
index 3385edd81..000000000
--- a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorCollectionReusableView.m
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFActivityIndicatorCollectionReusableView.h"
-
-#import "PFRect.h"
-
-@interface PFActivityIndicatorCollectionReusableView () {
- UIActivityIndicatorView *_activityIndicator;
- UIButton *_actionButton;
-}
-
-@end
-
-@implementation PFActivityIndicatorCollectionReusableView
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (!self) return nil;
-
- _actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
- _actionButton.backgroundColor = self.backgroundColor;
- [self addSubview:_actionButton];
-
- _textLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- _textLabel.numberOfLines = 0;
- _textLabel.textAlignment = NSTextAlignmentCenter;
- [self addSubview:_textLabel];
-
- _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
- _activityIndicator.hidesWhenStopped = YES;
- [self addSubview:_activityIndicator];
-
- return self;
-}
-
-#pragma mark -
-#pragma mark Dealloc
-
-- (void)dealloc {
- [self removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
-}
-
-#pragma mark -
-#pragma mark UIView
-
-- (void)setBackgroundColor:(UIColor *)backgroundColor {
- [super setBackgroundColor:backgroundColor];
- _actionButton.backgroundColor = backgroundColor;
-}
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- const CGRect bounds = self.bounds;
-
- _actionButton.frame = bounds;
-
- _textLabel.frame = PFRectMakeWithSizeCenteredInRect([_textLabel sizeThatFits:bounds.size], bounds);
- _activityIndicator.frame = PFRectMakeWithSizeCenteredInRect([_activityIndicator sizeThatFits:bounds.size], bounds);
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (void)setAnimating:(BOOL)animating {
- if (self.animating != animating) {
-
- if (animating) {
- [_activityIndicator startAnimating];
- _textLabel.alpha = 0.0f;
- } else {
- [_activityIndicator stopAnimating];
- _textLabel.alpha = 1.0f;
- }
- }
-}
-
-- (BOOL)isAnimating {
- return [_activityIndicator isAnimating];
-}
-
-#pragma mark -
-#pragma mark Actions
-
-- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents {
- [_actionButton addTarget:target action:action forControlEvents:controlEvents];
-}
-
-- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents {
- [_actionButton removeTarget:target action:action forControlEvents:controlEvents];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.h b/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.h
deleted file mode 100644
index 5d7890642..000000000
--- a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#if __has_include()
-#import
-#else
-#import "PFTableViewCell.h"
-#endif
-
-/**
- The `PFActivityIndicatorTableViewCell` class represents a table view cell
- that displays UIActivityIndicatorView as the accessory view.
- */
-@interface PFActivityIndicatorTableViewCell : PFTableViewCell
-
-@property (nonatomic, assign, getter=isAnimating) BOOL animating;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.m b/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.m
deleted file mode 100644
index b825bd15c..000000000
--- a/ParseUI/ParseUI/Internal/Cells/PFActivityIndicatorTableViewCell.m
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFActivityIndicatorTableViewCell.h"
-
-@interface PFActivityIndicatorTableViewCell ()
-
-@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator;
-
-@end
-
-@implementation PFActivityIndicatorTableViewCell
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
-{
- self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
- if (self) {
- _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
- _activityIndicator.hidesWhenStopped = YES;
- self.accessoryView = _activityIndicator;
- }
- return self;
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (void)setAnimating:(BOOL)animating {
- if (self.animating != animating) {
-
- if (animating) {
- [_activityIndicator startAnimating];
- } else {
- [_activityIndicator stopAnimating];
- }
- }
-}
-
-- (BOOL)isAnimating {
- return [_activityIndicator isAnimating];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFColor.h b/ParseUI/ParseUI/Internal/Extensions/PFColor.h
deleted file mode 100644
index 7e03aa06b..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFColor.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-@interface PFColor : UIColor
-
-///--------------------------------------
-/// @name Common
-///--------------------------------------
-
-+ (UIColor *)commonBackgroundColor;
-
-///--------------------------------------
-/// @name TextFields
-///--------------------------------------
-
-+ (UIColor *)textFieldBackgroundColor;
-+ (UIColor *)textFieldTextColor;
-+ (UIColor *)textFieldPlaceholderColor;
-+ (UIColor *)textFieldSeparatorColor;
-
-///--------------------------------------
-/// @name Buttons
-///--------------------------------------
-
-+ (UIColor *)loginButtonBackgroundColor;
-+ (UIColor *)signupButtonBackgroundColor;
-+ (UIColor *)appleButtonBackgroundColor;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFColor.m b/ParseUI/ParseUI/Internal/Extensions/PFColor.m
deleted file mode 100644
index 59b6c9bc7..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFColor.m
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFColor.h"
-
-@implementation PFColor
-
-#pragma mark -
-#pragma mark Common
-
-+ (UIColor *)commonBackgroundColor {
- return [UIColor colorWithRed:249/255.0f
- green:251.0f/255.0f
- blue:1.0f
- alpha:1.0f];
-}
-
-#pragma mark -
-#pragma mark TextField
-
-+ (UIColor *)textFieldBackgroundColor {
- return [UIColor whiteColor];
-}
-
-+ (UIColor *)textFieldTextColor {
- return [UIColor blackColor];
-}
-
-+ (UIColor *)textFieldPlaceholderColor {
- return [UIColor colorWithWhite:194.0f/255.0f alpha:1.0f];
-}
-
-+ (UIColor *)textFieldSeparatorColor {
- return [UIColor colorWithWhite:227.0f/255.0f alpha:1.0f];
-}
-
-#pragma mark -
-#pragma mark Buttons
-
-+ (UIColor *)loginButtonBackgroundColor {
- return [UIColor colorWithRed:97.0f/255.0f
- green:106.f/255.0f
- blue:116.0f/255.0f
- alpha:1.0f];
-}
-
-+ (UIColor *)signupButtonBackgroundColor {
- return [UIColor colorWithRed:108.0f/255.0f
- green:150.0f/255.0f
- blue:249.0f/255.0f
- alpha:1.0f];
-}
-
-+ (UIColor *)appleButtonBackgroundColor {
- return [UIColor blackColor];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFImage.h b/ParseUI/ParseUI/Internal/Extensions/PFImage.h
deleted file mode 100644
index b7d522253..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFImage.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-@interface PFImage : UIImage
-
-+ (UIImage *)imageWithColor:(UIColor *)color;
-+ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius;
-
-+ (UIImage *)imageNamed:(NSString *)name;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFImage.m b/ParseUI/ParseUI/Internal/Extensions/PFImage.m
deleted file mode 100644
index 87e81210f..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFImage.m
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFImage.h"
-
-#import "PFColor.h"
-#import "PFRect.h"
-#import "PFResources.h"
-
-@implementation PFImage
-
-+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size
-{
- UIGraphicsBeginImageContext(size);
- CGContextRef context = UIGraphicsGetCurrentContext();
-
- CGContextSetFillColorWithColor(context, color.CGColor);
- CGContextFillRect(context, (CGRect){.size = size});
-
- UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- return image;
-}
-
-+ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius {
- CGSize size = CGSizeMake(cornerRadius * 2.0f + 1.0f, cornerRadius * 2.0f + 1.0f);
-
- UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
-
- [color setFill];
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:PFRectMakeWithSize(size) cornerRadius:cornerRadius];
- [path fill];
-
- UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius,
- cornerRadius,
- cornerRadius,
- cornerRadius)
- resizingMode:UIImageResizingModeStretch];
-
- return image;
-}
-
-+ (UIImage *)imageWithColor:(UIColor *)color {
- return [self imageWithColor:color size:CGSizeMake(1.0f, 1.0f)];
-}
-
-+ (UIImage *)imageNamed:(NSString *)imageName {
- UIImage *image = [UIImage imageNamed:imageName];
- if (image) {
- // If there is an external override for the image at the given path, use it.
- return image;
- }
-
- NSString *fileExtension = [imageName pathExtension];
- NSMutableString *filenameWithoutExtension = [[imageName stringByDeletingPathExtension] mutableCopy];
- [filenameWithoutExtension replaceOccurrencesOfString:@"-\\."
- withString:@"_"
- options:NSRegularExpressionSearch
- range:NSMakeRange(0, [filenameWithoutExtension length])];
-
- NSData *data = nil;
-
- int imageScale = (int)ceil([UIScreen mainScreen].scale);
- while (data == nil && imageScale > 1) {
- NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"%dx_%@",
- imageScale,
- fileExtension];
- SEL selector = NSSelectorFromString(selectorName);
- if ([PFResources respondsToSelector:selector]) {
- data = (NSData *)[PFResources performSelector:selector];
- }
- if (data == nil) {
- imageScale--;
- }
- }
- if (!data) {
- NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"_%@", fileExtension];
- SEL selector = NSSelectorFromString(selectorName);
- data = (NSData *)[PFResources performSelector:selector];
- }
- image = [[UIImage alloc] initWithData:data];
-
- // we need to indicate to the framework that the data is already a 2x image, otherwise the framework
- // stretches the image by 2x again. To do that, we drop down to CGImage layer to take advantage of
- // +[UIImage imageWithCGImage:scale:orientation]
- return [UIImage imageWithCGImage:image.CGImage scale:imageScale orientation:image.imageOrientation];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFRect.h b/ParseUI/ParseUI/Internal/Extensions/PFRect.h
deleted file mode 100644
index e6c1f0503..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFRect.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-#import
-
-extern CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size);
-extern CGRect PFRectMakeWithOrigin(CGPoint origin);
-extern CGRect PFRectMakeWithSize(CGSize size);
-
-extern CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect);
-extern CGSize PFSizeMin(CGSize size1, CGSize size2);
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFRect.m b/ParseUI/ParseUI/Internal/Extensions/PFRect.m
deleted file mode 100644
index 7ca81f920..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFRect.m
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFRect.h"
-
-CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size) {
- return CGRectMake(origin.x, origin.y, size.width, size.height);
-}
-
-CGRect PFRectMakeWithOrigin(CGPoint origin) {
- return PFRectMakeWithOriginSize(origin, CGSizeZero);
-}
-
-CGRect PFRectMakeWithSize(CGSize size) {
- return PFRectMakeWithOriginSize(CGPointZero, size);
-}
-
-CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect) {
- CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
- CGPoint origin = CGPointMake(floor(center.x - size.width / 2.0f),
- floor(center.y - size.height / 2.0f));
- return PFRectMakeWithOriginSize(origin, size);
-}
-
-CGSize PFSizeMin(CGSize size1, CGSize size2) {
- CGSize size = CGSizeZero;
- size.width = MIN(size1.width, size2.width);
- size.height = MIN(size1.height, size2.height);
- return size;
-}
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.h b/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.h
deleted file mode 100644
index f6742b310..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void(^PFUIAlertViewCompletion)(NSUInteger selectedOtherButtonIndex);
-typedef void(^PFUIAlertViewTextFieldCompletion)(UITextField *textField, NSUInteger selectedOtherButtonIndex);
-typedef void(^PFUIAlertViewTextFieldCustomizationHandler)(UITextField *textField);
-
-@interface PFUIAlertView : NSObject
-
-///--------------------------------------
-#pragma mark - Present
-///--------------------------------------
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message
- cancelButtonTitle:(NSString *)cancelButtonTitle
- otherButtonTitles:(nullable NSArray *)otherButtonTitles
- completion:(nullable PFUIAlertViewCompletion)completion;
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message
- textFieldCustomizationHandler:(PFUIAlertViewTextFieldCustomizationHandler)textFieldCustomizationHandler
- cancelButtonTitle:(NSString *)cancelButtonTitle
- otherButtonTitles:(nullable NSArray *)otherButtonTitles
- completion:(nullable PFUIAlertViewTextFieldCompletion)completion;
-
-///--------------------------------------
-#pragma mark - Convenience
-///--------------------------------------
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- error:(NSError *)error;
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.m b/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.m
deleted file mode 100644
index 155f70d62..000000000
--- a/ParseUI/ParseUI/Internal/Extensions/PFUIAlertView.m
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFUIAlertView.h"
-
-#import "PFLocalization.h"
-
-@interface PFUIAlertView ()
-
-@property (nonatomic, copy) PFUIAlertViewCompletion completion;
-
-@end
-
-@implementation PFUIAlertView
-
-///--------------------------------------
-#pragma mark - Present
-///--------------------------------------
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message
- cancelButtonTitle:(NSString *)cancelButtonTitle
- otherButtonTitles:(nullable NSArray *)otherButtonTitles
- completion:(nullable PFUIAlertViewCompletion)completion {
- if ([UIAlertController class] != nil) {
- __block UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title
- message:message
- preferredStyle:UIAlertControllerStyleAlert];
-
- void (^alertActionHandler)(UIAlertAction *) = [^(UIAlertAction *action) {
- if (completion) {
- // This block intentionally retains alertController, and releases it afterwards.
- if (action.style == UIAlertActionStyleCancel) {
- completion(NSNotFound);
- } else {
- NSUInteger index = [alertController.actions indexOfObject:action];
- completion(index - 1);
- }
- }
- alertController = nil;
- } copy];
-
- [alertController addAction:[UIAlertAction actionWithTitle:cancelButtonTitle
- style:UIAlertActionStyleCancel
- handler:alertActionHandler]];
-
- for (NSString *buttonTitle in otherButtonTitles) {
- [alertController addAction:[UIAlertAction actionWithTitle:buttonTitle
- style:UIAlertActionStyleDefault
- handler:alertActionHandler]];
- }
-
- [viewController presentViewController:alertController animated:YES completion:nil];
- } else {
-#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
- __block PFUIAlertView *pfAlertView = [[self alloc] init];
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
- message:message
- delegate:nil
- cancelButtonTitle:cancelButtonTitle
- otherButtonTitles:nil];
-
- for (NSString *buttonTitle in otherButtonTitles) {
- [alertView addButtonWithTitle:buttonTitle];
- }
-
- pfAlertView.completion = ^(NSUInteger index) {
- if (completion) {
- completion(index);
- }
-
- pfAlertView = nil;
- };
-
- alertView.delegate = pfAlertView;
- [alertView show];
-#endif
- }
-}
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message
- textFieldCustomizationHandler:(PFUIAlertViewTextFieldCustomizationHandler)textFieldCustomizationHandler
- cancelButtonTitle:(NSString *)cancelButtonTitle
- otherButtonTitles:(nullable NSArray *)otherButtonTitles
- completion:(nullable PFUIAlertViewTextFieldCompletion)completion {
- if ([UIAlertController class] != nil) {
- __block UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title
- message:message
- preferredStyle:UIAlertControllerStyleAlert];
- [alertController addTextFieldWithConfigurationHandler:textFieldCustomizationHandler];
- void (^alertActionHandler)(UIAlertAction *) = [^(UIAlertAction *action) {
- if (completion) {
- UITextField *textField = alertController.textFields.firstObject;
- // This block intentionally retains alertController, and releases it afterwards.
- if (action.style == UIAlertActionStyleCancel) {
- completion(textField, NSNotFound);
- } else {
- NSUInteger index = [alertController.actions indexOfObject:action];
- completion(textField, index - 1);
- }
- }
- alertController = nil;
- } copy];
-
- [alertController addAction:[UIAlertAction actionWithTitle:cancelButtonTitle
- style:UIAlertActionStyleCancel
- handler:alertActionHandler]];
-
- for (NSString *buttonTitle in otherButtonTitles) {
- [alertController addAction:[UIAlertAction actionWithTitle:buttonTitle
- style:UIAlertActionStyleDefault
- handler:alertActionHandler]];
- }
-
- [viewController presentViewController:alertController animated:YES completion:nil];
- } else {
-#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
- __block PFUIAlertView *pfAlertView = [[self alloc] init];
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
- message:message
- delegate:nil
- cancelButtonTitle:cancelButtonTitle
- otherButtonTitles:nil];
- alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
- for (NSString *buttonTitle in otherButtonTitles) {
- [alertView addButtonWithTitle:buttonTitle];
- }
- textFieldCustomizationHandler([alertView textFieldAtIndex:0]);
-
- __weak UIAlertView *walertView = alertView;
- pfAlertView.completion = ^(NSUInteger index) {
- if (completion) {
- UITextField *textField = [walertView textFieldAtIndex:0];
- completion(textField, index);
- }
-
- pfAlertView = nil;
- };
-
- alertView.delegate = pfAlertView;
- [alertView show];
-#endif
- }
-}
-
-///--------------------------------------
-#pragma mark - Convenience
-///--------------------------------------
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- error:(NSError *)error {
- NSString *message = error.userInfo[@"error"];
- if (!message) {
- message = [error.userInfo[@"originalError"] localizedDescription];
- }
- if (!message) {
- message = [error localizedDescription];
- }
- [self presentAlertInViewController:viewController withTitle:title message:message];
-}
-
-+ (void)presentAlertInViewController:(UIViewController *)viewController
- withTitle:(NSString *)title
- message:(nullable NSString *)message {
- [self presentAlertInViewController:viewController
- withTitle:title
- message:message
- cancelButtonTitle:PFLocalizedString(@"OK", @"OK")
- otherButtonTitles:nil
- completion:nil];
-}
-
-#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
-
-///--------------------------------------
-#pragma mark - UIAlertViewDelegate
-///--------------------------------------
-
-- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
- if (self.completion) {
- if (buttonIndex == alertView.cancelButtonIndex) {
- self.completion(NSNotFound);
- } else {
- self.completion(buttonIndex - 1);
- }
- }
-}
-
-#endif
-
-@end
diff --git a/ParseUI/ParseUI/Internal/PFImageCache.h b/ParseUI/ParseUI/Internal/PFImageCache.h
deleted file mode 100644
index 38c184e28..000000000
--- a/ParseUI/ParseUI/Internal/PFImageCache.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-/**
- A memory cache for UIImage, based on NSCache
- */
-@interface PFImageCache : NSCache
-
-+ (instancetype)sharedCache;
-
-- (void)setImage:(UIImage *)image forURL:(NSURL *)url;
-- (UIImage *)imageForURL:(NSURL *)url;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/PFImageCache.m b/ParseUI/ParseUI/Internal/PFImageCache.m
deleted file mode 100644
index 260cd50e7..000000000
--- a/ParseUI/ParseUI/Internal/PFImageCache.m
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFImageCache.h"
-
-static NSString *PFImageCacheKeyFromURL(NSURL *url) {
- return [url absoluteString];
-}
-
-@implementation PFImageCache
-
-+ (instancetype)sharedCache {
- static dispatch_once_t onceToken;
- static PFImageCache *sharedCache;
- dispatch_once(&onceToken, ^{
- sharedCache = [[self alloc] init];
- });
- return sharedCache;
-}
-
-- (void)setImage:(UIImage *)image forURL:(NSURL *)url {
- [self setObject:image forKey:PFImageCacheKeyFromURL(url)];
-}
-
-- (UIImage *)imageForURL:(NSURL *)url {
- return [self objectForKey:PFImageCacheKeyFromURL(url)];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/PFLocalization.h b/ParseUI/ParseUI/Internal/PFLocalization.h
deleted file mode 100644
index a328dfb83..000000000
--- a/ParseUI/ParseUI/Internal/PFLocalization.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#define PFLocalizedString(key, comment) \
-[PFLocalization localizedStringForKey:key]
-
-/**
- Used by the above macro to fetch a localized string
- */
-@interface PFLocalization : NSObject
-
-+ (NSString *)localizedStringForKey:key;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/PFLocalization.m b/ParseUI/ParseUI/Internal/PFLocalization.m
deleted file mode 100644
index 947665dd9..000000000
--- a/ParseUI/ParseUI/Internal/PFLocalization.m
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFLocalization.h"
-
-@implementation PFLocalization
-
-+ (NSString *)localizedStringForKey:key {
- return [[self resourcesBundle] localizedStringForKey:key value:nil table:@"ParseUI"];
-}
-
-+ (NSBundle *)resourcesBundle {
- static NSBundle *bundle;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- NSBundle *classBundle = [NSBundle bundleForClass:[self class]];
- NSURL *bundleURL = [classBundle URLForResource:@"ParseUI" withExtension:@"bundle"];
-
- if (bundleURL) {
- bundle = [NSBundle bundleWithURL:bundleURL];
- } else {
- bundleURL = [classBundle URLForResource:@"ParseObjC_ParseUI" withExtension:@"bundle"];
- if (bundleURL) {
- bundle = [NSBundle bundleWithURL:bundleURL];
- }
- else {
- bundle = [NSBundle mainBundle];
- }
- }
- });
- return bundle;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.h b/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.h
deleted file mode 100644
index a7b79552c..000000000
--- a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.h
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// PFAppleAuthenticationProvider.h
-// ParseUIDemo
-//
-// Created by Darren Black on 20/12/2019.
-// Copyright © 2019 Parse Inc. All rights reserved.
-//
-
-#import
-
-@import ParseCore;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PFAppleAuthenticationProvider : NSObject
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.m b/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.m
deleted file mode 100644
index 033f1ebc5..000000000
--- a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleAuthenticationProvider.m
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// PFAppleAuthenticationProvider.m
-// ParseUIDemo
-//
-// Created by Darren Black on 20/12/2019.
-// Copyright © 2019 Parse Inc. All rights reserved.
-//
-
-#import "PFAppleAuthenticationProvider.h"
-
-@implementation PFAppleAuthenticationProvider
-
-- (BOOL)restoreAuthenticationWithAuthData:(nullable NSDictionary *)authData {
- return authData[@"id"] != nil;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.h b/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.h
deleted file mode 100644
index ff92b4f5c..000000000
--- a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// PFAppleUtils.h
-// ParseUIDemo
-//
-// Created by Darren Black on 20/12/2019.
-// Copyright © 2019 Parse Inc. All rights reserved.
-//
-
-#import
-
-@import ParseCore;
-@import AuthenticationServices;
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString *const PFAppleUserAuthenticationType;
-extern NSString *const PFAppleAuthUserKey;
-extern NSString *const PFAppleAuthCredentialKey;
-
-API_AVAILABLE(ios(13.0))
-@interface PFAppleLoginManager : NSObject
-
-@end
-
-API_AVAILABLE(ios(13.0))
-@interface PFAppleUtils : NSObject
-
-+ (BFTask *)logInInBackground;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.m b/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.m
deleted file mode 100644
index 1e32d097b..000000000
--- a/ParseUI/ParseUI/Internal/Sign In With Apple/PFAppleUtils.m
+++ /dev/null
@@ -1,125 +0,0 @@
-//
-// PFAppleUtils.m
-// ParseUIDemo
-//
-// Created by Darren Black on 20/12/2019.
-// Copyright © 2019 Parse Inc. All rights reserved.
-//
-
-#import "PFAppleUtils.h"
-#import "PFAppleAuthenticationProvider.h"
-#import
-
-#if __has_include()
-#import
-#else
-#import "BFTask.h"
-#endif
-
-NSString *const PFAppleUserAuthenticationType = @"apple";
-NSString *const PFAppleAuthUserKey = @"user";
-NSString *const PFAppleAuthCredentialKey = @"credential";
-
-API_AVAILABLE(ios(13.0))
-@interface PFAppleLoginManager ()
-
-@property (strong, nonatomic) BFTask *userTask;
-@property (strong, nonatomic) BFTaskCompletionSource *completionSource;
-@property (strong, nonatomic) PFAppleLoginManager *strongSelf;
-
-@property (weak, nonatomic) ASAuthorizationController *controller;
-
-@end
-
-@implementation PFAppleLoginManager
-
--(BFTask *) loginTaskWithController:(ASAuthorizationController *)controller {
- BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource];
-
- self.userTask = source.task;
- controller.delegate = self;
- controller.presentationContextProvider = self;
- self.completionSource = source;
- self.strongSelf = self;
- self.controller = controller;
-
- return source.task;
-}
-
-- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController:(nonnull ASAuthorizationController *)controller {
- return UIApplication.sharedApplication.keyWindow;
-}
-
-- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization {
- ASAuthorizationAppleIDCredential *cred = authorization.credential;
- NSString *userId = cred.user;
- NSData *token = cred.identityToken;
- NSString *tokenString = [[NSString alloc] initWithData:token encoding:NSUTF8StringEncoding];
-
- __weak typeof(self) wself = self;
-
- [[[PFUser logInWithAuthTypeInBackground:PFAppleUserAuthenticationType
- authData:@{@"token" : tokenString, @"id" : userId}] continueWithSuccessBlock:^id _Nullable(BFTask<__kindof PFUser *> * _Nonnull t) {
- __strong typeof(wself) sself = wself;
- [sself.completionSource setResult:@{PFAppleAuthUserKey : t.result,
- PFAppleAuthCredentialKey : cred}];
- sself.strongSelf = nil;
- return t;
- }] continueWithBlock:^id _Nullable(BFTask * _Nonnull t) {
- __strong typeof(wself) sself = wself;
- if (t.error) {
- [sself.completionSource setError:t.error];
- sself.strongSelf = nil;
- }
- return nil;
- }];
-}
-
-- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error {
- [self.completionSource setError:error];
-}
-
-@end
-
-@interface PFAppleUtils ()
-
-@property (strong, nonatomic) PFAppleUtils *strongSelf;
-
-@end
-
-@implementation PFAppleUtils
-
-static PFAppleAuthenticationProvider *_authenticationProvider;
-
-- (instancetype)init
-{
- self = [super init];
- if (self) {
- if (!_authenticationProvider) {
- _authenticationProvider = [[PFAppleAuthenticationProvider alloc] init];
- [PFUser registerAuthenticationDelegate:_authenticationProvider forAuthType:PFAppleUserAuthenticationType];
- }
- }
- return self;
-}
-
-+ (BFTask *)logInInBackground {
- PFAppleLoginManager *manager = [PFAppleLoginManager new];
- return [PFAppleUtils logInInBackgroundWithManager:manager];
-}
-
-+ (BFTask *)logInInBackgroundWithManager:(PFAppleLoginManager *)manager {
- if (!_authenticationProvider) {
- [PFAppleUtils new];
- }
-
- ASAuthorizationAppleIDProvider *provider = [ASAuthorizationAppleIDProvider new];
- ASAuthorizationAppleIDRequest *request = [provider createRequest];
- request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
-
- ASAuthorizationController *controller = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
- [controller performRequests];
- return [manager loginTaskWithController:controller];
-}
-@end
-
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.h b/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.h
deleted file mode 100644
index c9772ef62..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-typedef NS_ENUM(uint8_t, PFActionButtonStyle)
-{
- PFActionButtonStyleNormal,
- PFActionButtonStyleWide
-};
-
-@class PFActionButtonConfiguration;
-
-@interface PFActionButton : UIButton
-
-@property (nonatomic, assign, getter=isLoading) BOOL loading;
-
-@property (nonatomic, assign) PFActionButtonStyle buttonStyle;
-
-///--------------------------------------
-/// @name Class
-///--------------------------------------
-
-+ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle;
-
-///--------------------------------------
-/// @name Init
-///--------------------------------------
-
-- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration
- buttonStyle:(PFActionButtonStyle)buttonStyle NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
-
-@end
-
-@interface PFActionButtonConfiguration : NSObject
-
-@property (nonatomic, strong, readonly) UIColor *backgroundImageColor;
-@property (nonatomic, strong, readonly) UIImage *image;
-
-- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor
- image:(UIImage *)image NS_DESIGNATED_INITIALIZER;
-
-- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style;
-- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.m b/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.m
deleted file mode 100644
index b40278896..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFActionButton.m
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFActionButton.h"
-
-#import "PFImage.h"
-#import "PFRect.h"
-
-static const UIEdgeInsets PFActionButtonContentEdgeInsets = { .top = 0.0f, .left = 12.0f, .bottom = 0.0f, .right = 0.0f };
-
-@interface PFActionButton ()
-{
- UIActivityIndicatorView *_activityIndicatorView;
-}
-
-@property (nonatomic, strong) PFActionButtonConfiguration *pfActionButtonConfiguration;
-
-- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
-
-@end
-
-@implementation PFActionButton
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- return [super initWithFrame:frame];
-}
-
-- (instancetype)initWithCoder:(nonnull NSCoder *)decoder {
- return [super initWithCoder:decoder];
-}
-
-- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration
- buttonStyle:(PFActionButtonStyle)buttonStyle {
- self = [super initWithFrame:CGRectZero];
- if (!self) return nil;
-
- self.buttonStyle = buttonStyle;
- self.pfActionButtonConfiguration = configuration;
-
- self.backgroundColor = [UIColor clearColor];
- self.titleLabel.font = [UIFont systemFontOfSize:16.0f];
-
- self.contentEdgeInsets = UIEdgeInsetsZero;
- self.imageEdgeInsets = UIEdgeInsetsZero;
-
- UIImage *backgroundImage = [PFImage imageWithColor:configuration.backgroundImageColor cornerRadius:4.0f];
- [self setBackgroundImage:backgroundImage forState:UIControlStateNormal];
-
- [self setImage:configuration.image forState:UIControlStateNormal];
-
- [self setTitle:[configuration titleForButtonStyle:buttonStyle]
- forState:UIControlStateNormal];
-
- return self;
-}
-
-#pragma mark -
-#pragma mark Layout
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- _activityIndicatorView.center = self.imageView.center;
- self.imageView.alpha = (self.loading ? 0.0f : 1.0f);
-}
-
-- (CGSize)sizeThatFits:(CGSize)boundingSize {
- CGSize size = CGSizeZero;
- size.width = MAX([super sizeThatFits:boundingSize].width, boundingSize.width);
- size.height = MIN(44.0f, boundingSize.height);
- return size;
-}
-
-- (CGRect)imageRectForContentRect:(CGRect)contentRect {
- CGRect imageRect = PFRectMakeWithSize([self imageForState:UIControlStateNormal].size);
- imageRect.origin.x = PFActionButtonContentEdgeInsets.left;
- imageRect.origin.y = CGRectGetMidY(contentRect) - CGRectGetMidY(imageRect);
- return imageRect;
-}
-
-- (CGRect)titleRectForContentRect:(CGRect)contentRect {
- contentRect.origin.x = CGRectGetMaxX([self imageRectForContentRect:contentRect]);
- contentRect.size.width = CGRectGetWidth(self.bounds) - CGRectGetMaxX([self imageRectForContentRect:contentRect]);
-
- CGSize size = [super titleRectForContentRect:contentRect].size;
- CGRect rect = PFRectMakeWithSizeCenteredInRect(size, contentRect);
- return rect;
-}
-
-#pragma mark -
-#pragma mark Configuration
-
-+ (UIColor *)backgroundImageColor {
- return [UIColor clearColor];
-}
-
-+ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle {
- return nil;
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (void)setLoading:(BOOL)loading {
- if (self.loading != loading) {
- if (loading) {
- if (!_activityIndicatorView) {
- _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
- }
-
- [_activityIndicatorView startAnimating];
- [self addSubview:_activityIndicatorView];
- [self setNeedsLayout];
- } else {
- [_activityIndicatorView stopAnimating];
- [_activityIndicatorView removeFromSuperview];
- }
-
- self.imageView.alpha = (loading ? 0.0f : 1.0f);
- }
-}
-
-- (BOOL)isLoading {
- return [_activityIndicatorView isAnimating];
-}
-
-- (void)setButtonStyle:(PFActionButtonStyle)buttonStyle {
- if (self.buttonStyle != buttonStyle) {
- _buttonStyle = buttonStyle;
-
- [self setTitle:[self.pfActionButtonConfiguration titleForButtonStyle:self.buttonStyle] forState:UIControlStateNormal];
- }
-}
-
-@end
-
-@interface PFActionButtonConfiguration () {
- NSMutableDictionary *_titlesDictionary;
-}
-
-@property (nonatomic, strong, readwrite) UIColor *backgroundImageColor;
-@property (nonatomic, strong, readwrite) UIImage *image;
-
-@end
-
-@implementation PFActionButtonConfiguration
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)init {
- return [self initWithBackgroundImageColor:nil image:nil];
-}
-
-- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor
- image:(UIImage *)image {
- self = [super init];
- if (!self) return nil;
-
- _backgroundImageColor = backgroundImageColor;
- _image = image;
-
- return self;
-}
-
-#pragma mark -
-#pragma mark Title
-
-- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style {
- if (!_titlesDictionary) {
- _titlesDictionary = [NSMutableDictionary dictionaryWithCapacity:style];
- }
- _titlesDictionary[@(style)] = title;
-}
-
-- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style {
- return _titlesDictionary[@(style)];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.h b/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.h
deleted file mode 100644
index c34e4db00..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-@interface PFDismissButton : UIButton
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.m b/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.m
deleted file mode 100644
index ba40367d4..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFDismissButton.m
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFDismissButton.h"
-
-#import "PFRect.h"
-
-@implementation PFDismissButton
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (!self) return nil;
-
- [self setImage:[self _defaultImage] forState:UIControlStateNormal];
-
- return self;
-}
-
-#pragma mark -
-#pragma mark Init
-
-- (UIImage *)_defaultImage {
- CGRect imageRect = PFRectMakeWithSize(CGSizeMake(22.0f, 22.0f));
-
- UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0.0f);
-
- [[UIColor colorWithRed:91.0f/255.0f green:107.0f/255.0f blue:118.0f/255.0f alpha:1.0f] setStroke];
-
- UIBezierPath *path = [UIBezierPath bezierPath];
-
- [path moveToPoint:CGPointZero];
- [path addLineToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMaxY(imageRect))];
-
- [path moveToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMinY(imageRect))];
- [path addLineToPoint:CGPointMake(CGRectGetMinX(imageRect), CGRectGetMaxY(imageRect))];
-
- path.lineWidth = 2.0f;
-
- [path stroke];
-
- UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
-
- return image;
-}
-
-#pragma mark -
-#pragma mark UIView
-
-- (CGSize)sizeThatFits:(CGSize)boundingSize {
- CGSize size = CGSizeZero;
- size.width = MIN(22.0f, boundingSize.width);
- size.height = MIN(22.0f, boundingSize.height);
- return size;
-}
-
-- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
-{
- CGRect bigBounds = CGRectInset(self.bounds, -22.0f, -22.0f);
- return CGRectContainsPoint(bigBounds, point);
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.h b/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.h
deleted file mode 100644
index 85171806d..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-@interface PFPrimaryButton : UIButton
-
-@property (nonatomic, assign, getter=isLoading) BOOL loading;
-
-- (instancetype)initWithBackgroundImageColor:(UIColor *)color NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.m b/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.m
deleted file mode 100644
index 5c5a076a5..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFPrimaryButton.m
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFPrimaryButton.h"
-
-#import "PFImage.h"
-#import "PFRect.h"
-
-@interface PFPrimaryButton ()
-{
- UIActivityIndicatorView *_activityIndicatorView;
-}
-
-- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
-
-@end
-
-@implementation PFPrimaryButton
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- return [super initWithFrame:frame];
-}
-
-- (instancetype)initWithCoder:(nonnull NSCoder *)decoder {
- return [super initWithCoder:decoder];
-}
-
-- (instancetype)initWithBackgroundImageColor:(UIColor *)color {
- self = [super initWithFrame:CGRectZero];
- if (!self) return nil;
-
- [self setBackgroundImage:[PFImage imageWithColor:color] forState:UIControlStateNormal];
-
- self.titleLabel.font = [UIFont systemFontOfSize:20.0f];
- self.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter;
- self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
-
- return self;
-}
-
-#pragma mark -
-#pragma mark Layout
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- CGFloat activityIndicatorRightInset = 12.0f;
-
- CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicatorView.bounds.size, self.bounds);
- activityIndicatorFrame.origin.x = (CGRectGetMinX(self.titleLabel.frame)
- - CGRectGetWidth(activityIndicatorFrame)
- - activityIndicatorRightInset);
- _activityIndicatorView.frame = activityIndicatorFrame;
-}
-
-- (CGSize)sizeThatFits:(CGSize)boundingSize {
- CGSize size = CGSizeZero;
- size.width = boundingSize.width;
- size.height = MIN(56.0f, boundingSize.height);
- return size;
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (void)setLoading:(BOOL)loading {
- if (self.loading != loading) {
- if (loading) {
- if (!_activityIndicatorView) {
- _activityIndicatorView = [[UIActivityIndicatorView alloc]
- initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
- }
-
- [_activityIndicatorView startAnimating];
- [self addSubview:_activityIndicatorView];
- [self setNeedsLayout];
- } else {
- [_activityIndicatorView stopAnimating];
- [_activityIndicatorView removeFromSuperview];
- }
- }
-}
-
-- (BOOL)isLoading {
- return [_activityIndicatorView isAnimating];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.h b/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.h
deleted file mode 100644
index 75db8f251..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-@interface PFTextButton : UIButton
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.m b/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.m
deleted file mode 100644
index 9ada72677..000000000
--- a/ParseUI/ParseUI/Internal/Views/Buttons/PFTextButton.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFTextButton.h"
-
-@implementation PFTextButton
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (!self) return nil;
-
- self.titleLabel.font = [UIFont systemFontOfSize:16.0f];
- [self setTitleColor:[UIColor colorWithRed:82.0f/255.0f
- green:152.0f/255.0f
- blue:252.0f/255.0f
- alpha:1.0f]
- forState:UIControlStateNormal];
-
- return self;
-}
-
-#pragma mark -
-#pragma mark UIView
-
-- (CGSize)sizeThatFits:(CGSize)boundingSize {
- CGSize size = [super sizeThatFits:boundingSize];
- size.width = MAX(32.0f, boundingSize.width);
- size.height = MIN(32.0f, boundingSize.height);
- return size;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/PFLoadingView.h b/ParseUI/ParseUI/Internal/Views/PFLoadingView.h
deleted file mode 100644
index 2663181d1..000000000
--- a/ParseUI/ParseUI/Internal/Views/PFLoadingView.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-/**
- A loading view that is used to show users that data is being loaded before any data is available.
- */
-@interface PFLoadingView : UIView
-
-@end
diff --git a/ParseUI/ParseUI/Internal/Views/PFLoadingView.m b/ParseUI/ParseUI/Internal/Views/PFLoadingView.m
deleted file mode 100644
index 1b36ec024..000000000
--- a/ParseUI/ParseUI/Internal/Views/PFLoadingView.m
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFLoadingView.h"
-
-#import "PFRect.h"
-#import "PFLocalization.h"
-
-@interface PFLoadingView ()
-
-@property (nonatomic, strong) UILabel *loadingLabel;
-@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator;
-
-@end
-
-@implementation PFLoadingView
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
- [_activityIndicator startAnimating];
- [self addSubview:_activityIndicator];
-
- _loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- _loadingLabel.text = PFLocalizedString(@"Loading...", @"Loading message of PFQueryTableViewController");
- _loadingLabel.backgroundColor = [UIColor clearColor];
- _loadingLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
- _loadingLabel.shadowColor = [UIColor whiteColor];
- [_loadingLabel sizeToFit];
- [self addSubview:_loadingLabel];
- }
- return self;
-}
-
-#pragma mark -
-#pragma mark UIView
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- const CGRect bounds = self.bounds;
-
- CGFloat viewsInset = 4.0f;
- CGFloat startX = floor((CGRectGetMaxX(bounds)
- - CGRectGetWidth(_loadingLabel.frame)
- - CGRectGetWidth(_activityIndicator.frame)
- - viewsInset)
- / 2.0f);
-
- CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicator.frame.size, bounds);
- activityIndicatorFrame.origin.x = startX;
- _activityIndicator.frame = activityIndicatorFrame;
-
- CGRect loadingLabelFrame = PFRectMakeWithSizeCenteredInRect(_loadingLabel.frame.size, bounds);
- loadingLabelFrame.origin.x = CGRectGetMaxX(activityIndicatorFrame) + viewsInset;
- _loadingLabel.frame = loadingLabelFrame;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Resources/Images/apple_icon.png b/ParseUI/ParseUI/Resources/Images/apple_icon.png
deleted file mode 100644
index 7ff6bcc5d..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/apple_icon.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/apple_icon@2x.png b/ParseUI/ParseUI/Resources/Images/apple_icon@2x.png
deleted file mode 100644
index c826f381f..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/apple_icon@2x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/apple_icon@3x.png b/ParseUI/ParseUI/Resources/Images/apple_icon@3x.png
deleted file mode 100644
index eb3ec756a..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/apple_icon@3x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/facebook_icon.png b/ParseUI/ParseUI/Resources/Images/facebook_icon.png
deleted file mode 100644
index 1d236b317..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/facebook_icon.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/facebook_icon@2x.png b/ParseUI/ParseUI/Resources/Images/facebook_icon@2x.png
deleted file mode 100644
index de09d02b7..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/facebook_icon@2x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/facebook_icon@3x.png b/ParseUI/ParseUI/Resources/Images/facebook_icon@3x.png
deleted file mode 100644
index 287456bb8..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/facebook_icon@3x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/parse_logo.png b/ParseUI/ParseUI/Resources/Images/parse_logo.png
deleted file mode 100644
index 68d8befc2..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/parse_logo.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/parse_logo@2x.png b/ParseUI/ParseUI/Resources/Images/parse_logo@2x.png
deleted file mode 100644
index f2c3b419d..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/parse_logo@2x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/parse_logo@3x.png b/ParseUI/ParseUI/Resources/Images/parse_logo@3x.png
deleted file mode 100644
index 80629f4e6..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/parse_logo@3x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/twitter_icon.png b/ParseUI/ParseUI/Resources/Images/twitter_icon.png
deleted file mode 100644
index 386d40b5c..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/twitter_icon.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/twitter_icon@2x.png b/ParseUI/ParseUI/Resources/Images/twitter_icon@2x.png
deleted file mode 100644
index a319f37bc..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/twitter_icon@2x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Images/twitter_icon@3x.png b/ParseUI/ParseUI/Resources/Images/twitter_icon@3x.png
deleted file mode 100644
index d6cc3bd3f..000000000
Binary files a/ParseUI/ParseUI/Resources/Images/twitter_icon@3x.png and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Info-iOS.plist b/ParseUI/ParseUI/Resources/Info-iOS.plist
deleted file mode 100644
index e010b6365..000000000
--- a/ParseUI/ParseUI/Resources/Info-iOS.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- English
- CFBundleExecutable
- ParseUI
- CFBundleIdentifier
- com.parse.parseui
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundlePackageType
- FMWK
- CFBundleShortVersionString
- 3.0.0
- CFBundleSignature
- ????
- CFBundleSupportedPlatforms
-
- iPhoneOS
-
- CFBundleVersion
- 3.0.0
- MinimumOSVersion
- 12.0
-
-
diff --git a/ParseUI/ParseUI/Resources/Localization/de.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/de.lproj/ParseUI.strings
deleted file mode 100644
index 7f8656356..000000000
--- a/ParseUI/ParseUI/Resources/Localization/de.lproj/ParseUI.strings
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Additional */
-"Additional" = "Zusätzlich";
-
-/* Password reset message in PFLogInViewController */
-"An email with reset instructions has been sent to '%@'." = "Eine E-Mail mit Anweisungen zum Zurücksetzen wurde gesendet an '%@' gesendet.";
-
-/* Cancel */
-"Cancel" = "Abbrechen";
-
-/* Download Error */
-"Download Error" = "Download-Fehler";
-
-/* DOWNLOADING */
-"DOWNLOADING" = "DOWNLOADING";
-
-/* Email */
-"Email" = "E-Mail";
-
-/* Error */
-"Error" = "Fehler";
-
-/* Error occurred during deletion */
-"Error occurred during deletion" = "Fehler beim Löschen";
-
-/* Forgot Password? */
-"Forgot Password?" = "Passwort vergessen?";
-
-/* INSTALLED */
-"INSTALLED" = "INSTALLED";
-
-/* Load more... */
-"Load more..." = "Laden Sie mehr ...";
-
-/* Loading message of PFQueryTableViewController */
-"Loading..." = "Laden...";
-
-/* Log In */
-"Log In" = "Einloggen";
-
-/* Login failed alert title in PFLogInViewController */
-"Login Failed" = "Anmeldung fehlgeschlagen";
-
-/* OK */
-"OK" = "OK";
-
-/* Password */
-"Password" = "Passwort";
-
-/* Password too short error message in PFSignUpViewController */
-"Password must be at least %d characters." = "Das Passwort muss mindestens %d Zeichen lang sein.";
-
-/* Password reset success alert title in PFLogInViewController. */
-"Password Reset" = "Passwort zurücksetzen";
-
-/* Password reset error alert title in PFLogInViewController. */
-"Password Reset Failed" = "Passwort rücksetzen gescheitert";
-
-/* Password missing error message in PFSignUpViewController */
-"Please enter a password." = "Bitte ein Passwort eingeben.";
-
-/* Username missing error message in PFSignUpViewController */
-"Please enter a username." = "Bitte einen Benutzernamen eingeben.";
-
-/* Email missing error message in PFSignUpViewController */
-"Please enter an email." = "Bitte eine E-Mail Adresse eingeben.";
-
-/* Email request message in PFLogInViewController */
-"Please enter the email address for your account." = "Bitte geben Sie die E-Mail -Adresse für Ihr Konto ein.";
-
-/* Generic login failed alert message in PFLogInViewController */
-"Please try again" = "Bitte versuche es erneut";
-
-/* Purchase Error */
-"Purchase Error" = "Kauf Fehler";
-
-/* Forgot password request title in PFLogInViewController */
-"Reset Password" = "Passwort zurücksetzen";
-
-/* Sign Up */
-"Sign Up" = "Anmelden";
-
-/* Sign Up Error */
-"Sign Up Error" = "Fehler bei der Registrierung";
-
-/* Email is taken error format in PFSignUpViewController. */
-"The email '%@' is taken. Please try using a different email." = "Die E-Mail-Adresse '%@' wird bereits benutzt. Bitte versuchen Sie eine andere E-Mail-Adresse.";
-
-/* Invalid email address error message in PFSignUpViewControllers */
-"The email address is invalid. Please enter a valid email." = "Die E-Mail Adresse ist ungültig. Bitte geben Sie eine gültige E-Mail-Adresse ein.";
-
-/* Username taken error format in PFSignUpViewController */
-"The username '%@' is taken. Please try choosing a different username." = "Der Benutzername '%@' wird bereits benutzt. Bitte versuchen Sie einen anderen Benutzernamen.";
-
-/* Invalid login credentials alert message in PFLogInViewController */
-"The username and password you entered don't match" = "Der Benutzername und das eingegebene Passwort stimmen nicht überein";
-
-/* Username */
-"Username" = "Benutzername";
diff --git a/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings
deleted file mode 100644
index d656c63c6..000000000
Binary files a/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Localization/fr.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/fr.lproj/ParseUI.strings
deleted file mode 100644
index cf2015c3e..000000000
Binary files a/ParseUI/ParseUI/Resources/Localization/fr.lproj/ParseUI.strings and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Localization/he.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/he.lproj/ParseUI.strings
deleted file mode 100644
index bea566232..000000000
Binary files a/ParseUI/ParseUI/Resources/Localization/he.lproj/ParseUI.strings and /dev/null differ
diff --git a/ParseUI/ParseUI/Resources/Localization/pt-BR.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/pt-BR.lproj/ParseUI.strings
deleted file mode 100644
index 97cb0edda..000000000
--- a/ParseUI/ParseUI/Resources/Localization/pt-BR.lproj/ParseUI.strings
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Additional */
-"Additional" = "Adicional";
-
-/* Password reset message in PFLogInViewController */
-"An email with reset instructions has been sent to '%@'." = "Um email com as instruções para redefinir a senha foi enviado para '%@'";
-
-/* Cancel */
-"Cancel" = "Cancelar";
-
-/* Downloading Error */
-"Downloading Error" = "Erro de Download";
-
-/* DOWNLOADING */
-"DOWNLOADING" = "FAZENDO DOWNLOAD";
-
-/* Email */
-"Email" = "Email";
-
-/* Error */
-"Error" = "Erro";
-
-/* Error occurred during deletion */
-"Error occurred during deletion" = "Ocorreu um erro ao apagar";
-
-/* Forgot Password? */
-"Forgot Password?" = "Esqueceu a senha?";
-
-/* INSTALLED */
-"INSTALLED" = "INSTALADO";
-
-/* Load more... */
-"Load more..." = "Carregar mais...";
-
-/* Loading message of PFQueryTableViewController */
-"Loading..." = "Carregando...";
-
-/* Log In */
-"Log In" = "Inicial Sessão";
-
-/* Login failed alert title in PFLogInViewController */
-"Login Failed" = "Falha ao Entrar";
-
-/* OK */
-"OK" = "OK";
-
-/* Password */
-"Password" = "Senha";
-
-/* Password too short error message in PFSignUpViewController */
-"Password must be at least %d characters." = "A senha deve ter ao menos %d caracteres.";
-
-/* Password reset success alert title in PFLogInViewController. */
-"Password Reset" = "Senha Redefinida";
-
-/* Password reset error alert title in PFLogInViewController. */
-"Password Reset Failed" = "Falha ao Redefinir a Senha";
-
-/* Password missing error message in PFSignUpViewController */
-"Please enter a password." = "Por favor insira a senha.";
-
-/* Username missing error message in PFSignUpViewController */
-"Please enter a username." = "Por favor insira o nome de usuário.";
-
-/* Email missing error message in PFSignUpViewController */
-"Please enter an email." = "Por favor insira o email.";
-
-/* Email request message in PFLogInViewController */
-"Please enter the email address for your account." = "Por favor insira o endereço de email da sua conta.";
-
-/* Generic login failed alert message in PFLogInViewController */
-"Please try again" = "Por favor tente novamente";
-
-/* Purchase Error */
-"Purchase Error" = "Erro na Compra";
-
-/* Forgot password title in PFLogInViewController */
-"Reset Password" = "Redefinir Senha";
-
-/* Sign Up */
-"Sign Up" = "Cadastre-se";
-
-/* Sign Up Error */
-"Sign Up Error" = "Erro no Cadastro";
-
-/* Email is taken error format in PFSignUpViewController. */
-"The email '%@' is taken. Please try using a different email." = "O email '%@' já estea cadastrado. Por favor tente com outro email";
-
-/* Invalid email address error message in PGSighUpViewController */
-"The email address is invalid. Please enter a valid email." = "O endereço de email é inválido. Por favor coloque um endereço válido de email.";
-
-/* Username taken error format in PFSignUpViewController */
-"The username '%@' is taken. Please try choosing a different username." = "O nome de usuário '%@' já está cadastrado. Por favir tente utilizando um nome de usuário diferente.";
-
-/* Invalid login credentials alert message in PFLogInViewController */
-"The username and password you entered don't match" = "O nome de usuário e a senha fornecidas não batem";
-
-/* Username */
-"Username" = "Nome de usuário";
-
diff --git a/ParseUI/ParseUI/Resources/Localization/sv.lproj/ParseUI.strings b/ParseUI/ParseUI/Resources/Localization/sv.lproj/ParseUI.strings
deleted file mode 100644
index ca1c83bd8..000000000
Binary files a/ParseUI/ParseUI/Resources/Localization/sv.lproj/ParseUI.strings and /dev/null differ
diff --git a/ParseUI/ParseUI/Source/PFCollectionViewCell.h b/ParseUI/ParseUI/Source/PFCollectionViewCell.h
deleted file mode 100644
index 3c7104368..000000000
--- a/ParseUI/ParseUI/Source/PFCollectionViewCell.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#import "ParseUIConstants.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class PFImageView;
-@class PFObject;
-
-/**
- The `PFCollectionViewCell` class represents a collection view cell which can
- download and display remote images stored on Parse as well as has a default simple text label.
- */
-@interface PFCollectionViewCell : UICollectionViewCell
-
-/**
- A simple lazy-loaded label for the collection view cell.
- */
-@property (nonatomic, strong, readonly) UILabel *textLabel;
-
-/**
- The lazy-loaded imageView of the collection view cell.
-
- @see PFImageView
- */
-@property (nonatomic, strong, readonly) PFImageView *imageView;
-
-/**
- This method should update all the relevant information inside a subclass of `PFCollectionViewCell`.
-
- This method is automatically called by `PFQueryCollectionViewController` whenever the cell
- should display new information. By default this method does nothing.
-
- @param object An instance of `PFObject` to update from.
- */
-- (void)updateFromObject:(nullable PFObject *)object;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFCollectionViewCell.m b/ParseUI/ParseUI/Source/PFCollectionViewCell.m
deleted file mode 100644
index 6fb1f466a..000000000
--- a/ParseUI/ParseUI/Source/PFCollectionViewCell.m
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFCollectionViewCell.h"
-
-#import "PFImageView.h"
-#import "PFRect.h"
-
-@implementation PFCollectionViewCell
-
-@synthesize imageView = _imageView;
-@synthesize textLabel = _textLabel;
-
-#pragma mark -
-#pragma mark UIView
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- const CGRect bounds = self.contentView.bounds;
-
- CGRect imageViewFrame = CGRectZero;
- if (_imageView && _imageView.image){
- imageViewFrame = PFRectMakeWithSizeCenteredInRect(PFSizeMin(_imageView.image.size, bounds.size),
- bounds);
- }
- CGRect textLabelFrame = CGRectZero;
- if (_textLabel) {
- CGSize maxImageViewSize = CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) / 3.0f * 2.0f);
- CGSize imageViewSize = PFSizeMin(imageViewFrame.size, maxImageViewSize);
-
- imageViewFrame = PFRectMakeWithSizeCenteredInRect(imageViewSize, PFRectMakeWithSize(maxImageViewSize));
- CGFloat textLabelTopInset = (CGRectIsEmpty(imageViewFrame) ? 0.0f : CGRectGetMaxY(imageViewFrame));
-
- textLabelFrame = PFRectMakeWithOriginSize(CGPointMake(0.0f, textLabelTopInset),
- CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) - textLabelTopInset));
- }
-
- // Adapt content mode of _imageView to fit the image in bounds if the layout frame is smaller or center if it's bigger.
- if (!CGRectIsEmpty(imageViewFrame)) {
- if (CGRectContainsRect(PFRectMakeWithSize(_imageView.image.size), PFRectMakeWithSize(imageViewFrame.size))) {
- _imageView.contentMode = UIViewContentModeScaleAspectFit;
- } else {
- _imageView.contentMode = UIViewContentModeCenter;
- }
- }
-
- _imageView.frame = CGRectIntegral(imageViewFrame);
- _textLabel.frame = CGRectIntegral(textLabelFrame);
-}
-
-#pragma mark -
-#pragma mark Update
-
-- (void)updateFromObject:(PFObject *)object {
- // Do nothing
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (PFImageView *)imageView {
- if (!_imageView) {
- _imageView = [[PFImageView alloc] initWithFrame:CGRectZero];
- [self.contentView addSubview:_imageView];
- }
- return _imageView;
-}
-
-- (UILabel *)textLabel {
- if (!_textLabel) {
- _textLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- _textLabel.numberOfLines = 0;
- [self.contentView addSubview:_textLabel];
- }
- return _textLabel;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFImageView.h b/ParseUI/ParseUI/Source/PFImageView.h
deleted file mode 100644
index 63a68466b..000000000
--- a/ParseUI/ParseUI/Source/PFImageView.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-#import "ParseUIConstants.h"
-
-@import ParseCore;
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void(^PFImageViewImageResultBlock)(UIImage *__nullable image, NSError *__nullable error);
-
-@class BFTask<__covariant BFGenericType>;
-@class PFFileObject;
-
-/**
- An image view that downloads and displays remote image stored on Parse's server.
- */
-@interface PFImageView : UIImageView
-
-/**
- The remote file on Parse's server that stores the image.
-
- @warning Note that the download does not start until `-loadInBackground:` is called.
- */
-@property (nullable, nonatomic, strong) PFFileObject *file;
-
-/**
- Initiate downloading of the remote image.
-
- Once the download completes, the remote image will be displayed.
-
- @return The task, that encapsulates the work being done.
- */
-- (BFTask *)loadInBackground;
-
-/**
- Initiate downloading of the remote image.
-
- Once the download completes, the remote image will be displayed.
-
- @param completion the completion block.
- */
-- (void)loadInBackground:(nullable PFImageViewImageResultBlock)completion;
-
-/**
- Initiate downloading of the remote image.
-
- Once the download completes, the remote image will be displayed.
-
- @param completion the completion block.
- @param progressBlock called with the download progress as the image is being downloaded.
- Will be called with a value of 100 before the completion block is called.
- */
-- (void)loadInBackground:(nullable PFImageViewImageResultBlock)completion
- progressBlock:(nullable void (^)(int percentDone))progressBlock;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFImageView.m b/ParseUI/ParseUI/Source/PFImageView.m
deleted file mode 100644
index 387b1a4d0..000000000
--- a/ParseUI/ParseUI/Source/PFImageView.m
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFImageView.h"
-#import "PFImageCache.h"
-
-#if __has_include()
-#import
-#else
-#import "BFTaskCompletionSource.h"
-#endif
-
-@import ParseCore;
-
-@implementation PFImageView
-
-#pragma mark -
-#pragma mark Accessors
-
-- (void)setFile:(PFFileObject *)otherFile {
- // Here we don't check (file != otherFile)
- // because self.image needs to be updated regardless.
- // setFile: could have altered self.image
- _file = otherFile;
- NSURL *url = [NSURL URLWithString:self.file.url];
- UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url];
- if (cachedImage) {
- self.image = cachedImage;
- }
-}
-
-#pragma mark -
-#pragma mark Load
-
-- (BFTask *)loadInBackground {
- BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource];
- [self loadInBackground:^(UIImage *image, NSError *error) {
- if (error) {
- [source trySetError:error];
- } else {
- [source trySetResult:image];
- }
- }];
- return source.task;
-}
-
-
-- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion {
- [self loadInBackground:completion progressBlock:nil];
-}
-
-- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion progressBlock:(PFProgressBlock)progressBlock {
- if (!self.file) {
- // When there is nothing to load, the user just wants to display
- // the placeholder image. I think the better design decision is
- // to return with no error, to simplify caller logic. (arguable)
- if (completion) {
- completion(nil, nil);
- }
- return;
- }
-
- if (!self.file.url) {
- // The file has not been saved.
- if (completion) {
- NSError *error = [NSError errorWithDomain:PFParseErrorDomain code:kPFErrorUnsavedFile userInfo:nil];
- completion(nil, error);
- }
- return;
- }
-
- NSURL *url = [NSURL URLWithString:self.file.url];
- if (url) {
- UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url];
- if (cachedImage) {
- self.image = cachedImage;
-
- if (progressBlock) {
- progressBlock(100);
- }
- if (completion) {
- completion(cachedImage, nil);
- }
- return;
- }
- }
-
-
- PFFileObject *file = _file;
- [_file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
- if (error) {
- if (completion) {
- dispatch_async(dispatch_get_main_queue(), ^{
- completion(nil, error);
- });
- }
- return;
- }
-
- // We dispatch to a background queue to offload the work to decode data into image
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
- UIImage *image = [UIImage imageWithData:data];
- if (!image) {
- if (completion) {
- NSError *invalidDataError = [NSError errorWithDomain:PFParseErrorDomain
- code:kPFErrorInvalidImageData
- userInfo:nil];
- dispatch_async(dispatch_get_main_queue(), ^{
- completion(nil, invalidDataError);
- });
- }
- return;
- }
-
- dispatch_async(dispatch_get_main_queue(), ^{
- // check if a latter issued loadInBackground has not replaced the file being loaded
- if (file == self->_file) {
- self.image = image;
- }
-
- if (completion) {
- completion(image, nil);
- }
- });
-
- if (url) {
- // We always want to store the image in the cache.
- // In previous checks we've verified neither key nor value is nil.
- [[PFImageCache sharedCache] setImage:image forURL:url];
- }
- });
- } progressBlock:progressBlock];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFLogInView.h b/ParseUI/ParseUI/Source/PFLogInView.h
deleted file mode 100644
index 97b1b1e82..000000000
--- a/ParseUI/ParseUI/Source/PFLogInView.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#import "ParseUIConstants.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- `PFLogInFields` bitmask specifies the log in elements which are enabled in the view.
-
- @see PFLogInViewController
- @see PFLogInView
- */
-typedef NS_OPTIONS(NSInteger, PFLogInFields) {
- /** No fields. */
- PFLogInFieldsNone = 0,
- /** Username and password fields. */
- PFLogInFieldsUsernameAndPassword = 1 << 0,
- /** Forgot password button. */
- PFLogInFieldsPasswordForgotten = 1 << 1,
- /** Login button. */
- PFLogInFieldsLogInButton = 1 << 2,
- /** Signup Button. */
- PFLogInFieldsSignUpButton = 1 << 5,
- /** Dismiss Button. */
- PFLogInFieldsDismissButton = 1 << 6,
- /** Apple button*/
- PFLogInFieldsApple = 1 << 7,
- /** Default value. Combines Username, Password, Login, Signup, Forgot Password and Dismiss buttons. */
- PFLogInFieldsDefault = (PFLogInFieldsUsernameAndPassword |
- PFLogInFieldsLogInButton |
- PFLogInFieldsSignUpButton |
- PFLogInFieldsPasswordForgotten |
- PFLogInFieldsDismissButton)
-};
-
-/**
- `PFLoginFields`'s accessibility label identifiers
-
- @see PFLogInView
- */
-extern NSString *const PFLogInViewUsernameFieldAccessibilityIdentifier;
-extern NSString *const PFLogInViewPasswordFieldAccessibilityIdentifier;
-extern NSString *const PFLogInViewLogInButtonAccessibilityIdentifier;
-extern NSString *const PFLogInViewSignUpButtonAccessibilityIdentifier;
-extern NSString *const PFLogInViewPasswordForgottenButtonAccessibilityIdentifier;
-extern NSString *const PFLogInViewAppleButtonAccessibilityIdentifier;
-extern NSString *const PFLogInViewDismissButtonAccessibilityIdentifier;
-
-@class PFTextField;
-
-/**
- The `PFLogInView` class provides a standard log in interface for authenticating a `PFUser`.
- */
-@interface PFLogInView : UIScrollView
-
-///--------------------------------------
-/// @name Creating Log In View
-///--------------------------------------
-
-/**
- Initializes the view with the specified log in elements.
-
- @param fields A bitmask specifying the log in elements which are enabled in the view
-
- @return An initialized `PFLogInView` object or `nil` if the object couldn't be created.
-
- @see PFLogInFields
- */
-- (instancetype)initWithFields:(PFLogInFields)fields;
-
-/**
- The view controller that will present this view.
-
- Used to lay out elements correctly when the presenting view controller has translucent elements.
- */
-@property (nullable, nonatomic, weak) UIViewController *presentingViewController;
-
-///--------------------------------------
-/// @name Customizing the Logo
-///--------------------------------------
-
-/// The logo. By default, it is the Parse logo.
-@property (nullable, nonatomic, strong) UIView *logo;
-
-///--------------------------------------
-/// @name Configure Username Behaviour
-///--------------------------------------
-
-/**
- If email should be used to log in, instead of username
-
- By default, this is set to `NO`.
- */
-@property (nonatomic, assign) BOOL emailAsUsername;
-
-///--------------------------------------
-/// @name Log In Elements
-///--------------------------------------
-
-/**
- The bitmask which specifies the enabled log in elements in the view.
- */
-@property (nonatomic, assign, readonly) PFLogInFields fields;
-
-/**
- The username text field. It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) PFTextField *usernameField;
-
-/**
- The password text field. It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) PFTextField *passwordField;
-
-/**
- The password forgotten button. It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) UIButton *passwordForgottenButton;
-
-/**
- The log in button. It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) UIButton *logInButton;
-
-/**
- The Apple button. It is 'nil if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) UIButton *appleButton;
-
-/**
- The sign up button. It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) UIButton *signUpButton;
-
-/**
- It is `nil` if the element is not enabled.
- */
-@property (nullable, nonatomic, strong, readonly) UIButton *dismissButton;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFLogInView.m b/ParseUI/ParseUI/Source/PFLogInView.m
deleted file mode 100644
index de3a9da81..000000000
--- a/ParseUI/ParseUI/Source/PFLogInView.m
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFLogInView.h"
-
-#import "PFActionButton.h"
-#import "PFColor.h"
-#import "PFDismissButton.h"
-#import "PFImage.h"
-#import "PFLocalization.h"
-#import "PFPrimaryButton.h"
-#import "PFRect.h"
-#import "PFTextButton.h"
-#import "PFTextField.h"
-
-static NSString *const PFLogInViewDefaultLogoImageName = @"parse_logo.png";
-static NSString *const PFLogInViewDefaultAppleButtonImageName = @"apple_icon.png";
-
-///--------------------------------------
-#pragma mark - Accessibility Identifiers
-///--------------------------------------
-
-NSString *const PFLogInViewUsernameFieldAccessibilityIdentifier = @"PFLogInViewUsernameFieldAccessibilityIdentifier";
-NSString *const PFLogInViewPasswordFieldAccessibilityIdentifier = @"PFLogInViewPasswordFieldAccessibilityIdentifier";
-NSString *const PFLogInViewLogInButtonAccessibilityIdentifier = @"PFLogInViewLogInButtonAccessibilityIdentifier";
-NSString *const PFLogInViewSignUpButtonAccessibilityIdentifier = @"PFLogInViewSignUpButtonAccessibilityIdentifier";
-NSString *const PFLogInViewPasswordForgottenButtonAccessibilityIdentifier = @"PFLogInViewPasswordForgottenButtonAccessibilityIdentifier";
-NSString *const PFLogInViewAppleButtonAccessibilityIdentifier = @"PFLogInViewAppleButtonAccessibilityIdentifier";
-NSString *const PFLogInViewDismissButtonAccessibilityIdentifier = @"PFLogInViewDismissButtonAccessibilityIdentifier";
-
-@implementation PFLogInView
-
-///--------------------------------------
-#pragma mark - Class
-///--------------------------------------
-
-+ (PFActionButtonConfiguration *)_defaultSignUpButtonConfiguration {
- PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor]
- image:nil];
- NSString *title = PFLocalizedString(@"Sign Up", @"Sign Up");
- [configuration setTitle:title forButtonStyle:PFActionButtonStyleNormal];
- [configuration setTitle:title forButtonStyle:PFActionButtonStyleWide];
-
- return configuration;
-}
-
-+ (PFActionButtonConfiguration *)_defaultAppleButtonConfiguration {
- PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor appleButtonBackgroundColor]
- image:[PFImage imageNamed:PFLogInViewDefaultAppleButtonImageName]];
-
- [configuration setTitle:PFLocalizedString(@"Apple", @"Apple")
- forButtonStyle:PFActionButtonStyleNormal];
- [configuration setTitle:PFLocalizedString(@"Sign in with Apple", @"Sign in with Apple")
-
- forButtonStyle:PFActionButtonStyleWide];
-
- return configuration;
-}
-
-///--------------------------------------
-#pragma mark - Init
-///--------------------------------------
-
-- (instancetype)initWithFields:(PFLogInFields)otherFields {
- self = [super initWithFrame:CGRectZero];
- if (!self) return nil;
-
- [PFLogInView _validateFields:otherFields];
-
- self.opaque = YES;
- self.backgroundColor = [PFColor commonBackgroundColor];
-
- _fields = otherFields;
-
- _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFLogInViewDefaultLogoImageName]];
- _logo.contentMode = UIViewContentModeScaleAspectFit;
- [self addSubview:_logo];
-
- [self _updateAllFields];
-
- return self;
-}
-
-///--------------------------------------
-#pragma mark - Fields
-///--------------------------------------
-
-- (void)_updateAllFields {
- if (_fields & PFLogInFieldsDismissButton) {
- if (!_dismissButton) {
- _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero];
- _dismissButton.accessibilityIdentifier = PFLogInViewDismissButtonAccessibilityIdentifier;
- [self addSubview:_dismissButton];
- }
- } else {
- [_dismissButton removeFromSuperview];
- _dismissButton = nil;
- }
-
- if (_fields & PFLogInFieldsUsernameAndPassword) {
- if (!_usernameField) {
- _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero
- separatorStyle:(PFTextFieldSeparatorStyleTop |
- PFTextFieldSeparatorStyleBottom)];
- _usernameField.accessibilityIdentifier = PFLogInViewUsernameFieldAccessibilityIdentifier;
- _usernameField.autocorrectionType = UITextAutocorrectionTypeNo;
- _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone;
- _usernameField.returnKeyType = UIReturnKeyNext;
- [self addSubview:_usernameField];
- [self _updateUsernameFieldStyle];
- }
-
- if (!_passwordField) {
- _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero
- separatorStyle:PFTextFieldSeparatorStyleBottom];
- _passwordField.accessibilityIdentifier = PFLogInViewPasswordFieldAccessibilityIdentifier;
- _passwordField.placeholder = PFLocalizedString(@"Password", @"Password");
- _passwordField.secureTextEntry = YES;
- _passwordField.autocorrectionType = UITextAutocorrectionTypeNo;
- _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone;
- _passwordField.returnKeyType = UIReturnKeyDone;
- [self addSubview:_passwordField];
- }
- } else {
- [_usernameField removeFromSuperview];
- _usernameField = nil;
-
- [_passwordField removeFromSuperview];
- _passwordField = nil;
- }
-
- if (_fields & PFLogInFieldsSignUpButton) {
- if (!_signUpButton) {
- _signUpButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultSignUpButtonConfiguration]
- buttonStyle:PFActionButtonStyleNormal];
- _signUpButton.accessibilityIdentifier = PFLogInViewSignUpButtonAccessibilityIdentifier;
- [self addSubview:_signUpButton];
- }
- } else {
- [_signUpButton removeFromSuperview];
- _signUpButton = nil;
- }
-
- if (_fields & PFLogInFieldsPasswordForgotten) {
- if (!_passwordForgottenButton) {
- _passwordForgottenButton = [[PFTextButton alloc] initWithFrame:CGRectZero];
- _passwordForgottenButton.accessibilityIdentifier = PFLogInViewPasswordForgottenButtonAccessibilityIdentifier;
- [_passwordForgottenButton setTitle:PFLocalizedString(@"Forgot Password?", "Forgot Password?")
- forState:UIControlStateNormal];
- [self addSubview:_passwordForgottenButton];
- }
- } else {
- [_passwordForgottenButton removeFromSuperview];
- _passwordForgottenButton = nil;
- }
-
- if (_fields & PFLogInFieldsLogInButton) {
- if (!_logInButton) {
- _logInButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor loginButtonBackgroundColor]];
- _logInButton.accessibilityIdentifier = PFLogInViewLogInButtonAccessibilityIdentifier;
- [_logInButton setTitle:PFLocalizedString(@"Log In", @"Log In") forState:UIControlStateNormal];
- [self addSubview:_logInButton];
- }
- } else {
- [_logInButton removeFromSuperview];
- _logInButton = nil;
- }
-
- if (_fields & PFLogInFieldsApple) {
- if (!_appleButton) {
- _appleButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultAppleButtonConfiguration]
- buttonStyle:PFActionButtonStyleNormal];
- _appleButton.accessibilityIdentifier = PFLogInViewAppleButtonAccessibilityIdentifier;
- [self addSubview:_appleButton];
- }
- } else {
- [_appleButton removeFromSuperview];
- _appleButton = nil;
- }
-}
-
-///--------------------------------------
-#pragma mark - UIView
-///--------------------------------------
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- const CGRect bounds = PFRectMakeWithOriginSize(CGPointZero, self.bounds.size);
-
- if (_dismissButton) {
- CGPoint origin = CGPointMake(16.0f, 16.0f);
- UIViewController *presentingViewController = self.presentingViewController;
- // In iOS 7+, if this view is presented fullscreen, it's top edge will be behind the status bar.
- // This lets us move down the dismiss button a bit so that it's not covered by the status bar.
- if ([presentingViewController respondsToSelector:@selector(topLayoutGuide)]) {
- origin.y += presentingViewController.topLayoutGuide.length;
- }
-
- CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]);
- _dismissButton.frame = frame;
- }
-
- CGRect contentRect = PFRectMakeWithSizeCenteredInRect(PFSizeMin(bounds.size, [self _maxContentSize]),
- bounds);
- const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:contentRect.size];
-
- CGFloat socialButtonsDefaultInset = 16.0f;
- UIEdgeInsets socialButtonsRectInsets = UIEdgeInsetsZero;
- if (CGRectGetMinX(contentRect) <= CGRectGetMinX(bounds)) {
- socialButtonsRectInsets = UIEdgeInsetsMake(0.0f,
- socialButtonsDefaultInset,
- 0.0f,
- socialButtonsDefaultInset);
- }
- CGRect socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets);
-
- if (_signUpButton) {
- CGSize buttonSize = [_signUpButton sizeThatFits:socialButtonsRect.size];
- [(PFActionButton *)_signUpButton setButtonStyle:PFActionButtonStyleWide];
-
- CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, socialButtonsRect);
- frame.origin.y = CGRectGetMaxY(socialButtonsRect) - CGRectGetHeight(frame) - socialButtonsRectInsets.left;
- _signUpButton.frame = frame;
-
- contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect);
- socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets);
- }
-
- if (_appleButton) {
- CGSize buttonSize = [_appleButton sizeThatFits:socialButtonsRect.size];
- CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize);
- frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height * 2 - socialButtonsDefaultInset * 2;
- _appleButton.frame = frame;
-
- [(PFActionButton *)_appleButton setButtonStyle:PFActionButtonStyleWide];
- contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect);
- }
-
- if (_signUpButton || _appleButton) {
- contentRect.size.height -= socialButtonsDefaultInset;
- }
-
- const CGRect loginContentRect = PFRectMakeWithSizeCenteredInRect([self _loginContentSizeThatFits:contentRect.size
- withContentSizeScale:contentSizeScale],
- contentRect);
- const CGSize loginContentSize = loginContentRect.size;
- CGFloat currentY = CGRectGetMinY(loginContentRect);
-
- if (_logo) {
- CGFloat logoTopInset = (CGRectGetMinX(contentRect) > 0.0f ? 36.0f : 88.0f) * contentSizeScale.height;
- CGFloat logoBottomInset = floor(36.0f * contentSizeScale.height);
-
- CGFloat logoAvailableHeight = floor(68.0f * contentSizeScale.height);
-
- CGSize logoSize = [_logo sizeThatFits:CGSizeMake(loginContentSize.width, logoAvailableHeight)];
- logoSize.width = MIN(loginContentSize.width, logoSize.width);
- logoSize.height = MIN(logoAvailableHeight, logoSize.height);
-
- CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, loginContentRect);
- frame.origin.y = CGRectGetMinY(loginContentRect) + logoTopInset;
- _logo.frame = CGRectIntegral(frame);
-
- currentY = floor(CGRectGetMaxY(frame) + logoBottomInset);
- }
-
- if (_usernameField) {
- CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:loginContentSize],
- loginContentRect);
- frame.origin.y = currentY;
- _usernameField.frame = frame;
-
- currentY = CGRectGetMaxY(frame);
- }
-
- if (_passwordField) {
- CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:loginContentSize],
- loginContentRect);
- frame.origin.y = currentY;
- _passwordField.frame = frame;
-
- currentY = CGRectGetMaxY(frame);
- }
-
- if (_logInButton) {
- CGFloat loginButtonTopInset = floor(24.0f * contentSizeScale.height);
-
- CGRect frame = PFRectMakeWithSizeCenteredInRect([_logInButton sizeThatFits:loginContentSize], loginContentRect);
- frame.origin.y = currentY + loginButtonTopInset;
- _logInButton.frame = frame;
-
- currentY = CGRectGetMaxY(frame);
- }
-
- if (_passwordForgottenButton) {
- CGFloat forgotPasswordInset = floor(12.0f * contentSizeScale.height);
-
- CGSize buttonSize = [_passwordForgottenButton sizeThatFits:loginContentSize];
- CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, loginContentRect);
- frame.origin.y = currentY + forgotPasswordInset;
- _passwordForgottenButton.frame = frame;
- }
-}
-
-- (CGSize)_loginContentSizeThatFits:(CGSize)boundingSize withContentSizeScale:(CGSize)contentSizeScale {
- CGSize size = boundingSize;
- size.height = 0.0f;
- if (_logo) {
- CGFloat logoTopInset = floor(36.0f * contentSizeScale.height);
- CGFloat logoBottomInset = floor(36.0f * contentSizeScale.height);
-
- CGFloat logoAvailableHeight = floor(68.0f * contentSizeScale.height);
-
- CGFloat scale = MAX(contentSizeScale.width, contentSizeScale.height);
-
- CGSize logoSize = [_logo sizeThatFits:CGSizeMake(boundingSize.width, logoAvailableHeight)];
- logoSize.height *= scale;
- logoSize.width *= scale;
-
- size.height += logoSize.height + logoTopInset + logoBottomInset;
- }
- if (_usernameField) {
- CGSize fieldSize = [_usernameField sizeThatFits:boundingSize];
- size.height += fieldSize.height;
- }
- if (_passwordField) {
- CGSize fieldSize = [_passwordField sizeThatFits:boundingSize];
- size.height += fieldSize.height;
- }
- if (_logInButton) {
- CGFloat loginButtonTopInset = 24.0f * contentSizeScale.height;
-
- CGSize buttonSize = [_logInButton sizeThatFits:boundingSize];
-
- size.height += buttonSize.height + loginButtonTopInset;
- }
- if (_passwordForgottenButton) {
- CGFloat forgotPasswordInset = 12.0f * contentSizeScale.height;
-
- UIView *button = _signUpButton ?: _passwordForgottenButton;
- CGSize buttonSize = [button sizeThatFits:boundingSize];
-
- size.height += buttonSize.height + forgotPasswordInset * 2.0f;
- }
- size.width = floor(size.width);
- size.height = floor(size.height);
-
- return size;
-}
-
-- (CGSize)_maxContentSize {
- return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? CGSizeMake(420.0f, 550.0f) : CGSizeMake(500.0f, 800.0f));
-}
-
-- (CGSize)_contentSizeScaleForContentSize:(CGSize)contentSize {
- CGSize maxContentSize = [self _maxContentSize];
- if (maxContentSize.width < contentSize.width &&
- maxContentSize.height < contentSize.height) {
- return CGSizeMake(1.0f, 1.0f);
- }
-
- CGSize contentSizeScale = CGSizeMake(contentSize.width / maxContentSize.width,
- contentSize.height / maxContentSize.height);
- return contentSizeScale;
-}
-
-///--------------------------------------
-#pragma mark - Accessors
-///--------------------------------------
-
-- (void)setFields:(PFLogInFields)fields {
- if (_fields != fields) {
- _fields = fields;
- [self _updateAllFields];
- [self setNeedsLayout];
- }
-}
-
-- (void)setLogo:(UIView *)logo {
- if (self.logo != logo) {
- [_logo removeFromSuperview];
- _logo = logo;
- [self addSubview:_logo];
-
- [self setNeedsLayout];
- }
-}
-
-- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername {
- if (_emailAsUsername != otherEmailAsUsername) {
- _emailAsUsername = otherEmailAsUsername;
-
- [self _updateUsernameFieldStyle];
- }
-}
-
-///--------------------------------------
-#pragma mark - Private
-///--------------------------------------
-
-+ (void)_validateFields:(PFLogInFields)fields {
- if (fields == PFLogInFieldsNone) {
- [NSException raise:NSInvalidArgumentException
- format:@"Fields must be set before initializing PFLogInView."];
- }
-
- if (fields & PFLogInFieldsLogInButton) {
- if (!(fields & PFLogInFieldsUsernameAndPassword)) {
- [NSException raise:NSInvalidArgumentException
- format:@"Username and password must be enabled if done button is enabled."];
- }
- }
-
- if (fields & PFLogInFieldsPasswordForgotten) {
- if (!(fields & PFLogInFieldsUsernameAndPassword)) {
- [NSException raise:NSInvalidArgumentException
- format:@"Username and password must be enabled if password forgotten button is enabled."];
- }
- }
-}
-
-- (void)_updateUsernameFieldStyle {
- UIKeyboardType keyboardType = UIKeyboardTypeDefault;
- NSString *usernamePlaceholder = nil;
- if (!_emailAsUsername) {
- keyboardType = UIKeyboardTypeDefault;
- usernamePlaceholder = PFLocalizedString(@"Username", @"Username");
- } else {
- keyboardType = UIKeyboardTypeEmailAddress;
- usernamePlaceholder = PFLocalizedString(@"Email", @"Email");
- }
-
- _usernameField.placeholder = usernamePlaceholder;
- _usernameField.keyboardType = keyboardType;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFLogInViewController.h b/ParseUI/ParseUI/Source/PFLogInViewController.h
deleted file mode 100644
index d38ce165d..000000000
--- a/ParseUI/ParseUI/Source/PFLogInViewController.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-#import "ParseUIConstants.h"
-#import "PFLogInView.h"
-
-@import ParseCore;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@import AuthenticationServices;
-
-@class PFSignUpViewController;
-@class PFUser;
-@protocol PFLogInViewControllerDelegate;
-
-/**
- The `PFLogInViewController` class presents and manages a standard authentication interface for logging in a `PFUser`.
- */
-@interface PFLogInViewController : UIViewController
-
-///--------------------------------------
-/// @name Configuring Log In Elements
-///--------------------------------------
-
-/**
- A bitmask specifying the log in elements which are enabled in the view.
-
- @see PFLogInFields
- */
-@property (nonatomic, assign) PFLogInFields fields;
-
-
-/**
- The log in view. It contains all the enabled log in elements.
-
- @see PFLogInView
- */
-@property (nullable, nonatomic, strong, readonly) PFLogInView *logInView;
-
-///--------------------------------------
-/// @name Configuring Log In Behaviors
-///--------------------------------------
-
-/**
- The delegate that responds to the control events of `PFLogInViewController`.
-
- @see PFLogInViewControllerDelegate
- */
-@property (nullable, nonatomic, weak) id delegate;
-
-/**
- The sign up controller if sign up is enabled.
-
- Use this to configure the sign up view, and the transition animation to the sign up view.
- The default is a sign up view with a username, a password, a dismiss button and a sign up button.
- */
-@property (nullable, nonatomic, strong) PFSignUpViewController *signUpController;
-
-/**
- Whether to prompt for the email as username on the login view.
-
- If set to `YES`, we'll prompt for the email in the username field.
- This property value propagates to the attached `signUpController`.
- By default, this is set to `NO`.
- */
-@property (nonatomic, assign) BOOL emailAsUsername;
-
-@end
-
-///--------------------------------------
-/// @name Notifications
-///--------------------------------------
-
-/**
- The notification is posted immediately after the log in succeeds.
- */
-extern NSString *const PFLogInSuccessNotification;
-
-/**
- The notification is posted immediately after the log in fails.
- If the delegate prevents the log in from starting, the notification is not sent.
- */
-extern NSString *const PFLogInFailureNotification;
-
-/**
- The notification is posted immediately after the log in is cancelled.
- */
-extern NSString *const PFLogInCancelNotification;
-
-///--------------------------------------
-/// @name PFLogInViewControllerDelegate
-///--------------------------------------
-
-/**
- The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a `PFLogInViewController` should implement.
- All methods of this protocol are optional.
- */
-@protocol PFLogInViewControllerDelegate
-
-@optional
-
-///--------------------------------------
-/// @name Customizing Behavior
-///--------------------------------------
-
-/**
- Sent to the delegate to determine whether the log in request should be submitted to the server.
-
- @param logInController The login view controller that is requesting the data.
- @param username the username the user tries to log in with.
- @param password the password the user tries to log in with.
-
- @return A `BOOL` indicating whether the log in should proceed.
- */
-- (BOOL)logInViewController:(PFLogInViewController *)logInController
-shouldBeginLogInWithUsername:(NSString *)username
- password:(NSString *)password;
-
-///--------------------------------------
-/// @name Responding to Actions
-///--------------------------------------
-
-/**
- Sent to the delegate when a `PFUser` is logged in.
-
- @param logInController The login view controller where login finished.
- @param user `PFUser` object that is a result of the login.
- */
-- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user;
-
-/**
- Sent to the delegate when the log in attempt fails.
-
- If you implement this method, PFLoginViewController will not automatically show its default
- login failure alert view. Instead, you should show your custom alert view in your implementation.
-
- @param logInController The login view controller where login failed.
- @param error `NSError` object representing the error that occured.
- */
-- (void)logInViewController:(PFLogInViewController *)logInController didFailToLogInWithError:(nullable NSError *)error;
-
-/**
- Sent to the delegate when the log in screen is cancelled.
-
- @param logInController The login view controller where login was cancelled.
- */
-- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController;
-
-/**
- Sent to the delegate when user data is received following successful login using Sign In With Apple.
-
- @param logInController The login view controller that received the credentials
- @param credential The ASAuthorizationAppleIDCredential object received
- */
-
--(void)logInViewController:(PFLogInViewController *)logInController didReceiveAppleCredential:(ASAuthorizationAppleIDCredential *)credential forUser:(PFUser *)user API_AVAILABLE(ios(13.0));
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFLogInViewController.m b/ParseUI/ParseUI/Source/PFLogInViewController.m
deleted file mode 100644
index cb3cac51f..000000000
--- a/ParseUI/ParseUI/Source/PFLogInViewController.m
+++ /dev/null
@@ -1,521 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFLogInViewController.h"
-#import "PFActionButton.h"
-#import "PFUIAlertView.h"
-#import "PFLocalization.h"
-#import "PFPrimaryButton.h"
-#import "PFSignUpViewController.h"
-#import "PFTextField.h"
-#import "PFLogInView_Private.h"
-#import "PFAppleUtils.h"
-
-@import ParseCore;
-
-NSString *const PFLogInSuccessNotification = @"com.parse.ui.login.success";
-NSString *const PFLogInFailureNotification = @"com.parse.ui.login.failure";
-NSString *const PFLogInCancelNotification = @"com.parse.ui.login.cancel";
-
-@protocol WeaklyReferencedAppleUtils
-
-+ (BFTask *)logInInBackground;
-
-@end
-
-@interface PFLogInViewController () {
- struct {
- BOOL shouldBeginLogIn : YES;
- BOOL didLogInUser : YES;
- BOOL didFailToLogIn : YES;
- BOOL didCancelLogIn : YES;
- } _delegateExistingMethods;
-}
-
-@property (nonatomic, strong, readwrite) PFLogInView *logInView;
-@property (nonatomic, assign) BOOL loading;
-
-@property (nonatomic, assign) CGFloat visibleKeyboardHeight;
-
-@end
-
-@implementation PFLogInViewController
-
-///--------------------------------------
-#pragma mark - Init
-///--------------------------------------
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- [self _commonInit];
- }
- return self;
-}
-
-- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- [self _commonInit];
- }
- return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)decoder {
- self = [super initWithCoder:decoder];
- if (self) {
- [self _commonInit];
- }
- return self;
-}
-
-- (void)_commonInit {
- self.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
- self.modalPresentationStyle = UIModalPresentationFormSheet;
- _fields = PFLogInFieldsDefault;
-
- if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
-}
-
-///--------------------------------------
-#pragma mark - Dealloc
-///--------------------------------------
-
-- (void)dealloc {
- // Unregister from all notifications
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-///--------------------------------------
-#pragma mark - UIViewController
-///--------------------------------------
-
-- (void)loadView {
- _logInView = [[PFLogInView alloc] initWithFields:_fields];
- [_logInView setPresentingViewController:self];
-
- UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_dismissKeyboard)];
- [_logInView addGestureRecognizer:gestureRecognizer];
- gestureRecognizer.cancelsTouchesInView = NO;
-
- self.view = _logInView;
-}
-
-- (void)viewDidLoad {
- [super viewDidLoad];
-
- [self _setupLogInViewActions];
-}
-
-- (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
-
- [self _registerForKeyboardNotifications];
-
- if (self.navigationController &&
- self.fields & PFLogInFieldsDismissButton) {
- self.fields = self.fields & ~PFLogInFieldsDismissButton;
-
- [_logInView.dismissButton removeFromSuperview];
- }
-}
-
-- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
- if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
- return UIInterfaceOrientationMaskAll;
- }
-
- return UIInterfaceOrientationMaskPortrait;
-}
-
-///--------------------------------------
-#pragma mark - PFLogInViewController
-///--------------------------------------
-
-- (PFLogInView *)logInView {
- return (PFLogInView *)self.view; // self.view will call loadView if the view is nil
-}
-
-- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername {
- self.logInView.emailAsUsername = otherEmailAsUsername;
-}
-
-- (BOOL)emailAsUsername {
- return self.logInView.emailAsUsername;
-}
-
-- (void)setFields:(PFLogInFields)fields {
- if (_fields != fields) {
- _fields = fields;
-
- // Avoid force loading logInView
- if (_logInView) {
- _logInView.fields = fields;
- [self _setupLogInViewActions];
- }
- }
-}
-
-- (void)setDelegate:(id)delegate {
- if (self.delegate != delegate) {
- _delegate = delegate;
-
- _delegateExistingMethods.shouldBeginLogIn = [delegate respondsToSelector:@selector(logInViewController:
- shouldBeginLogInWithUsername:
- password:)];
- _delegateExistingMethods.didLogInUser = [delegate respondsToSelector:@selector(logInViewController:
- didLogInUser:)];
- _delegateExistingMethods.didFailToLogIn = [delegate respondsToSelector:@selector(logInViewController:
- didFailToLogInWithError:)];
- _delegateExistingMethods.didCancelLogIn = [delegate
- respondsToSelector:@selector(logInViewControllerDidCancelLogIn:)];
- }
-}
-
-- (PFSignUpViewController *)signUpController {
- if (!_signUpController) {
- _signUpController = [[PFSignUpViewController alloc] init];
- _signUpController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
- _signUpController.emailAsUsername = self.emailAsUsername;
- }
- return _signUpController;
-}
-
-- (void)setLoading:(BOOL)loading {
- if (self.loading != loading) {
- _loading = loading;
-
- _logInView.usernameField.enabled = !self.loading;
- _logInView.passwordField.enabled = !self.loading;
- _logInView.passwordForgottenButton.enabled = !self.loading;
- _logInView.dismissButton.enabled = !self.loading;
- }
-}
-
-///--------------------------------------
-#pragma mark - UITextFieldDelegate
-///--------------------------------------
-
-- (BOOL)textFieldShouldReturn:(UITextField *)textField {
- if (textField == _logInView.usernameField) {
- [_logInView.passwordField becomeFirstResponder];
- }
- if (textField == _logInView.passwordField) {
- [self _dismissKeyboard];
- [self _loginAction];
- }
-
- return YES;
-}
-
-///--------------------------------------
-#pragma mark - Private
-///--------------------------------------
-
-- (void)_setupLogInViewActions {
- [_logInView.dismissButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
- [_logInView.dismissButton addTarget:self action:@selector(_dismissAction) forControlEvents:UIControlEventTouchUpInside];
-
- _logInView.usernameField.delegate = self;
- _logInView.passwordField.delegate = self;
-
- [_logInView.logInButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
- [_logInView.logInButton addTarget:self action:@selector(_loginAction) forControlEvents:UIControlEventTouchUpInside];
-
- [_logInView.passwordForgottenButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
- [_logInView.passwordForgottenButton addTarget:self action:@selector(_forgotPasswordAction) forControlEvents:UIControlEventTouchUpInside];
-
- [_logInView.appleButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
- [_logInView.appleButton addTarget:self action:@selector(_loginWithApple) forControlEvents:UIControlEventTouchUpInside];
-
- [_logInView.signUpButton removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents];
- [_logInView.signUpButton addTarget:self action:@selector(_signupAction) forControlEvents:UIControlEventTouchUpInside];
-}
-
-- (void)_dismissAction {
- [self cancelLogIn];
-
- // Normally the role of dismissing a modal controller lies on the presenting controller.
- // Here we violate the principle so that the presenting modal log in controller is especially easy.
- // Cons of this design is that it makes working with non-modally presented log in controller hard;
- // but this concern is mitigated by the fact that navigationally presented controller should not have
- // dismiss button.
- [self dismissViewControllerAnimated:YES completion:nil];
-}
-
-- (void)_forgotPasswordAction PF_EXTENSION_UNAVAILABLE("") {
- NSString *title = PFLocalizedString(@"Reset Password", @"Forgot password request title in PFLogInViewController");
- NSString *message = PFLocalizedString(@"Please enter the email address for your account.",
- @"Email request message in PFLogInViewController");
- [PFUIAlertView presentAlertInViewController:self
- withTitle:title
- message:message
- textFieldCustomizationHandler:^(UITextField * _Nonnull textField) {
- textField.placeholder = PFLocalizedString(@"Email", @"Email");
- textField.keyboardType = UIKeyboardTypeEmailAddress;
- textField.returnKeyType = UIReturnKeyDone;
- }
- cancelButtonTitle:PFLocalizedString(@"Cancel", @"Cancel")
- otherButtonTitles:@[ PFLocalizedString(@"OK", @"OK")]
- completion:^(UITextField * _Nonnull textField, NSUInteger selectedOtherButtonIndex) {
- if (selectedOtherButtonIndex != NSNotFound) {
- NSString *email = textField.text;
- [self _requestPasswordResetWithEmail:email];
- }
- }];
-}
-
-- (void)_requestPasswordResetWithEmail:(NSString *)email {
- [PFUser requestPasswordResetForEmailInBackground:email block:^(BOOL success, NSError *error) {
- if (success) {
- NSString *title = PFLocalizedString(@"Password Reset",
- @"Password reset success alert title in PFLogInViewController.");
- NSString *message = [NSString stringWithFormat:PFLocalizedString(@"An email with reset instructions has been sent to '%@'.",
- @"Password reset message in PFLogInViewController"), email];
- [PFUIAlertView presentAlertInViewController:self withTitle:title message:message];
- } else {
- NSString *title = PFLocalizedString(@"Password Reset Failed",
- @"Password reset error alert title in PFLogInViewController.");
- [PFUIAlertView presentAlertInViewController:self withTitle:title error:error];
- }
- }];
-}
-
-
-#pragma mark Sign in with Apple
--(void)_loginWithApple API_AVAILABLE(ios(13.0)){
-
- if (self.loading) {
- return;
- }
-
- self.loading = YES;
- if ([_logInView.appleButton isKindOfClass:[PFActionButton class]]) {
- [(PFActionButton *)_logInView.appleButton setLoading:YES];
- }
-
- __weak typeof(self) wself = self;
-
- [[PFAppleUtils logInInBackground] continueWithBlock:^id _Nullable(BFTask * _Nonnull t) {
- __strong typeof(wself) sself = wself;
- dispatch_async(dispatch_get_main_queue(), ^{
- sself.loading = NO;
- if ([sself.logInView.appleButton isKindOfClass:[PFActionButton class]]) {
- [(PFActionButton *)sself.logInView.appleButton setLoading:NO];
- }
- if (t.error) {
- [sself _loginDidFailWithError:t.error];
- }
- else
- {
- PFUser *user = t.result[PFAppleAuthUserKey];
- ASAuthorizationAppleIDCredential *cred = t.result[PFAppleAuthCredentialKey];
- [sself _loginDidSucceedWithUser:user];
- [sself.delegate logInViewController:sself didReceiveAppleCredential:cred forUser:user];
- }
- });
- return nil;
- }];
-}
-
-#pragma mark Log In
-
-- (void)_loginAction {
- if (self.loading) {
- return;
- }
-
- NSString *username = _logInView.usernameField.text ?: @"";
- NSString *password = _logInView.passwordField.text ?: @"";
-
- if (_delegateExistingMethods.shouldBeginLogIn) {
- if (![_delegate logInViewController:self shouldBeginLogInWithUsername:username password:password]) {
- return;
- }
- }
-
- self.loading = YES;
- if ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) {
- [(PFActionButton *)_logInView.logInButton setLoading:YES];
- }
-
- [PFUser logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) {
- self.loading = NO;
- if ([self->_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) {
- [(PFPrimaryButton *)self->_logInView.logInButton setLoading:NO];
- }
-
- if (user) {
- [self _loginDidSucceedWithUser:user];
- } else {
- [self _loginDidFailWithError:error];
- }
- }];
-}
-
-- (void)_signupAction {
- if (self.loading) {
- return;
- }
- [self presentViewController:self.signUpController animated:YES completion:nil];
-}
-
-- (void)_loginDidSucceedWithUser:(PFUser *)user {
- if (_delegateExistingMethods.didLogInUser) {
- [_delegate logInViewController:self didLogInUser:user];
- }
- [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInSuccessNotification object:self];
-}
-
-- (void)_loginDidFailWithError:(NSError *)error {
- if (_delegateExistingMethods.didFailToLogIn) {
- [_delegate logInViewController:self didFailToLogInWithError:error];
- } else {
- NSString *title = PFLocalizedString(@"Login Failed", @"Login failed alert title in PFLogInViewController");
- NSString *message = nil;
- if (error.code == kPFErrorObjectNotFound) {
- message = PFLocalizedString(@"The username and password you entered don't match", @"Invalid login credentials alert message in PFLogInViewController");
- } else {
- message = PFLocalizedString(@"Please try again", @"Generic login failed alert message in PFLogInViewController");
- }
- [PFUIAlertView presentAlertInViewController:self withTitle:title message:message];
- }
- [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInFailureNotification object:self];
-}
-
-- (void)cancelLogIn {
- if (_delegateExistingMethods.didCancelLogIn) {
- [_delegate logInViewControllerDidCancelLogIn:self];
- }
- [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInCancelNotification object:self];
-}
-
-///--------------------------------------
-#pragma mark - Keyboard
-///--------------------------------------
-
-- (UIView *)currentFirstResponder {
- if ([_logInView.usernameField isFirstResponder]) {
- return _logInView.usernameField;
- }
- if ([_logInView.passwordField isFirstResponder]) {
- return _logInView.passwordField;
- }
- return nil;
-}
-
-- (void)_dismissKeyboard {
- [self.view endEditing:YES];
-}
-
-- (void)_registerForKeyboardNotifications {
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(_keyboardWillShow:)
- name:UIKeyboardWillShowNotification
- object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(_keyboardWillHide:)
- name:UIKeyboardWillHideNotification
- object:nil];
-}
-
-- (void)_keyboardWillShow:(NSNotification *)notification {
- NSDictionary *userInfo = [notification userInfo];
- CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
- CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
- UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
-
- CGRect keyboardFrame = [self.view convertRect:endFrame fromView:self.view.window];
- CGFloat visibleKeyboardHeight = CGRectGetMaxY(self.view.bounds) - CGRectGetMinY(keyboardFrame);
-
- [self setVisibleKeyboardHeight:visibleKeyboardHeight
- animationDuration:duration
- animationOptions:curve << 16];
-}
-
-- (void)_keyboardWillHide:(NSNotification *)notification {
- NSDictionary *userInfo = [notification userInfo];
- CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
- UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
- [self setVisibleKeyboardHeight:0.0
- animationDuration:duration
- animationOptions:curve << 16];
-}
-
-- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight
- animationDuration:(NSTimeInterval)animationDuration
- animationOptions:(UIViewAnimationOptions)animationOptions {
-
- dispatch_block_t animationsBlock = ^{
- self.visibleKeyboardHeight = visibleKeyboardHeight;
- };
-
- if (animationDuration == 0.0) {
- animationsBlock();
- } else {
- [UIView animateWithDuration:animationDuration
- delay:0.0
- options:animationOptions | UIViewAnimationOptionBeginFromCurrentState
- animations:animationsBlock
- completion:nil];
- }
-}
-
-- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight {
- if (self.visibleKeyboardHeight != visibleKeyboardHeight) {
- _visibleKeyboardHeight = visibleKeyboardHeight;
- [self _updateViewContentOffsetAnimated:NO];
- }
-}
-
-- (void)_updateViewContentOffsetAnimated:(BOOL)animated {
- CGPoint contentOffset = CGPointZero;
- if (self.visibleKeyboardHeight > 0.0f) {
- // Scroll the view to keep fields visible
- CGFloat offsetForScrollingTextFieldToTop = CGRectGetMinY([self currentFirstResponder].frame);
-
- UIView *lowestView;
- if (_logInView.passwordForgottenButton) {
- lowestView = _logInView.passwordForgottenButton;
- } else if (_logInView.logInButton) {
- lowestView = _logInView.logInButton;
- } else {
- lowestView = _logInView.passwordField;
- }
-
- CGFloat offsetForScrollingLowestViewToBottom = 0.0f;
- offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight;
- offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame);
- offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_logInView.bounds);
-
- if (offsetForScrollingLowestViewToBottom < 0) {
- return; // No scrolling required
- }
-
- contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, offsetForScrollingLowestViewToBottom));
- }
-
- [_logInView setContentOffset:contentOffset animated:animated];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFLogInView_Private.h b/ParseUI/ParseUI/Source/PFLogInView_Private.h
deleted file mode 100644
index 1ecb959d6..000000000
--- a/ParseUI/ParseUI/Source/PFLogInView_Private.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFLogInView.h"
-
-@interface PFLogInView (Private)
-
-@property (nonatomic, assign, readwrite) PFLogInFields fields;
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFProductTableViewController.h b/ParseUI/ParseUI/Source/PFProductTableViewController.h
deleted file mode 100644
index 2e2e5a805..000000000
--- a/ParseUI/ParseUI/Source/PFProductTableViewController.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#import "ParseUIConstants.h"
-#import "PFQueryTableViewController.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- `PFProductTableViewController` displays in-app purchase products stored on Parse.
- In addition to setting up in-app purchases in iTunes Connect, the app developer needs
- to register product information on Parse, in the Product class.
- */
-@interface PFProductTableViewController : PFQueryTableViewController
-
-/**
- Initializes a product table view controller.
-
- @param style The UITableViewStyle for the table
-
- @return An initialized `PFProductTableViewController` object or `nil` if the object couldn't be created.
- */
-- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFProductTableViewController.m b/ParseUI/ParseUI/Source/PFProductTableViewController.m
deleted file mode 100644
index 47271de22..000000000
--- a/ParseUI/ParseUI/Source/PFProductTableViewController.m
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFProductTableViewController.h"
-#import "PFUIAlertView.h"
-#import "PFLocalization.h"
-#import "PFPurchaseTableViewCell.h"
-
-@import ParseCore;
-
-static NSString *const PFProductMetadataPriceKey = @"price";
-static NSString *const PFProductMetadataPriceLocaleKey = @"priceLocale";
-
-@interface PFProductTableViewController () {
- NSMutableDictionary *_productMetadataDictionary;
- NSMutableDictionary *_productProgressDictionary;
-
- SKProductsRequest *_storeProductsRequest;
-}
-
-@end
-
-@implementation PFProductTableViewController
-
-#pragma mark -
-#pragma mark NSObject
-
-- (instancetype)initWithStyle:(UITableViewStyle)style {
- self = [super initWithStyle:UITableViewStylePlain className:[PFProduct parseClassName]];
- if (self) {
- self.pullToRefreshEnabled = NO;
- self.paginationEnabled = NO;
-
- _productMetadataDictionary = [NSMutableDictionary dictionary];
- _productProgressDictionary = [NSMutableDictionary dictionary];
- }
- return self;
-}
-
-- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className {
- return [self initWithStyle:style];
-}
-
-#pragma mark -
-#pragma mark UIViewController
-
-- (void)viewDidLoad {
- [super viewDidLoad];
-
- self.tableView.rowHeight = 84.0f;
-}
-
-- (void)objectsDidLoad:(NSError *)error {
- [super objectsDidLoad:error];
- if (error) {
- return;
- }
-
- [self.objects enumerateObjectsUsingBlock:^(PFProduct *product, NSUInteger idx, BOOL *stop) {
- // No download for this product - just continue
- if (!product.downloadName) {
- return;
- }
-
- [PFPurchase addObserverForProduct:product.productIdentifier block:^(SKPaymentTransaction *transaction) {
- NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
- PFPurchaseTableViewCell *cell = (PFPurchaseTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
-
- cell.state = PFPurchaseTableViewCellStateDownloading;
- [PFPurchase downloadAssetForTransaction:transaction
- completion:^(NSString *filePath, NSError *downloadError) {
- if (!downloadError) {
- cell.state = PFPurchaseTableViewCellStateDownloaded;
- } else {
- cell.state = PFPurchaseTableViewCellStateNormal;
-
- NSString *title = PFLocalizedString(@"Download Error",
- @"Download Error");
- [PFUIAlertView presentAlertInViewController:self withTitle:title error:error];
- }
- }
- progress:^(int percentDone) {
- self->_productProgressDictionary[product.productIdentifier] = @(percentDone);
- [cell.progressView setProgress:percentDone/100.0f animated:YES];
- }];
- }];
- }];
-}
-
-#pragma mark -
-#pragma mark UITableViewDataSource
-
-- (PFTableViewCell *)tableView:(UITableView *)tableView
- cellForRowAtIndexPath:(NSIndexPath *)indexPath
- object:(PFObject *)object {
- PFProduct *product = (PFProduct *)object;
- static NSString *cellIdentifier = @"PFPurchaseTableViewCell";
-
- PFPurchaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
- if (!cell) {
- cell = [[PFPurchaseTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
- reuseIdentifier:cellIdentifier];
- }
-
- if (indexPath.row % 2 == 0) {
- cell.backgroundView.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f];
- cell.textLabel.shadowOffset = CGSizeZero;
- cell.textLabel.shadowColor = [UIColor whiteColor];
- cell.priceLabel.shadowOffset = CGSizeZero;
- cell.priceLabel.shadowColor = [UIColor whiteColor];
-
- } else {
- cell.backgroundView.backgroundColor = [UIColor colorWithWhite:232.0f/255.0f alpha:1.0f];
- cell.textLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
- cell.textLabel.shadowColor = [UIColor whiteColor];
- cell.priceLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
- cell.priceLabel.shadowColor = [UIColor whiteColor];
- }
-
- cell.imageView.file = product.icon;
- cell.textLabel.text = product.title;
- cell.detailTextLabel.text = product.subtitle;
-
- NSString *price = [self _priceForProduct:product];
- if (price) {
- cell.priceLabel.text = [NSString stringWithFormat:@" $%@ ", price];
- }
-
- if (product.downloadName) {
- NSString *contentPath = [PFPurchase assetContentPathForProduct:product];
- if (contentPath) {
- cell.state = PFPurchaseTableViewCellStateDownloaded;
- }
- } else {
- int progress = [self _downloadProgressForProduct:product];
- if (progress == 0) {
- cell.state = PFPurchaseTableViewCellStateNormal;
- } else if (progress == 100) {
- cell.state = PFPurchaseTableViewCellStateDownloaded;
- } else {
- cell.state = PFPurchaseTableViewCellStateDownloading;
- }
- }
-
- return cell;
-}
-
-#pragma mark -
-#pragma mark UITableViewDelegate
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- if (indexPath.row < self.objects.count) {
- [tableView deselectRowAtIndexPath:indexPath animated:YES];
-
- PFProduct *product = self.objects[indexPath.row];
- [PFPurchase buyProduct:product.productIdentifier block:^(NSError *error) {
- if (error) {
- NSString *title = PFLocalizedString(@"Purchase Error", @"Purchase Error");
- [PFUIAlertView presentAlertInViewController:self withTitle:title error:error];
- }
- }];
- }
-}
-
-#pragma mark -
-#pragma mark Data
-
-- (NSString *)_priceForProduct:(PFProduct *)product {
- return _productMetadataDictionary[product.productIdentifier][PFProductMetadataPriceKey];
-}
-
-- (int)_downloadProgressForProduct:(PFProduct *)product {
- return [_productProgressDictionary[product.productIdentifier] intValue];
-}
-
-#pragma mark -
-#pragma mark PFQueryTableViewController
-
-- (PFQuery *)queryForTable {
- PFQuery *query = [super queryForTable];
- [query orderByAscending:@"order"];
- return query;
-}
-
-#pragma mark -
-#pragma mark Querying Store
-
-- (void)_queryStoreForProductsWithIdentifiers:(NSSet *)identifiers {
- _storeProductsRequest.delegate = nil;
- _storeProductsRequest = nil;
-
- _storeProductsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers];
- _storeProductsRequest.delegate = self;
- [_storeProductsRequest start];
-}
-
-#pragma mark -
-#pragma mark SKProductsRequestDelegate
-
-- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
- if (request != _storeProductsRequest) {
- return;
- }
-
- NSArray *validProducts = response.products;
- if ([validProducts count] == 0) {
- return;
- }
-
- [validProducts enumerateObjectsUsingBlock:^(SKProduct *product, NSUInteger idx, BOOL *stop) {
- NSDictionary *metadata = @{ PFProductMetadataPriceKey : product.price,
- PFProductMetadataPriceLocaleKey : product.priceLocale };
- self->_productMetadataDictionary[product.productIdentifier] = metadata;
- }];
- [self.tableView reloadData];
-
- _storeProductsRequest.delegate = nil;
-}
-
-- (void)requestDidFinish:(SKRequest *)request {
- _storeProductsRequest.delegate = nil;
- _storeProductsRequest = nil;
-}
-
-- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
- _storeProductsRequest.delegate = nil;
- _storeProductsRequest = nil;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.h b/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.h
deleted file mode 100644
index e7ddcc3cd..000000000
--- a/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-
-#import "ParseUIConstants.h"
-#import "PFTableViewCell.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- An enum that represents states of the `PFPurchaseTableViewCell`.
- @see `PFPurchaseTableViewCell`
- */
-typedef NS_ENUM(uint8_t, PFPurchaseTableViewCellState) {
- /** Normal state of the cell. */
- PFPurchaseTableViewCellStateNormal = 0,
- /** Downloading state of the cell. */
- PFPurchaseTableViewCellStateDownloading,
- /** State of the cell, when the product was downloaded. */
- PFPurchaseTableViewCellStateDownloaded
-};
-
-/**
- `PFPurchaseTableViewCell` is a subclass `PFTableViewCell` that is used to show
- products in a `PFProductTableViewController`.
-
- @see `PFProductTableViewController`
- */
-@interface PFPurchaseTableViewCell : PFTableViewCell
-
-/**
- State of the cell.
- @see `PFPurchaseTableViewCellState`
- */
-@property (nonatomic, assign) PFPurchaseTableViewCellState state;
-
-/**
- Label where price of the product is displayed.
- */
-@property (nullable, nonatomic, strong, readonly) UILabel *priceLabel;
-
-/**
- Progress view that is shown, when the product is downloading.
- */
-@property (nullable, nonatomic, strong, readonly) UIProgressView *progressView;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.m b/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.m
deleted file mode 100644
index 409a418a6..000000000
--- a/ParseUI/ParseUI/Source/PFPurchaseTableViewCell.m
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFPurchaseTableViewCell.h"
-
-#import "PFLocalization.h"
-#import "PFRect.h"
-
-@interface PFPurchaseTableViewCell ()
-
-@property (nonatomic, strong) UILabel *priceLabel;
-@property (nonatomic, strong) UIProgressView *progressView;
-
-@end
-
-@implementation PFPurchaseTableViewCell
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
- self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
- if (self) {
- self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
-
- self.imageView.layer.shadowColor = [UIColor blackColor].CGColor;
- self.imageView.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
- self.imageView.layer.shadowRadius = 1.0f;
- self.imageView.layer.shadowOpacity = 1.0f;
-
- self.textLabel.backgroundColor = [UIColor clearColor];
- self.detailTextLabel.backgroundColor = [UIColor clearColor];
- self.detailTextLabel.numberOfLines = 2;
- self.detailTextLabel.font = [UIFont systemFontOfSize:12.0f];
-
- self.priceLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- self.priceLabel.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f];
- self.priceLabel.textColor = [UIColor grayColor];
- self.priceLabel.shadowColor = [UIColor whiteColor];
- self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
- self.priceLabel.font = [UIFont boldSystemFontOfSize:12.0f];
- self.priceLabel.layer.borderColor = [UIColor grayColor].CGColor;
- self.priceLabel.layer.borderWidth = 1.0f;
- self.priceLabel.layer.cornerRadius = 3.0f;
- self.priceLabel.lineBreakMode = NSLineBreakByWordWrapping;
- self.priceLabel.numberOfLines = 0;
- [self.contentView addSubview:self.priceLabel];
-
- self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
- self.state = PFPurchaseTableViewCellStateNormal;
- }
- return self;
-}
-#pragma mark -
-#pragma mark UIView
-
-- (void)layoutSubviews {
- [super layoutSubviews];
-
- const CGRect bounds = self.contentView.bounds;
-
- CGFloat iconWidth = floor(0.8f * CGRectGetHeight(bounds));
- CGFloat iconMarginY = floor((CGRectGetHeight(bounds) - iconWidth)/2.0f);
- CGFloat iconMarginX = iconMarginY;
- CGFloat x = iconMarginX;
- CGFloat y = iconMarginY;
- self.imageView.frame = CGRectMake(x, y, iconWidth, iconWidth);
- x += self.imageView.frame.size.width + iconMarginX;
-
- self.priceLabel.frame = CGRectZero; // this is necessary for sizeToFit to work correctly
- [self.priceLabel sizeToFit];
- CGFloat priceLabelRightInset = 10.0f;
- CGFloat priceLabelX = CGRectGetWidth(bounds) - CGRectGetWidth(self.priceLabel.frame) - priceLabelRightInset;
- CGFloat priceLabelY = floor((CGRectGetHeight(self.textLabel.frame) - CGRectGetHeight(self.priceLabel.frame))/2.0f) + iconMarginY;
-
- self.priceLabel.frame = PFRectMakeWithOriginSize(CGPointMake(priceLabelX, priceLabelY), self.priceLabel.frame.size);
-
- CGFloat titleWidth = self.contentView.frame.size.width - self.imageView.frame.size.width - iconMarginX - 100.0f;
- CGFloat titleHeight = self.textLabel.frame.size.height;
- self.textLabel.frame = CGRectMake(x, y, titleWidth, titleHeight);
-
- CGFloat textMarginBottom = 5.0f;
- y += self.textLabel.frame.size.height + textMarginBottom;
-
- CGFloat detailTextLabelWidth = CGRectGetWidth(bounds) - x - 50.0f;
- self.detailTextLabel.frame = CGRectMake(x, y, detailTextLabelWidth, CGRectGetWidth(self.detailTextLabel.frame));
- self.progressView.frame = CGRectMake(x, CGRectGetHeight(bounds) - CGRectGetHeight(self.progressView.frame) - iconMarginY - 2.0f,
- detailTextLabelWidth, CGRectGetHeight(self.progressView.frame));
-}
-
-#pragma mark -
-#pragma mark PFPurchaseTableViewCell
-
-- (void)setState:(PFPurchaseTableViewCellState)state {
- if (self.state == state) {
- return;
- }
-
- _state = state;
-
- switch (state) {
- case PFPurchaseTableViewCellStateNormal:
- {
- self.detailTextLabel.numberOfLines = 2;
- }
- break;
- case PFPurchaseTableViewCellStateDownloading:
- {
- self.detailTextLabel.numberOfLines = 1;
- self.priceLabel.backgroundColor = [UIColor colorWithRed:132.0f/255.0f green:175.0f/255.0f blue:230.0f/255.0f alpha:1.0f];
- NSString *downloadingText = PFLocalizedString(@"DOWNLOADING", @"DOWNLOADING");
- self.priceLabel.text = [NSString stringWithFormat:@" %@ ", downloadingText];
- self.priceLabel.textColor = [UIColor whiteColor];
- self.priceLabel.shadowColor = [UIColor blackColor];
- self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
- [self.contentView addSubview:self.progressView];
- }
- break;
- case PFPurchaseTableViewCellStateDownloaded:
- {
- self.detailTextLabel.numberOfLines = 2;
- NSString *installedText = PFLocalizedString(@"INSTALLED", @"INSTALLED");
- self.priceLabel.text = [NSString stringWithFormat:@" %@ ", installedText];
- self.priceLabel.textColor = [UIColor whiteColor];
- self.priceLabel.shadowColor = [UIColor blackColor];
- self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
- self.priceLabel.backgroundColor = [UIColor colorWithRed:160.0f/255.0f green:200.0f/255.0f blue:120.0f/255.0f alpha:1.0f];
- [self.progressView removeFromSuperview];
- }
- break;
- default:
- break;
- }
- [self setNeedsLayout];
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFQueryCollectionViewController.h b/ParseUI/ParseUI/Source/PFQueryCollectionViewController.h
deleted file mode 100644
index 48a97550a..000000000
--- a/ParseUI/ParseUI/Source/PFQueryCollectionViewController.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-#import "ParseUIConstants.h"
-
-@import ParseCore;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class BFTask<__covariant BFGenericType>;
-@class PFCollectionViewCell;
-@class PFObject;
-@class PFQuery;
-
-/**
- This class allows you to think about a one-to-one mapping between a `PFObject` and a `UICollectionViewCell`,
- rather than having to juggle index paths.
-
- You also get the following features out of the box:
-
- - Pagination with a cell that can be tapped to load the next page.
- - Pull-to-refresh collection view header.
- - Automatic downloading and displaying of remote images in cells.
- - Loading screen, shown before any data is loaded.
- - Automatic loading and management of the objects array.
- - Various methods that can be overridden to customize behavior at major events in the data cycle.
-
- @see `PFCollectionViewCell`
- */
-@interface PFQueryCollectionViewController : UICollectionViewController
-
-/**
- The class name of the `PFObject` this collection will use as a datasource.
- */
-@property (nullable, nonatomic, copy) IBInspectable NSString *parseClassName;
-
-/**
- Whether the collection should use the default loading view. Default - `YES`.
- */
-@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled;
-
-/**
- Whether the collection should use the built-in pull-to-refresh feature. Default - `YES`.
- */
-@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled NS_AVAILABLE_IOS(10.0);
-
-/**
- Whether the collection should use the built-in pagination feature. Default - `YES`.
- */
-@property (nonatomic, assign) IBInspectable BOOL paginationEnabled;
-
-/**
- The number of objects to show per page. Default - `25`.
- */
-@property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage;
-
-/**
- Whether the collection is actively loading new data from the server.
- */
-@property (nonatomic, assign, getter=isLoading) BOOL loading;
-
-///--------------------------------------
-/// @name Creating a PFQueryCollectionViewController
-///--------------------------------------
-
-/**
- Initializes a view controller with a `UICollectionViewFlowLayout` and a class name
- of `PFObject` that will be associated with this collection.
-
- @param className The class name of the instances of `PFObject` that this table will display.
-
- @return An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created.
- */
-- (instancetype)initWithClassName:(nullable NSString *)className;
-
-/**
- Initializes a view controller with a class name of `PFObject` that will be associated with this collection.
-
- @param layout Layout for collection view to use.
- @param className The class name of the instances of `PFObject` that this table will display.
-
- @return An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created.
- */
-- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout
- className:(nullable NSString *)className NS_DESIGNATED_INITIALIZER;
-
-///--------------------------------------
-/// @name Responding to Events
-///--------------------------------------
-
-/**
- Called when objects will be loaded from Parse. If you override this method, you must
- call [super objectsWillLoad] in your implementation.
- */
-- (void)objectsWillLoad NS_REQUIRES_SUPER;
-
-/**
- Called when objects have loaded from Parse. If you override this method, you must
- call [super objectsDidLoad:] in your implementation.
- @param error The Parse error from running the PFQuery, if there was any.
- */
-- (void)objectsDidLoad:(nullable NSError *)error NS_REQUIRES_SUPER;
-
-///--------------------------------------
-/// @name Accessing Results
-///--------------------------------------
-
-/**
- The array of instances of `PFObject` that is used as a data source.
- */
-@property (nonatomic, copy, readonly) NSArray<__kindof PFObject *> *objects;
-
-/**
- Returns an object at a particular indexPath.
-
- The default impementation returns the object at `indexPath.item`.
- If you want to return objects in a different indexPath order, like for sections, override this method.
-
- @param indexPath An instance of `NSIndexPath`.
-
- @return The object at the specified indexPath.
- */
-- (nullable PFObject *)objectAtIndexPath:(nullable NSIndexPath *)indexPath;
-
-/**
- Removes an object at the specified index path, animated.
- */
-- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath;
-
-/**
- Removes all objects at the specified index paths, animated.
- */
-- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexes;
-
-///--------------------------------------
-/// @name Loading Data
-///--------------------------------------
-
-/**
- Clears the collection view and loads the first page of objects.
-
- @return An awaitable task that completes when the reload succeeds
- */
-- (BFTask *> *)loadObjects;
-
-/**
- Loads the objects of the `PFObject.parseClassName` at the specified page and appends it to the
- objects already loaded and refreshes the collection.
-
- @param page The page of objects to load.
- @param clear Whether to clear the collection view after receiving the objects.
-
- @return An awaitable task that completes when the reload succeeds
- */
-- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear;
-
-/**
- Loads the next page of objects, appends to table, and refreshes.
- */
-- (void)loadNextPage;
-
-/**
- Clears the collection view of all objects.
- */
-- (void)clear;
-
-///--------------------------------------
-/// @name Querying
-///--------------------------------------
-
-/**
- Override to construct your own custom `PFQuery` to get the objects.
-
- @return An instance of `PFQuery` that `-loadObjects` method will use to the objects for this collection.
- */
-- (PFQuery *)queryForCollection;
-
-///--------------------------------------
-/// @name Data Source Methods
-///--------------------------------------
-
-/**
- Override this method to customize each cell given a `PFObject` that is loaded.
-
- @warning The cell should inherit from `PFCollectionViewCell` which is a subclass of `UICollectionViewCell`.
-
- @param collectionView The collection view object associated with this controller.
- @param indexPath The indexPath of the cell.
- @param object The `PFObject` that is associated with the cell.
-
- @return The cell that represents this object.
- */
-- (nullable PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView
- cellForItemAtIndexPath:(NSIndexPath *)indexPath
- object:(nullable PFObject *)object;
-
-/**
- Override this method to customize the view that allows the user to load the
- next page when pagination is turned on.
-
- @param collectionView The collection view object associated with this controller.
-
- @return The view that allows the user to paginate.
- */
-- (nullable UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ParseUI/ParseUI/Source/PFQueryCollectionViewController.m b/ParseUI/ParseUI/Source/PFQueryCollectionViewController.m
deleted file mode 100644
index 0f3ded0fd..000000000
--- a/ParseUI/ParseUI/Source/PFQueryCollectionViewController.m
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import "PFQueryCollectionViewController.h"
-
-#if __has_include()
-#import
-#import
-#else
-#import "BFTask.h"
-#import "BFTaskCompletionSource.h"
-#endif
-
-@import ParseCore;
-
-#import "PFActivityIndicatorCollectionReusableView.h"
-#import "PFCollectionViewCell.h"
-#import "PFImageView.h"
-#import "PFLoadingView.h"
-#import "PFLocalization.h"
-#import "PFUIAlertView.h"
-
-static NSString *const PFQueryCollectionViewCellIdentifier = @"cell";
-static NSString *const PFQueryCollectionViewNextPageReusableViewIdentifier = @"nextPageView";
-
-@interface PFQueryCollectionViewController () {
- NSMutableArray *_mutableObjects;
-
- BOOL _firstLoad; // Whether we have loaded the first set of objects
- NSInteger _currentPage; // The last page that was loaded
- NSInteger _lastLoadCount; // The count of objects from the last load.
-}
-
-@property (nonatomic, strong) PFLoadingView *loadingView;
-
-@property (nonatomic, strong) PFActivityIndicatorCollectionReusableView *currentNextPageView;
-
-- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER;
-- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER;
-
-@end
-
-@implementation PFQueryCollectionViewController
-
-#pragma mark -
-#pragma mark Init
-
-- (instancetype)initWithCoder:(NSCoder *)decoder {
- // initWithCoder is usually a parallel designated initializer, as is the case here
- // It's used by storyboard
- self = [super initWithCoder:decoder];
- if (!self) return nil;
-
- [self _setupWithClassName:nil];
-
- return self;
-}
-
-- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
- // This is used by interface builder
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (!self) return nil;
-
- [self _setupWithClassName:nil];
-
- return self;
-}
-
-- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout {
- return[self initWithCollectionViewLayout:layout className:nil];
-}
-
-- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout className:(NSString *)className {
- self = [super initWithCollectionViewLayout:layout];
- if (!self) return nil;
-
- [self _setupWithClassName:className];
-
- return self;
-}
-
-- (instancetype)initWithClassName:(NSString *)className {
- UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
- return [self initWithCollectionViewLayout:layout className:className];
-}
-
-- (void)_setupWithClassName:(NSString *)otherClassName {
- _mutableObjects = [NSMutableArray array];
- _firstLoad = YES;
-
- // Set some reasonable defaults
- _objectsPerPage = 25;
- _loadingViewEnabled = YES;
- _paginationEnabled = YES;
- _pullToRefreshEnabled = YES;
- _lastLoadCount = -1;
-
- _parseClassName = [otherClassName copy];
-}
-
-#pragma mark -
-#pragma mark UIViewController
-
-- (void)loadView {
- [super loadView];
-
- self.collectionView.backgroundColor = [UIColor whiteColor];
-
- [self.collectionView registerClass:[PFCollectionViewCell class]
- forCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier];
- [self.collectionView registerClass:[PFActivityIndicatorCollectionReusableView class]
- forSupplementaryViewOfKind:UICollectionElementKindSectionFooter
- withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier];
-
- if (@available(iOS 10.0, *)) {
- if (self.pullToRefreshEnabled) {
- self.collectionView.refreshControl = [[UIRefreshControl alloc] init];
- [self.collectionView.refreshControl addTarget:self
- action:@selector(_refreshControlValueChanged:)
- forControlEvents:UIControlEventValueChanged];
- self.collectionView.alwaysBounceVertical = YES;
- }
- }
-}
-
-- (void)viewDidLoad {
- [super viewDidLoad];
-
- [self loadObjects];
-}
-
-- (void)viewDidLayoutSubviews {
- [super viewDidLayoutSubviews];
-
- self.loadingView.frame = self.collectionView.bounds;
-}
-
-#pragma mark -
-#pragma mark Responding to Events
-
-- (void)objectsWillLoad {
- [self _refreshLoadingView];
-}
-
-- (void)objectsDidLoad:(NSError *)error {
- [self _refreshLoadingView];
- _firstLoad = NO;
-}
-
-#pragma mark -
-#pragma mark Accessing Results
-
-- (NSArray *)objects {
- return _mutableObjects;
-}
-
-- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath {
- return self.objects[indexPath.row];
-}
-
-#pragma mark -
-#pragma mark Removing Objects
-
-- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath {
- [self removeObjectsAtIndexPaths:@[ indexPath ]];
-}
-
-- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths {
- if (indexPaths.count == 0) {
- return;
- }
-
- // We need the contents as both an index set and a list of index paths.
- NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
-
- for (NSIndexPath *indexPath in indexPaths) {
- if (indexPath.section != 0) {
- [NSException raise:NSRangeException format:@"Index Path section %lu out of range!", (long)indexPath.section];
- }
-
- if (indexPath.row >= self.objects.count) {
- [NSException raise:NSRangeException format:@"Index Path row %lu out of range!", (long)indexPath.row];
- }
-
- [indexes addIndex:indexPath.row];
- }
-
- BFContinuationBlock deletionHandlerBlock = ^id (BFTask *task) {
- if (@available(iOS 10.0, *)) {
- self.collectionView.refreshControl.enabled = YES;
- }
-
- if (task.error) {
- [self _handleDeletionError:task.error];
- }
-
- return nil;
- };
-
- NSMutableArray *allDeletionTasks = [NSMutableArray arrayWithCapacity:indexes.count];
- NSArray *objectsToRemove = [self.objects objectsAtIndexes:indexes];
-
- // Remove the contents from our local cache so we can give the user immediate feedback.
- [_mutableObjects removeObjectsInArray:objectsToRemove];
- [self.collectionView deleteItemsAtIndexPaths:indexPaths];
-
- for (id obj in objectsToRemove) {
- [allDeletionTasks addObject:[obj deleteInBackground]];
- }
-
- [[BFTask taskForCompletionOfAllTasks:allDeletionTasks]
- continueWithBlock:deletionHandlerBlock];
-}
-
-#pragma mark -
-#pragma mark Loading Data
-
-- (BFTask *> *)loadObjects {
- return [self loadObjects:0 clear:YES];
-}
-
-- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear {
- self.loading = YES;
- [self objectsWillLoad];
-
- PFQuery *query = [self queryForCollection];
- [self _alterQuery:query forLoadingPage:page];
-
- BFTaskCompletionSource *> *source = [BFTaskCompletionSource taskCompletionSource];
- [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (![Parse isLocalDatastoreEnabled] &&
- query.cachePolicy != kPFCachePolicyCacheOnly &&
- error.code == kPFErrorCacheMiss) {
- // no-op on cache miss
- return;
- }
-
- self.loading = NO;
-
- if (error) {
- self->_lastLoadCount = -1;
- self->_currentNextPageView.animating = NO;
- } else {
- self->_currentPage = page;
- self->_lastLoadCount = [foundObjects count];
-
- if (clear) {
- [self->_mutableObjects removeAllObjects];
- }
-
- [self->_mutableObjects addObjectsFromArray:foundObjects];
- [self.collectionView reloadData];
- }
-
- [self objectsDidLoad:error];
- if (@available(iOS 10.0, *)) {
- [self.collectionView.refreshControl endRefreshing];
- }
-
- if (error) {
- [source trySetError:error];
- } else {
- [source trySetResult:foundObjects];
- }
- });
- }];
- return source.task;
-}
-
-- (void)loadNextPage {
- if (!self.loading) {
- [self loadObjects:(_currentPage + 1) clear:NO];
- _currentNextPageView.animating = YES;
- }
-}
-
-- (void)clear {
- [_mutableObjects removeAllObjects];
- [self.collectionView reloadData];
- _currentPage = 0;
-}
-
-#pragma mark -
-#pragma mark Querying
-
-- (PFQuery *)queryForCollection {
- if (!self.parseClassName) {
- [NSException raise:NSInternalInconsistencyException
- format:@"You need to specify a parseClassName for the PFQueryTableViewController.", nil];
- }
-
- PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
-
- // If no objects are loaded in memory, we look to the cache first to fill the table
- // and then subsequently do a query against the network.
- if ([self.objects count] == 0 && ![Parse isLocalDatastoreEnabled]) {
- query.cachePolicy = kPFCachePolicyCacheThenNetwork;
- }
-
- [query orderByDescending:@"createdAt"];
-
- return query;
-}
-
-- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page {
- if (self.paginationEnabled && self.objectsPerPage) {
- query.limit = self.objectsPerPage;
- query.skip = page * self.objectsPerPage;
- }
-}
-
-#pragma mark -
-#pragma mark Data Source Methods
-
-- (PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView
- cellForItemAtIndexPath:(NSIndexPath *)indexPath
- object:(PFObject *)object {
- PFCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier
- forIndexPath:indexPath];
- [cell updateFromObject:object];
- return cell;
-}
-
-- (UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView {
- _currentNextPageView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter
- withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier
- forIndexPath:[self _indexPathForPaginationReusableView]];
- _currentNextPageView.textLabel.text = PFLocalizedString(@"Load more...", @"Load more...");
- [_currentNextPageView addTarget:self action:@selector(loadNextPage) forControlEvents:UIControlEventTouchUpInside];
- _currentNextPageView.animating = self.loading;
- return _currentNextPageView;
-}
-
-#pragma mark -
-#pragma mark UICollectionViewDataSource
-
-- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
- return 1;
-}
-
-- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
- return [self.objects count];
-}
-
-- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
- cellForItemAtIndexPath:(NSIndexPath *)indexPath {
- return [self collectionView:collectionView cellForItemAtIndexPath:indexPath object:[self objectAtIndexPath:indexPath]];
-}
-
-- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
- viewForSupplementaryElementOfKind:(NSString *)kind
- atIndexPath:(NSIndexPath *)indexPath {
- return [self collectionViewReusableViewForNextPageAction:collectionView];
-}
-
-#pragma mark -
-#pragma mark UICollectionViewDelegateFlowLayout
-
-- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
- if ([self _shouldShowPaginationView]) {
- return CGSizeMake(CGRectGetWidth(collectionView.bounds), 50.0f);
- }
- return CGSizeZero;
-}
-
-#pragma mark -
-#pragma mark Pagination
-
-- (BOOL)_shouldShowPaginationView {
- return (self.paginationEnabled &&
- [self.objects count] != 0 &&
- (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage));
-}
-
-- (NSIndexPath *)_indexPathForPaginationReusableView {
- return [NSIndexPath indexPathForItem:0 inSection:[self numberOfSectionsInCollectionView:self.collectionView] - 1];
-}
-
-#pragma mark -
-#pragma mark Error handling
-
-- (void)_handleDeletionError:(NSError *)error {
- // Fully reload on error.
- [self loadObjects];
-
- NSString *message = [NSString stringWithFormat:@"%@: \"%@\"",
- PFLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"),
- error.localizedDescription];
- [PFUIAlertView presentAlertInViewController:self withTitle:PFLocalizedString(@"Delete Error", @"Delete Error") message:message];
-}
-
-#pragma mark -
-#pragma mark Actions
-
-- (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl {
- if (!self.loading) {
- [self loadObjects];
- }
-}
-
-#pragma mark -
-#pragma mark Loading View
-
-- (void)_refreshLoadingView {
- BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad;
-
- if (showLoadingView) {
- [self.collectionView addSubview:self.loadingView];
- [self.view setNeedsLayout];
- } else {
- // Avoid loading `loadingView` - just use an ivar.
- if (_loadingView) {
- [self.loadingView removeFromSuperview];
- self.loadingView = nil;
- }
- }
-}
-
-- (PFLoadingView *)loadingView {
- if (!_loadingView) {
- _loadingView = [[PFLoadingView alloc] initWithFrame:CGRectZero];
- }
- return _loadingView;
-}
-
-@end
diff --git a/ParseUI/ParseUI/Source/PFQueryTableViewController.h b/ParseUI/ParseUI/Source/PFQueryTableViewController.h
deleted file mode 100644
index 3460f4caf..000000000
--- a/ParseUI/ParseUI/Source/PFQueryTableViewController.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 2014, Parse, LLC. All rights reserved.
- *
- * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- * copy, modify, and distribute this software in source code or binary form for use
- * in connection with the web services and APIs provided by Parse.
- *
- * As with any software that integrates with the Parse platform, your use of
- * this software is subject to the Parse Terms of Service
- * [https://www.parse.com/about/terms]. This copyright 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.
- *
- */
-
-#import
-#import "ParseUIConstants.h"
-
-@import ParseCore;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class BFTask<__covariant BFGenericType>;
-@class PFObject;
-@class PFQuery;
-@class PFTableViewCell;
-
-/**
- This class allows you to think about a one-to-one mapping between a `PFObject` and a `UITableViewCell`,
- rather than having to juggle index paths.
-
- You also get the following features out of the box:
-
- - Pagination with a cell that can be tapped to load the next page.
- - Pull-to-refresh table view header.
- - Automatic downloading and displaying of remote images in cells.
- - Loading screen, shown before any data is loaded.
- - Automatic loading and management of the objects array.
- - Various methods that can be overridden to customize behavior at major events in the data cycle.
- */
-@interface PFQueryTableViewController : UITableViewController